Interconnect を介したネットワークのスループットを計算する

このチュートリアルでは、Google Cloud 内と、Cloud Interconnect で接続されたオンプレミスまたはサードパーティのクラウド ロケーションの両方でネットワーク スループットを計算する方法について説明します。このドキュメントでは、結果の分析方法、ネットワーク パフォーマンスに影響する変数のリスト、トラブルシューティングのヒントについて説明します。

制限事項と考慮事項

  • Cloud Interconnect の制限事項が適用されます。詳細については、Cloud Interconnect の割り当てをご覧ください。
  • NIC の上限: Google Cloud では、ネットワーク インターフェース(NIC)や IP アドレスごとではなく、仮想マシン(VM)インスタンスごとの帯域幅を考慮します。VM のマシンタイプによって最大下り(外向き)レートが定義されます。ただし、そのレートに達するのは特定の状況に限られます。マシンタイプごとの vCPU の数については、こちらのをご覧ください。
  • パス内の他のデバイス(ファイアウォール、バッファサイズの小さいスイッチ、他のベンダーのデバイス)とその制限が適用されます。これらの制限を緩和するため、次の作業を行います。

    • パス内のファイアウォールとスイッチでネットワーク統計情報を収集します。
    • Cloud Interconnect のテストを行う場合は、オンプレミス ホストと Google Edge デバイス間で、できる限り多くのデバイスをバイパスします。
    • オンプレミス ネットワークと Google Cloud VM 間のパスにあるすべてのデバイスがスループットの問題の原因となっている可能性がある場合、それらを特定し検証します。

ネットワーク スループットを測定するためのツールの概要

このチュートリアルでは、次のツールを使用してネットワーク スループットを計算する方法を説明します。

  • iPerf3: TCP / UDP データ ストリーム(シングルスレッドまたはマルチスレッド)を作成し、伝送するネットワークのスループットを測定できるネットワーク テストツール。

    : iPerf3 はシングル CPU マシンにのみ推奨されます。

  • Netperf: iPerf3 と類似していますが、単一 CPU で CPU バウンドのマルチ CPU インスタンスのスループット テストに適したツールです。

  • tcpdump: パケットの詳細と TCP/IP 通信をキャプチャし、より詳細なトラブルシューティングを行うコマンドライン パケット分析ツール。tcpdump ツールは、Wireshark などの他のツールに対応しています。

  • Netstat: 送信制御プロトコル(受信と送信の両方)のネットワーク接続、ルーティング テーブル、複数のネットワーク インターフェース(ネットワーク インターフェース コントローラまたはソフトウェア定義ネットワーク インターフェース)を表示するコマンドライン ネットワーク ユーティリティとネットワーク プロトコル統計を提供します。

  • mtr: traceroute と ping の両方の機能を実行するネットワーク診断ツール。個々のパケットが通過するホップ数を制限してルートパス上のルーターをプローブし、それらの有効期限のレスポンスをリッスンします。

iPerf3 を使ってスループットを測定する

単一の VM インスタンスからのスループットを測定するには、次の手順を行います。

大規模なマシンタイプを選択する

スループットのテストを行うには、n1-standard-8 などの大規模なマシンタイプを使用してください。このマシンタイプでは、最大 16 Gbps の下り(外向き)スループット上限があるため、VM あたりの下り(外向き)スループットがテストの妨げになることはありません。

ツールのインストール

Linux VM インスタンスに iPerf3、mtr、netstat、tcpdump をインストールする

Debian ベースのディストリビューションの場合は、次のコマンドを実行します。

    sudo apt-get update
    sudo apt-get install iperf3 tcpdump mtr netstat

Redhat ベースのディストリビューションの場合は、次のコマンドを実行します。

    yum update
    yum install iperf3 tcpdump mtr netstat

netperf をインストールする

Debian ベースのディストリビューションの場合は、次のコマンドを実行します。

    sudo apt-get install git build-essential autoconf texinfo -y
    git clone https://github.com/HewlettPackard/netperf.git
    cd netperf
    ./autogen.sh
    ./configure --enable-histogram --enable-demo=yes
    make
    cp src/netserver ~/.local/bin
    cp src/netperf ~/.local/bin

