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

最終更新日: 2021 年 3 月 22 日

同じ Amazon Virtual Private Cloud (Amazon VPC) 内にある、Amazon Elastic Compute Cloud (Amazon EC2) Linux インスタンス同士の間で、ネットワーク帯域幅を測定したいと考えています。その方法を教えてください。

簡単な説明

インスタンスが同じ Amazon VPC 内にある場合、Amazon EC2 ネットワークパフォーマンスに影響する可能性のある要因を以下に示します。

  • EC2 インスタンスの物理的な近接性。 同じアベイラビリティーゾーン内のインスタンスは、地理的に互いに最も近いです。同じリージョン内の異なるアベイラビリティーゾーン内のインスタンス、同じ大陸の異なるリージョン内のインスタンス、および異なる大陸の異なるリージョン内のインスタンスは、この順番で互いの距離が遠くなります。
  • EC2 インスタンスの最大送信単位 (MTU)。 ネットワーク接続の MTU は、接続が渡すことができる最大許容パケットサイズ (バイト単位) です。すべての EC2 インスタンスタイプは 1500 MTU をサポートします。現行世代の Amazon EC2 インスタンスはすべて、ジャンボフレームをサポートしています。さらに、旧世代のインスタンスである C3、G2、I2、M3、R3 もジャンボフレームを使用します。ジャンボフレームは 1500 MTU を超えることができます。ただし、インスタンスがジャンボフレームであっても 1500 MTU に制限されているシナリオがあります。詳細については、ジャンボフレーム (9001 MTU) を参照してください。
  • EC2 インスタンスのサイズ。 通常、同じインスタンスタイプ内では、サイズが大きいインスタンスほどネットワークパフォーマンスが高くなります。詳細については、Amazon EC2 インスタンスタイプを参照してください。
  • T2 および M3 インスタンスタイプを除く、Linux に対する Amazon EC2 の拡張ネットワークサポートです。詳細については、Linux での拡張ネットワーキングをご参照ください。インスタンスで拡張ネットワーキングを有効にする方法については、EC2 インスタンスで拡張ネットワーキングを有効にして設定する方法を教えてくださいを参照してください。
  • 配置グループを使用した Amazon EC2 高性能コンピューティング (HPC) のサポートです。 HPC は、インスタンスタイプに応じて、最大 100 ギガビットのネットワーク速度をサポートしながら、フルバイセクショニング帯域幅と低レイテンシーを提供します。各インスタンスタイプのネットワークパフォーマンスを確認するには、Amazon Linux AMI インスタンスタイプのマトリックスを参照してください。詳細については、配置グループでインスタンスを起動するを参照してください。
  • インスタンスは、ネットワーク I/O クレジットメカニズムを使用してネットワーク帯域幅を割り当てます。 汎用インスタンス - ネットワークパフォーマンスの [ネットワークパフォーマンス] 列で 記号で示されるインスタンスは、指定された最大ネットワークパフォーマンスに達する可能性があります。ただし、これらのインスタンスはネットワーク I/O クレジットメカニズムを使用して、平均帯域幅使用率に基づいてインスタンスに帯域幅を割り当てます。したがって、ネットワークパフォーマンスはこれらのインスタンスによって異なります。

上記の要因により、異なるクラウド環境間ではネットワークパフォーマンスに大きな違いが生じる可能性があります。アプリケーションのパフォーマンスを向上させるために、環境のネットワークパフォーマンスを定期的に評価してベースライン化することをお勧めします。ネットワークパフォーマンスをテストすることで、ニーズに最も適した EC2 インスタンスタイプ、サイズ、構成を判断するための貴重な洞察を得ることができます。ネットワークのパフォーマンステストは、選択したインスタンスの任意の組み合わせを実行できます。

詳細については、サポートケースを開き、関心のある特定のインスタンスタイプに対する追加のネットワークパフォーマンス仕様についてお問い合わせください。

解決方法

ベンチマークテストを始める前に、EC2 Linux インスタンスを起動して設定します。

1.    ネットワークパフォーマンステストを実行できる 2 つの Linux インスタンスを起動します。

2.    インスタンスが Linux 用の拡張ネットワーキングをサポートしていること、およびそれらが同じ Amazon VPC 内にあることを確認します。

3.    (オプション) ジャンボフレームをサポートしていないインスタンス間でネットワークテストを実行している場合は、EC2 インスタンスのネットワーク最大転送ユニット (MTU) の手順に従って、インスタンスで MTU を確認および設定してください。

4.    インスタンスに接続して、インスタンスにアクセスできることを確認します。

両方のインスタンスに iperf ネットワークベンチマークツールをインストール

Amazon Linux などの一部のディストリビューションでは、iperf は 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 フラグを使用した並列ストリームをサポートしていますが、バージョン 3.x はシングルスレッドであり、単一の CPU によって制限されています。このため、バージョン 3.x では、より大きな EC2 インスタンスで必要なスループットを向上させるために、複数のプロセスを並行して実行する必要があります。詳細については、ESnetのWebサイトにある iperf2/iperf3 を参照してください。

Linux インスタンスに接続してから、以下のコマンドを実行して iperf をインストールします。

