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

最終更新日: 2020 年 1 月 14 日

同じ Amazon Virtual Private Cloud (Amazon VPC) 内にある、Amazon Elastic Compute Cloud (Amazon EC2) Linux インスタンス同士の間で、ネットワーク帯域幅を測定する必要があります。どうすればできますか?

簡単な説明

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

  • Amazon EC2 インスタンスの物理的な近接性です。 同じアベイラビリティーゾーン内のインスタンスは、地理的に互いに最も近いです。同じリージョン内の異なるアベイラビリティーゾーン内のインスタンス、同じ大陸の異なるリージョン内のインスタンス、および異なる大陸の異なるリージョン内のインスタンスは、この順番で互いの距離が遠くなります。
  • Amazon EC2 インスタンスの最大転送ユニット (MTU) です。 Amazon EC2 インスタンスのデフォルトのインターフェイス設定は、ジャンボフレーム (9001 MTU) にリストされているインスタンスサイズのいずれかである場合、ジャンボフレームを使用します。
  • Amazon EC2 インスタンスのサイズです。 インスタンスタイプのインスタンスサイズが大きいほど、通常は、同じタイプのインスタンスサイズが小さい場合よりもネットワークパフォーマンスが向上します。
  • T2 および M3 インスタンスタイプを除く、Linux に対する Amazon EC2 の拡張ネットワークサポートです
  • 配置グループを使用した Amazon EC2 高性能コンピューティング (HPC) のサポートです。 HPC は、インスタンスタイプに応じて、最大 100 ギガビットのネットワーク速度をサポートしながら、フルバイセクショニング帯域幅と低レイテンシーを提供します。各インスタンスタイプのネットワークパフォーマンスを確認するには、インスタンスタイプマトリックスを参照してください。詳細については、配置グループでインスタンスを起動するを参照してください。

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

解決方法

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

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

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

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

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

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

Amazon Linux などの一部のディストリビューションでは、iperf は EPEL リポジトリの一部です。EPEL リポジトリを有効にするには、CentOS、RHEL、Amazon Linux を実行している Amazon EC2 インスタンスに対して EPEL リポジトリを有効にする方法を参照してください。

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

CentOS6/7 ホストに iperf をインストールするには、以下のようなコマンドを実行します。

# yum -y install epel-release && yum -y install iperf

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

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

1.    1 つのインスタンスをデフォルトポートでリッスンするサーバーとして設定するか、「-p」スイッチで代替リスナーポートを指定します。

$ sudo iperf -s [-p <port number>]

2.    2 番目のインスタンスをクライアントとして設定し、必要なパラメータを指定しながらサーバーに対してテストを実行します。たとえば、次のコマンドでは、2 つのパラレル接続があるサーバーインスタンスを指定して、それに対する TCP テストを開始します。

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

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

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

Output should be as follows for iperf (v2) with default port:
------------------------------------------------------------
Client connecting to 172.31.1.152, TCP port 5001
TCP window size: 4.00 MByte (default)
------------------------------------------------------------
[ 3] local 172.31.8.116 port 43582 connected with 172.31.1.152 port 5001
[ 4] local 172.31.8.116 port 43584 connected with 172.31.1.152 port 5001
[ ID] Interval Transfer Bandwidth
[ 4] 0.0- 1.0 sec 597 MBytes 5.01 Gbits/sec
[ 3] 0.0- 1.0 sec 598 MBytes 5.02 Gbits/sec
[SUM] 0.0- 1.0 sec 1.17 GBytes 10.0 Gbits/sec
[ 3] 1.0- 2.0 sec 597 MBytes 5.01 Gbits/sec
[ 3] 0.0- 2.0 sec 1.17 GBytes 5.01 Gbits/sec
[ 4] 1.0- 2.0 sec 596 MBytes 5.00 Gbits/sec
[SUM] 1.0- 2.0 sec 1.16 GBytes 10.0 Gbits/sec
[ 4] 0.0- 2.0 sec 1.17 GBytes 5.00 Gbits/sec
[SUM] 0.0- 2.0 sec 2.33 GBytes 10.0 Gbits/sec

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

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

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

1.    1 つのインスタンスをデフォルト UDP ポートでリッスンするサーバーとして設定するか、「-p」スイッチで代替リスナーポートを指定します。

$ sudo iperf -s -u [-p <port number>]

2.    2 番目のインスタンスをクライアントとして設定し、必要なパラメータを使用してサーバーに対してテストを実行します。たとえば、次のコマンドは、「-b」パラメータを「5g」に設定して、指定されたサーバーインスタンスに対して UDP テストを開始します。このテストは、c5n18xlarge インスタンスが提供できる最大のネットワークパフォーマンスです。 

#iperf -c 172.31.1.152 -u -b 5g

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

Output:
------------------------------------------------------------
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)
------------------------------------------------------------
[ 3] local 172.31.8.116 port 38942 connected with 172.31.1.152 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 5.70 GBytes 4.90 Gbits/sec
[ 3] Sent 4163756 datagrams
[ 3] Server Report:
[ 3] 0.0-10.0 sec 5.68 GBytes 4.88 Gbits/sec 0.002 ms 14124/4163756 (0.34%)