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

最終更新日: 2019 年 2 月 28 日

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

簡単な説明

この例は、同じ VPC 内の EC2 インスタンスにのみ適用されます。Amazon EC2 ネットワークのパフォーマンスに影響を与える可能性があるいくつかの要因は、以下のとおりです。

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

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

解決方法

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

  1. ネットワークパフォーマンステストを実行できる 2 つの Linux インスタンスを起動します。
  2. インスタンスが Linux 用の拡張ネットワーキングをサポートしていること、およびそれらが同じ 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 つのインスタンスをデフォルトポートでリッスンするサーバーとして設定するか、「-p」スイッチで代替リスナーポートを指定します。

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

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

$ sudo iperf -c 192.0.2.0 --parallel 10 -i 1 -t 60 [-p <port number>]

これらの指定された iperf パラメータを使用して、出力にはクライアントストリームごとの間隔 (60 秒)、クライアントストリームごとに転送されたデータ、および各クライアントストリームによって使用された帯域幅が表示されます。ここに示されている iperf 出力は、2 つの c5n.18xlarge EC2 Linux インスタンスのテストによって生成されました。ここでは、表示を簡単にするために、「-t」パラメータを「-t 60」ではなく「-t 2」に、「--parallel 10」を「--parallel 2」に変更しました。すべての接続で送信される総帯域幅は 9.6 Gbits/秒です。

Output:
$ iperf3 -c 192.0.2.0 -t 2 -i 1 --parallel 2 -R
Connecting to host 192.0.2.0, port 5201
Reverse mode, remote host 192.0.2.0 is sending
[  4] local 198.51.100.0 port 47122 connected to 192.0.2.0 port 5201
[  6] local 198.51.100.0 port 47124 connected to 192.0.2.0 port 5201
[ ID] Interval           Transfer     Bandwidth
[  4]   0.00-1.00   sec   572 MBytes  4.80 Gbits/sec
[  6]   0.00-1.00   sec   572 MBytes  4.80 Gbits/sec
[SUM]   0.00-1.00   sec  1.12 GBytes  9.60 Gbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[  4]   1.00-2.00   sec   573 MBytes  4.80 Gbits/sec
[  6]   1.00-2.00   sec   573 MBytes  4.80 Gbits/sec
[SUM]   1.00-2.00   sec  1.12 GBytes  9.61 Gbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bandwidth       Retr
[  4]   0.00-2.00   sec  1.12 GBytes  4.82 Gbits/sec    0             sender
[  4]   0.00-2.00   sec  1.12 GBytes  4.81 Gbits/sec                  receiver
[  6]   0.00-2.00   sec  1.12 GBytes  4.81 Gbits/sec    0             sender
[  6]   0.00-2.00   sec  1.12 GBytes  4.81 Gbits/sec                  receiver
[SUM]   0.00-2.00   sec  2.24 GBytes  9.63 Gbits/sec    0             sender
[SUM]   0.00-2.00   sec  2.24 GBytes  9.63 Gbits/sec                  receiver

iperf Done.

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

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

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

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

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

次に、2 番目のインスタンスをクライアントとして設定し、必要なパラメータを使用してサーバーに対してテストを実行します。たとえば、次のコマンドは、指定したサーバーインスタンスに対して、使用しているポートで 100 Mbps の目標帯域幅で UDP テストを開始します。

$ sudo iperf -c 10.0.2.176 [-p <port number>] -u -b 100m

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

[ ID] Interval        Transfer     Bandwidth       Jitter    Lost/Total Datagrams
[  3]  0.0-10.0 sec   120 MBytes   101 Mbits/sec  ; 0.005 ms  0/85470 (0%)
[  3]  0.0-10.0 sec   1 datagrams received out-of-order
[  3] Sent 15113 datagrams