Redhat ベースのディストリビューションの場合は、次のコマンドを実行します。

    sudo yum install git build-essential autoconf texinfo -y
    git clone https://github.com/HewlettPackard/netperf.git
    cd netperf
    ./autogen.sh
    ./configure --enable-histogram --enable-demo=yes
    make
    cp src/netserver ~/.local/bin
    cp src/netperf ~/.local/bin

前提条件テストを実行する

  1. VLAN アタッチメントのサイズが正しく構成されていることを確認します。詳細については、VLAN アタッチメントの変更をご覧ください。
  2. 接続の両端(各ターミナル)で、top または htop コマンドを実行し、CPU 使用率をモニタリングします。
  3. テストを行う前に、netstat コマンドを使用してネットワーク統計情報を収集します。

    netstat -s >> netstat.log
    
  4. 別のターミナルで、snaplen パラメータ値が 128 のキャプチャを行う前に tcpdump コマンドを実行します。

    両方のエンドポイントで次のコマンドを実行します。

    sudo /usr/sbin/tcpdump -s 128 -i [DEVICE_INTERFACE] host [IP_ADDRESS of remote side] -w mycap.pcap
    
  5. ソースホストと宛先ホストの読み取りと書き込みのメモリサイズを取得します。

    $ sysctl net.ipv4.tcp_rmem
    $ sysctl net.ipv4.tcp_wmem
    $ sysctl net.core.rmem_max
    $ sysctl net.core.rmem_default
    $ net.core.wmem_max
    $ net.core.wmem_default
    $ uname -r
    $ cat /etc/os-release
    

iperf3 テストを実行する

フローごとに 3 Gbps の上限があるため、iperf3 テストでは複数の並列ストリームを実行することをおすすめします。帯域幅の制限を補正して有用な結果を得るには、最低 4 回、最大 10 回のテストを行うことをおすすめします。

  1. 別のターミナルを開き、接続の一方の端(VM またはオンプレミス マシン)で iperf3 サーバーを実行します。複数のストリームには複数の iperf3 サーバーが必要です。

  2. Cloud Interconnect テスト用に udp フラグを使用して iPerf3 ツールを実行します。UDP で目的のスループットを達成するには、さらにトラブルシューティングの手順を行う必要があります。

  3. コマンドラインから複数の iperf3 サーバーを実行するには、次のコマンドを実行します。

    $ iperf3 -s -p 5101&; iperf3 -s -t 30 -p 5102&; iperf3 -s  -p 5103 &
    
  4. 複数の iperf3 サーバーを実行するには、次の bash スクリプトを使用します。

    #!/bin/bash
    #start iperf3 server running in background
    
    for i in `seq 0 9`;
    do
            iperf3 -s  -B 10.0.100.35 -t 30 -u -p 521$i &
    done
    

iperf3 client はデフォルトで 10 秒間実行されますが、TCP が最大スループットに達するには十分でない可能性があります。信頼性を高めるには、DURATION の値を 30 秒以上に設定します。

    iperf3 -c [server IP address] -P [THREADS] -t [DURATION]

複数の iperf3 UDP ストリームを実行するための Bash スクリプト

echo "UDP iperf test - 10 streams"
for i in `seq 0 9`;
do
       iperf3 -B 10.0.100.35 -c 192.168.50.3 --logfile ~/gcpvm_client-521$i.log -u -b 1G  -l 1390 -t10 -p 521$i    &

done

複数の iperf3 TCP ストリームを実行するための Bash スクリプト

echo "UDP iperf test - 10 streams"
for i in `seq 0 9`;
do
       iperf3 -B 10.0.100.35 -c 192.168.50.3 --logfile ~/gcpvm_client-521$i.log -b 1G  -l 1390 -t10 -p 521$i    &

done

iperf3 テストの実行中に、両方のデバイスの CPU 負荷をモニタリングします。CPU 負荷が 100% に近ければ、CPU が 1 つの iperf3 スレッドでボトルネックになっています。この場合は、複数の CPU をサポートしている Netperf ツールを使用します。

Netperf を実行できない場合は、異なるターミナルと異なるポートで複数の iPerf3 サーバーとクライアントを同時に起動できます。

テスト結果を分析する

