同じ VPC 内にある Amazon EC2 Linux インスタンス間のネットワークスループットをベンチマークする方法を教えてください。

所要時間3分
0

同じ Amazon Virtual Private Cloud (Amazon VPC) 内にある、Amazon Elastic Compute Cloud (Amazon EC2) Linux インスタンス間のネットワーク帯域幅を測定したいです。

解決策

ネットワークスループットのテストに使用するインスタンスタイプ、サイズ、設定を定義する

インスタンスが同じ VPC にある場合、複数の要因により、別々のクラウド環境間でネットワークパフォーマンスに大きな違いが生じる可能性があります。アプリケーションのパフォーマンスを向上させるために、環境のネットワークパフォーマンスを定期的に評価してベースライン化することがベストプラクティスです。ネットワークパフォーマンステストにより、ニーズに最適な EC2 インスタンスタイプ、サイズ、構成を決定するうえで有用な洞察を得られます。

ネットワークパフォーマンスを向上させるためにインスタンスを変更する

インスタンス間の距離を近くする

インスタンスが近くにあることを確認してください。インスタンスが物理的に近いほど、パフォーマンスが向上します。インスタンス同士が離れていると、ネットワーク遅延が発生する可能性があります。同じアベイラビリティーゾーンまたは AWS リージョンにインスタンスがある場合、別々のアベイラビリティーゾーンまたはリージョンに EC2 インスタンスがある場合よりもネットワークスループットが向上します。次のシナリオでは、インスタンス間の距離が次第に増加します。

  • 同じリージョン内の同じアベイラビリティーゾーンにあるインスタンス
  • 同じ AWS リージョン内の別々のアベイラビリティーゾーンにあるインスタンス
  • 同じ大陸の別々のリージョンにあるインスタンス
  • 別々の大陸の別々のリージョンにあるインスタンス

インスタンスの MTU を増やす

最大伝送単位 (MTU) を増やします。すべての EC2 インスタンスタイプは、1500 MTU をサポートしています。現行世代のすべてのインスタンスと前世代の C3、G2、I2、M3、R3 インスタンスは、ジャンボフレームをサポートしています。ジャンボフレームでは 1500 を超えた MTU を実現できます。ただし、ジャンボフレームをサポートするインスタンスは、特定のシナリオでは 1500 MTU に制限される場合があります。

インスタンスのサイズを増やす

インスタンスサイズを増やします。通常、インスタンスタイプのインスタンスサイズを大きくすると、同じタイプの小さいインスタンスサイズよりもネットワークパフォーマンスが向上します。

Linux 用の拡張ネットワークサポートを使用する

拡張ネットワーク機能を使用します。拡張ネットワーク機能では、パフォーマンスを向上させ、インスタンス間の遅延を安定して軽減することができます。現行世代のすべてのインスタンスでは、デフォルトで Elastic Network Adaptor (ENA) または ENA Express ドライバーを使用して拡張ネットワーク機能が有効になっています。

拡張ネットワーク機能をサポートする旧世代のインスタンスタイプでは、拡張ネットワーク機能を使用するための追加の設定が必要になる場合があります。

詳細については、「EC2 インスタンスで拡張ネットワーク機能を有効にして設定する方法を教えてください」を参照してください。

インスタンスをプレイスメントグループに配置する

ワークロードのニーズに合わせて、相互に依存するインスタンスをプレイスメントグループに配置して起動します。ハイパフォーマンスコンピューティング (HPC) では、完全な二分帯域幅と低レイテンシーを実現でき、インスタンスタイプに応じて最大 100 GB のネットワーク速度をサポートしています。

ネットワーク I/O クレジットメカニズムを使用してネットワーク帯域幅を割り当てる

お使いのインスタンスタイプが I/O ネットワーククレジットを使用することで、ベースライン帯域幅を超えてバーストできるかどうかを確認するには、「ネットワーク仕様」を参照してください。

テストインスタンスを設定する

次の手順を実行します。

  1. 2 つのテスト Linux インスタンスを起動します
  2. インスタンスが Linux 用の拡張ネットワーク機能をサポートしており、インスタンスが同じ VPC 内にあることを確認します。
  3. (オプション) ジャンボフレームをサポートしていないインスタンス間でネットワークテストを行う場合は、インスタンスにネットワーク MTU を設定します。
  4. SSH を使用してインスタンスに接続し、アクセスできることを確認します。

