同じ Amazon VPC 内で Amazon EC2 Linux インスタンス間のネットワークスループットをベンチマークする方法を教えてください。
同じ Amazon Virtual Private Cloud (Amazon VPC) 内の Amazon Elastic Compute Cloud (Amazon EC2) Linux インスタンス間のネットワーク帯域幅を測定したいと考えています。
簡単な説明
インスタンスが同じ Amazon VPC 内にある場合に Amazon EC2 ネットワークのパフォーマンスに影響する可能性のある複数の要因は次のとおりです。
- **EC2 インスタンスの物理的な近さ:**同じアベイラビリティーゾーン内のインスタンスは、地理的に互いに最も近くにあります。次のシナリオでは、インスタンスは次第に互いに離れていきます。
同じ AWS リージョンの異なるアベイラビリティーゾーンにあるインスタンス
同じ大陸の異なるリージョンにあるインスタンス
異なる大陸の異なるリージョンのインスタンス - **EC2 インスタンスの最大転送ユニット (MTU)。**ネットワーク接続の MTU は、接続が通過できる最大許容パケットサイズ (バイト単位) です。すべての EC2 インスタンスタイプは 1500 MTU をサポートします。現行世代の Amazon EC2 インスタンスはすべてジャンボフレームをサポートしています。前世代のインスタンス、C3、G2、I2、M3、R3 もジャンボフレームを使用しています。ジャンボフレームでは 1500 MTU 以上を使用できます。ただし、ジャンボフレームがあってもインスタンスが 1500 MTU に制限されるシナリオもあります。詳細については、「ジャンボフレーム (9001 MTU)」を参照してください。
- EC2 インスタンスのサイズ: 通常、インスタンスタイプのインスタンスサイズを大きくすると、同じタイプの小さいインスタンスサイズよりもネットワークパフォーマンスが向上します。詳細については、「Amazon EC2 インスタンスタイプ」を参照してください。
- **Amazon EC2 は Linux 向けのネットワーキングサポートを強化:**拡張ネットワーキングサポートは、T2 および M3 インスタンスタイプ以外のインスタンスのパフォーマンスに影響を与える可能性があります。詳細については、 「Linux の拡張ネットワーク」を参照してください。インスタンスの拡張ネットワーキングの詳細については、「EC2 インスタンスで拡張ネットワーキングを有効にして設定する方法を教えてください」を参照してください。
- **プレイスメントグループを使用する Amazon EC2 ハイパフォーマンスコンピューティング (HPC) サポート:**HPC はフル二分割帯域幅と低遅延を実現します。HPC では、インスタンスタイプに応じて最大 100 ギガビットのネットワーク速度をサポートできます。各インスタンスタイプのネットワークパフォーマンスを確認するには、「Amazon Linux AMI インスタンスタイプマトリックス」を参照してください。詳細については、「プレイスメントグループ」を参照してください。
- インスタンスはネットワーク I/O クレジットメカニズムを使用してネットワーク帯域幅を割り当てます。汎用インスタンスのネットワークパフォーマンス列に † 記号が付いているインスタンス-ネットワークパフォーマンスは、指定された最大ネットワークパフォーマンスに達することができます。ただし、これらのインスタンスは、ネットワーク I/O クレジットメカニズムを使用して、平均帯域幅使用率に基づいてインスタンスに帯域幅を割り当てます。そのため、ネットワークパフォーマンスはこれらのインスタンスによって異なります。
これらの要因により、クラウド環境の間でパフォーマンスに大きな違いが生じる可能性があります。アプリケーションのパフォーマンスを向上させるために、環境のネットワークパフォーマンスを定期的に評価してベースライン化することがベストプラクティスです。ネットワークパフォーマンスをテストすることで、ニーズに最適な EC2 インスタンスタイプ、サイズ、構成を決定するための貴重な洞察が得られます。ネットワークパフォーマンステストは、選択したインスタンスの任意の組み合わせで実行できます。
詳細については、AWS サポートケースを開いて、関心のある特定のインスタンスタイプ用の追加のネットワークパフォーマンス仕様を問い合わせてください。
解決策
ベンチマークテストを開始する前に、EC2 Linux インスタンスを起動して設定します。
- ネットワークパフォーマンステストを実行できる 2 つの Linux インスタンスを起動します。
- インスタンスが Linux の拡張ネットワーキングをサポートしていること、およびインスタンスが同じ Amazon VPC 内にあることを確認します。
- (オプション) ジャンボフレームをサポートしないインスタンス間でネットワークテストを実行する場合は、「EC2 インスタンスのネットワーク最大伝送ユニット (MTU)」の手順に従って、インスタンスの MTU を確認して設定します。
- インスタンスに接続して、インスタンスにアクセスできることを確認します。
両方のインスタンスに iperf ネットワークベンチマークツールをインストールします。
Amazon Linux などの一部のディストリビューションでは、iperf は Extra Packages for Enterprise Linux (EPEL) リポジトリの一部です。EPEL リポジトリを有効にするには、「CentOS、RHEL、または Amazon Linux を実行する Amazon EC2 インスタンスの EPEL リポジトリを有効にするにはどうすればよいですか?」を参照してください。
**注:**iperf コマンドはバージョン 2.x を指します。コマンド iperf3 はバージョン 3.x を指します。バージョン 2.x はマルチスレッドをサポートしているため、高スループットで EC2 インスタンスをベンチマークする場合は、バージョン 2.x を使用してください。バージョン 3.x は -P フラグを使用したパラレルストリームもサポートしていますが、はシングルスレッドであり、単一の CPU に制限されています。このため、バージョン 3.x では、より大きな EC2 インスタンスで必要なスループットを高めるために、複数のプロセスを並行して実行する必要があります。詳細については、ESNet ウェブサイトの iperf2/iperf3 を参照してください。
Linux インスタンスに接続し、次のコマンドを実行して iperf をインストールします。
RHEL 6 Linux ホストに iperf をインストールするには、以下のコマンドを実行します。
# yum -y install https://dl.fedoraproject.org/pub/archive/epel/6/x86_64/epel-release-6-8.noarch.rpm && yum -y install iperf
RHEL 7 Linux ホストに iperf をインストールするには、以下のコマンドを実行します。
# yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm && yum -y install iperf
Debian/Ubuntu ホストに iperf をインストールするには、以下のコマンドを実行します。
# apt-get install -y iperf
CentOS 6/7 ホストに iperf をインストールするには、次のコマンドを実行します。
# yum -y install epel-release && yum -y install iperf
Amazon Linux 2023
Amazon Linux 2023 (AL2023) は EPEL をサポートしていないため、EPEL リポジトリから iperf ユーティリティをダウンロードすることはできません。詳細については、「Extra Packages for Enterprise Linux (EPEL)」を参照してください。
ただし、iperf for AL2023 を手動でダウンロードしてインストールすることはできます。
-
開発ツールと git をインストールします。
sudo yum groupinstall "Development Tools" sudo yum install git
-
iperf コードのクローンを作成します。
cd /usr/local/ sudo git clone https://git.code.sf.net/p/iperf2/code iperf2-code
-
パッケージをビルドしてインストールします。
cd /usr/local/iperf2-codesudo ./configure sudo make sudo make install
インスタンス間の TCP ネットワークパフォーマンスをテストする
デフォルトでは、iperf は TCP パフォーマンスをテストするときにポート 5001 を介して通信します。ただし、そのポートは -p スイッチを使用して構成できます。iperf が使用するポートを介した通信を許可するようにセキュリティグループを設定してください。
-
1 つのインスタンスをデフォルトポートでリッスンするサーバーとして構成するか、-p スイッチを使用して代替リスナーポートを指定します。異なる場合は、5001 を自分のポートに置き換えてください。
$ sudo iperf -s [-p 5001]
-
2 つ目のインスタンスをクライアントとして設定し、必要なパラメータを使用してサーバーに対してテストを実行します。たとえば、次のコマンドは、40 の並列接続を使用して指定されたサーバーインスタンスに対して TCP テストを開始します。
$ iperf -c 172.31.30.41 --parallel 40 -i 1 -t 2
**注:**iperf (バージョン 2) を使用して双方向テストを行うには、クライアント側で -r オプションを使用してください。
出力では、これらのパラメータを使用して、クライアントストリームごとの間隔、クライアントストリームごとに転送されるデータ、および各クライアントストリームが使用する帯域幅が表示されます。次の iperf 出力は、クラスタープレイスメントグループで起動する 2 つの c5n.18xlarge EC2 Linux インスタンスのテスト結果を示しています。すべての接続での送信帯域幅の合計は 97.6 ギガビット/秒です。
------------------------------------------------------------------------------------ Client connecting to 172.31.30.41, TCP port 5001 TCP window size: 975 KByte (default) ------------------------------------------------------------------------------------ [ 8] local 172.31.20.27 port 49498 connected with 172.31.30.41 port 5001 [ 38] local 172.31.20.27 port 49560 connected with 172.31.30.41 port 5001 [ 33] local 172.31.20.27 port 49548 connected with 172.31.30.41 port 5001 [ 40] local 172.31.20.27 port 49558 connected with 172.31.30.41 port 5001 [ 36] local 172.31.20.27 port 49554 connected with 172.31.30.41 port 5001 [ 39] local 172.31.20.27 port 49562 connected with 172.31.30.41 port 5001 ... [SUM] 0.0- 2.0 sec 22.8 GBytes 97.6 Gbits/sec
インスタンス間の UDP ネットワークパフォーマンスをテストする
デフォルトでは、iperf は UDP パフォーマンスをテストするときにポート 5001 を介して通信します。ただし、-p スイッチを使用してそのポートを設定することができます。iperf が使用するポートを介した通信を許可するようにセキュリティグループを設定してください。
**注:**別の帯域幅を指定しない限り、UDP のデフォルトは 1 メガビット/秒です。
-
1 つのインスタンスを、デフォルトの UDP ポートでリッスンするサーバーとして設定します。または、-p スイッチを使用して、代替の初期リスナーポートを指定します。異なる場合は、5001 を自分のポートに置き換えてください。
$ sudo iperf -s -u [-p 5001]
-
2 つ目のインスタンスをクライアントとして設定します。次に、必要なパラメーターを使用してサーバーのテストを実行します。次の例では、-b パラメータを 5g に設定して、指定されたサーバーインスタンスに対して UDP テストを実行します。-b パラメータは、帯域幅をデフォルトである 1 メガビット/秒から 5g に変更します。5g は、c5n18xlarge インスタンスが VPC 内の単一のトラフィックフローに提供できる最大のネットワークパフォーマンスです。
**注:**UDP はコネクションレス型であり、TCP のような輻輳制御アルゴリズムはありません。iperf を使用してテストする場合、UDP で取得した帯域幅は TCIP で取得した帯域幅よりも低くなる可能性があります。# iperf -c 172.31.1.152 -u -b 5g
UDP テストの出力例を次に示します。
$ iperf -c 172.31.30.41 -u -b 5g ------------------------------------------------------------------------------------ Client connecting to 172.31.30.41, UDP port 5001 Sending 1470 byte datagrams, IPG target: 2.35 us (kalman adjust) UDP buffer size: 208 KByte (default) ------------------------------------------------------------------------------------ [ 3] local 172.31.20.27 port 39022 connected with 172.31.30.41 port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0-10.0 sec 5.82 GBytes 5.00 Gbits/sec [ 3] Sent 4251700 datagrams [ 3] Server Report: [ 3] 0.0-10.0 sec 5.82 GBytes 5.00 Gbits/sec 0.003 ms 1911/4251700 (0.045%) [ 3] 0.00-10.00 sec 1 datagrams received out-of-order
この出力には次の値が表示されます。
- 間隔 (時間)
- 転送されたデータ量
- 達成された帯域幅
- ジッター (データグラムが定期的に到着するまでの時間の偏差)
- UDP データグラムの損失と合計
関連情報
ESNet Web サイトの iperf3 を使用したディスクテスト
ESNet Web サイトでのネットワークチューニング
ESNet Web サイトでのスループットツールの比較
SourceForge Web サイトの iperf2
関連するコンテンツ
- 質問済み 7年前lg...
- 質問済み 2年前lg...
- AWS公式更新しました 2年前
- AWS公式更新しました 2年前
- AWS公式更新しました 2年前