このチュートリアルでは、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
前提条件テストを実行する
- VLAN アタッチメントのサイズが正しく構成されていることを確認します。詳細については、VLAN アタッチメントの変更をご覧ください。
- 接続の両端(各ターミナル)で、
top
またはhtop
コマンドを実行し、CPU 使用率をモニタリングします。 テストを行う前に、
netstat
コマンドを使用してネットワーク統計情報を収集します。netstat -s >> netstat.log
別のターミナルで、
snaplen
パラメータ値が128
のキャプチャを行う前にtcpdump
コマンドを実行します。両方のエンドポイントで次のコマンドを実行します。
sudo /usr/sbin/tcpdump -s 128 -i [DEVICE_INTERFACE] host [IP_ADDRESS of remote side] -w mycap.pcap
ソースホストと宛先ホストの読み取りと書き込みのメモリサイズを取得します。
$ 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 回のテストを行うことをおすすめします。
別のターミナルを開き、接続の一方の端(VM またはオンプレミス マシン)で
iperf3
サーバーを実行します。複数のストリームには複数のiperf3
サーバーが必要です。Cloud Interconnect テスト用に
udp
フラグを使用して iPerf3 ツールを実行します。UDP で目的のスループットを達成するには、さらにトラブルシューティングの手順を行う必要があります。コマンドラインから複数の
iperf3
サーバーを実行するには、次のコマンドを実行します。$ iperf3 -s -p 5101&; iperf3 -s -t 30 -p 5102&; iperf3 -s -p 5103 &
複数の 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 サーバーとクライアントを同時に起動できます。
テスト結果を分析する
次の手順を行います。
iperf3
クライアントの結果で帯域幅とパケットロスを確認します。iperf3
サーバーの結果で、順不同のパケットがないか確認します。パケット キャプチャを分析します。次のコマンドを実行して pcap ファイルをテキスト ファイルに変換します。
tcpdump -A -[PCAP-FILENAME].pcap > [TXT-FILENAME].txt
次のコマンドを実行して、パケットと順不同のパケットの合計を取得します。
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
デバイスページにアクセスして、ポートのスループットを確認します。
netstat
の出力に読み取り / 書き込みエラーがある場合は、TCP / UDP 一括フロー調整が必要になることがあります。順不同のパケットがある場合、VPN ゲートウェイでパケット キャプチャを実行し、詳しい分析を行う必要があります。 VPN ゲートウェイでのパケット キャプチャの実行については、サポートケースを作成してください。
iperf3
UDP テストで目的のスループットに到達している場合、問題は別の場所にあります。TCP 調整が必要になることもあります。