両方のインスタンスに iperf3 ネットワークベンチマークツールをインストールします。

Amazon Linux などの一部のディストリビューションでは、iperf3 は Extra Packages for Enterprise Linux (EPEL) リポジトリに含まれています。EPEL リポジトリを有効にするには、「CentOS、RHEL、Amazon Linux を実行する Amazon EC2 インスタンスで EPEL リポジトリを有効にする方法を教えてください」を参照してください。

iperf3 ツールの詳細については、ESNet のウェブサイトで iperf2/iperf3 を参照してください。

SSH を使用して Linux インスタンスに接続します。次に、お使いのオペレーティングシステム (OS) に応じて次のコマンドのいずれかを実行し、iperf3 をインストールします。

Red Hat Enterprise Linux (RHEL) 9:

$ sudo dnf -y install iperf3

Debian または Ubuntu:

$ sudo apt-get install -y iperf3

CentOS 6/7

$ sudo yum -y install epel-release && yum -y install iperf3

Amazon Linux 2023:

$ sudo yum -y install iperf3

インスタンス間の TCP ネットワークパフォーマンスをテストする

デフォルトでは、iperf3 は TCP パフォーマンスをテストするときにポート 5001 経由で通信します。なお、-p スイッチを使用してポートを変更することができます。セキュリティグループを、iperf3 が使用するポート経由での通信を許可するよう設定していることを確認してください。

最初のインスタンスを特定の TCP ポートでリッスンするサーバーとして設定するには、次のコマンドを実行します。

$ sudo iperf3 -s -p 5001

注: ポートを変更する場合は、5001 を該当するポート番号に置き換えます。

2 つ目のインスタンスをクライアントとして設定し、適切なパラメータを使用してサーバーに対してテストを実行します。たとえば、次のコマンドは、40 の並列接続を使用してサーバーインスタンスに対して TCP テストを開始します。

$ sudo iperf3 -c 172.31.30.41 --parallel 40 -i 1 -t 2

出力には、各クライアントストリームで転送される間隔とデータおよび、各クライアントストリームが使用する帯域幅が表示されます。次の iperf3 出力は、クラスタープレイスメントグループで起動する 2 つの c5n.18xlarge EC2 Linux インスタンスに関するテスト結果を示しています。すべての接続での送信帯域幅の合計は 97.6 Gbps です。

出力例:

------------------------------------------------------------------------------------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 ネットワークパフォーマンスをテストする

デフォルトでは、iperf3 は UDP パフォーマンスをテストするときにポート 5001 経由で通信します。なお、-p スイッチを使用してポートを変更することができます。セキュリティグループを、iperf3 が使用するポート経由での通信を許可するよう設定していることを確認してください。

注: 別の帯域幅を指定しない場合、UDP のデフォルトは 1 Mbps です。

最初のインスタンスを特定の UDP ポートでリッスンするサーバーとして設定するには、次のコマンドを実行します。

$ sudo iperf3 -s -u -p 5001

注: ポートを変更する場合は、5001 を該当するポート番号に置き換えます。

2 つ目のインスタンスをクライアントとして設定し、必要なパラメータを使用してサーバーに対してテストを実行します。次の例では、-b パラメータを 5g に設定して、サーバーインスタンスに対して UDP テストを実行します。-b パラメータは、帯域幅を UDP のデフォルトである 1 Mbps から 5 Gbps に変更します。5 Gbps は、c5n18xlarge インスタンスが VPC 内の単一のトラフィックフローで実現できる最大のネットワークパフォーマンスです。

$ sudo iperf3 -c 172.31.1.152 -u -b 5g

**注:**UDP はコネクションレス型であり、TCP のような輻輳制御アルゴリズムはありません。iperf3 でテストする場合、UDP から取得する帯域幅は TCP から取得する帯域幅よりも低くなる可能性があります。

出力例:

$ sudo iperf3 -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 データグラムの損失と合計

関連情報

iperf3 を使用してディスクをテストする (ESnet のウェブサイト)

ネットワークの調整 (ESnet のウェブサイト)

スループットツールの比較 (ESnet のウェブサイト)

iperf2 (SourceForge のウェブサイト)

iperf3 に関するよくある質問 (ESnet のウェブサイト)

AWS公式
AWS公式更新しました 2ヶ月前
コメントはありません

関連するコンテンツ