次の手順を行います。

  1. iperf3 クライアントの結果で帯域幅とパケットロスを確認します。
  2. iperf3 サーバーの結果で、順不同のパケットがないか確認します。
  3. パケット キャプチャを分析します。次のコマンドを実行して pcap ファイルをテキスト ファイルに変換します。

    tcpdump -A -[PCAP-FILENAME].pcap > [TXT-FILENAME].txt
    
  4. 次のコマンドを実行して、パケットと順不同のパケットの合計を取得します。

    grep -e "Total" -A1 pcap [TXT-FILENAME]
    

    次のような出力が表示されます。

    gcpvm-send-5210.txt:Total UDP packets: 874032
    gcpvm-send-5210.txt:Total out-of-order packets: 0, missing packets: 0
    gcpvm-send-5211.txt:Total UDP packets: 791218
    gcpvm-send-5211.txt:Total out-of-order packets: 0, missing packets: 0
    gcpvm-send-5212.txt:Total UDP packets: 961510
    gcpvm-send-5212.txt:Total out-of-order packets: 0, missing packets: 0
    gcpvm-send-5213.txt:Total UDP packets: 961517
    gcpvm-send-5213.txt:Total out-of-order packets: 0, missing packets: 0
    gcpvm-send-5214.txt:Total UDP packets: 961501
    gcpvm-send-5214.txt:Total out-of-order packets: 0, missing packets: 0
    gcpvm-send-5215.txt:Total UDP packets: 961521
    gcpvm-send-5215.txt:Total out-of-order packets: 0, missing packets: 0
    gcpvm-send-5216.txt:Total UDP packets: 889932
    gcpvm-send-5216.txt:Total out-of-order packets: 0, missing packets: 0
    gcpvm-send-5217.txt:Total UDP packets: 961483
    gcpvm-send-5217.txt:Total out-of-order packets: 0, missing packets: 0
    gcpvm-send-5218.txt:Total UDP packets: 961479
    gcpvm-send-5218.txt:Total out-of-order packets: 0, missing packets: 0
    gcpvm-send-5219.txt:Total UDP packets: 961518
    gcpvm-send-5219.txt:Total out-of-order packets: 0, missing packets: 0
    

    次の分析は、パフォーマンス テスト中のパケットロスを示しています。

    $ grep -e "Total" -A1 onPrem-send-*.txt
    

    次のような出力が表示されます。

    "Total" -A1 onPrem-send-*.txt
    onPrem-send-5210.txt:Total UDP packets: 858698
    onPrem-send-5210.txt:Total out-of-order packets: 0, missing packets: 5408
    --
    onPrem-send-5211.txt:Total UDP packets: 857667
    onPrem-send-5211.txt:Total out-of-order packets: 0, missing packets: 4929
    --
    onPrem-send-5212.txt:Total UDP packets: 857126
    onPrem-send-5212.txt:Total out-of-order packets: 0, missing packets: 5349
    --
    onPrem-send-5213.txt:Total UDP packets: 857424
    onPrem-send-5213.txt:Total out-of-order packets: 0, missing packets: 5495
    --
    onPrem-send-5214.txt:Total UDP packets: 857139
    onPrem-send-5214.txt:Total out-of-order packets: 0, missing packets: 4692
    --
    onPrem-send-5215.txt:Total UDP packets: 857175
    onPrem-send-5215.txt:Total out-of-order packets: 0, missing packets: 4789
    --
    onPrem-send-5216.txt:Total UDP packets: 857104
    onPrem-send-5216.txt:Total out-of-order packets: 0, missing packets: 5196
    --
    onPrem-send-5217.txt:Total UDP packets: 857122
    onPrem-send-5217.txt:Total out-of-order packets: 0, missing packets: 5423
    --
    onPrem-send-5218.txt:Total UDP packets: 857383
    onPrem-send-5218.txt:Total out-of-order packets: 0, missing packets: 5283
    --
    onPrem-send-5219.txt:Total UDP packets: 857313
    onPrem-send-5219.txt:Total out-of-order packets: 0, missing packets: 4934
    
  5. デバイスページにアクセスして、ポートのスループットを確認します。

  6. netstat の出力に読み取り / 書き込みエラーがある場合は、TCP / UDP 一括フロー調整が必要になることがあります。

  7. 順不同のパケットがある場合、VPN ゲートウェイでパケット キャプチャを実行し、詳しい分析を行う必要があります。 VPN ゲートウェイでのパケット キャプチャの実行については、サポートケースを作成してください。

  8. iperf3 UDP テストで目的のスループットに到達している場合、問題は別の場所にあります。TCP 調整が必要になることもあります。