RHEL 6 Linux ホスト に iperf をインストールするには、以下のコマンドを実行します。

# yum -y install  https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.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

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

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

1.    1 つのインスタンスをデフォルトポートでリッスンするサーバーとして設定するか、-p スイッチで代替リスナーポートを指定します。異なる場合は、5001 をご使用のポートに置き換えます。

$ sudo iperf -s [-p 5001]

2.    別のインスタンスはクライアントとして設定し、必要なパラメータを指定してサーバーに対してテストを実行します。例えば、次のコマンドでは 40 個の並列接続を使用するサーバーインスタンスを指定し、これに対して TCP テストを開始します。

# iperf -c 172.31.1.152 --parallel 40 -i 1 -t 2

注意: iperf (バージョン 2) を使用した双方向テストの場合、クライアント側で -r オプションを使用します。

この iperf パラメータを指定することで、クライアントストリームごとの間隔 、クライアントストリームごとに転送されたデータ、および各クライアントストリームが使用した帯域幅を表示することができます。次の iperf 出力は、2 つの c5n.18xlarge EC2 Linux インスタンスのテスト結果を示しています。すべての接続で送信される総帯域幅は 92.2 Gbits/秒です。

------------------------------------------------------------------------------------
Client connecting to 172.31.1.152, TCP port 5001
TCP window size: 715 KByte (default)
------------------------------------------------------------------------------------
[ 39] local 172.31.8.116 port 54666 connected with 172.31.1.152 port 5001
[ 41] local 172.31.8.116 port 54670 connected with 172.31.1.152 port 5001
[ 33] local 172.31.8.116 port 54660 connected with 172.31.1.152 port 5001
[ 42] local 172.31.8.116 port 54672 connected with 172.31.1.152 port 5001
[ 38] local 172.31.8.116 port 54664 connected with 172.31.1.152 port 5001
[ 5] local 172.31.8.116 port 54598 connected with 172.31.1.152 port 5001
...
[SUM] 0.0- 2.0 sec 21.5 GBytes 92.2 Gbits/sec

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

デフォルトでは、UDP パフォーマンスをテストするとき、iperf はポート 5001 を介して通信します。ただし、使用するポートは -p スイッチをを使って設定できます。iperf が使用するポートを介した通信を許可するようにセキュリティグループを設定してください。

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

1.    1 つのインスタンスをデフォルト UDP ポートでリッスンするサーバーとして設定するか、-p スイッチで代替リスナーポートを指定します。異なる場合は、5001 をご使用のポートに置き換えます。

$ sudo iperf -s -u [-p 5001]

2.    2 番目のインスタンスをクライアントとして設定し、必要なパラメータを使用してサーバーに対してテストを実行します。次の例では、-b パラメータを 5g に設定して、指定したサーバーインスタンスに対して UDP テストを開始します。

-b パラメーターは、帯域幅を UDP のデフォルトである 1 メガビット/秒から5gに変更します。5g は、c5n18xlarge インスタンスが VPC 内の単一のトラフィックフローに対して提供できる最大のネットワークパフォーマンスです。詳細については、100 Gpbs ネットワーキングを使用した新しい C5n インスタンスを参照してください。

注意:UDP はコネクションレスであり、TCP には輻輳制御アルゴリズムがありません。iperf でテストする場合、UDP で取得した帯域幅が TCIP で取得した帯域幅よりも低くなる可能性があります。

# iperf -c 172.31.1.152 -u -b 5g

出力には、間隔 (時間)、転送されたデータ量、達成された帯域幅、ジッター (データグラムの定期的な到着に対する時間のずれ)、および UDP データグラムの損失/合計が表示されます。

------------------------------------------------------------------------------------
Client connecting to 172.31.1.152, UDP port 5001
Sending 1470 byte datagrams, IPG target: 2.35 us (kalman adjust)
UDP buffer size: 208 KByte (default)
------------------------------------------------------------------------------------
[ 41] local 172.31.8.116 port 49244 connected with 172.31.1.152 port 5001
[ 39] local 172.31.8.116 port 44429 connected with 172.31.1.152 port 5001
[ 40] local 172.31.8.116 port 43990 connected with 172.31.1.152 port 5001
[ 5] local 172.31.8.116 port 58342 connected with 172.31.1.152 port 5001
[ 32] local 172.31.8.116 port 34897 connected with 172.31.1.152 port 5001
[ 43] local 172.31.8.116 port 38864 connected with 172.31.1.152 port 5001
...
[SUM] 0.0-10.0 sec 106 GBytes 90.7 Gbits/sec
[SUM] Sent 77152959 datagrams
...
[ 19] Server Report:
[ 19] 0.0-10.2 sec 1.36 GBytes 1.14 Gbits/sec 15.614 ms 307228/1303368 (24%)
[ 19] 0.00-10.25 sec 18 datagrams received out-of-order
[ 17] Server Report:
[ 17] 0.0-10.2 sec 1.85 GBytes 1.55 Gbits/sec 15.423 ms 1155619/2510063 (46%)
[ 17] 0.00-10.25 sec 31 datagrams received out-of-order