Amazon EC2 Windows インスタンスでネットワークスループットをベンチマークを行うにはどうすればよいですか?

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

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

解決方法

ネットワークパフォーマンスベンチマークテストは、お客様のニーズに最も適した Amazon EC2 インスタンスのタイプ、サイズ、設定を決定するのに役立ちます。各インスタンスタイプのネットワークパフォーマンスの詳細については、「Amazon EC2 インスタンスタイプ」を参照してください。

Amazon EC2 Windows インスタンスを起動して設定する

ベンチマークテストを実行する前に、次の手順を実行します。

1.    2 つの EC2 Windows インスタンスを起動して、ネットワークパフォーマンステストを実行します。

2.    インスタンスが Windows 用の拡張ネットワーキングをサポートしていることを確認します。

3.    同じプレイスメントグループに所属していないインスタンスまたはジャンボフレームをサポートしていないインスタンス間でネットワークテストを実行するには、最大転送ユニット (MTU) をチェックして設定します

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

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

2 つの Windows インスタンスのそれぞれに接続し、次の手順を実行します。

1.    GitHub ウェブサイトからMicrosoft の NTttcp の最新リリースをダウンロードします

2.    ファイルのコンテンツをフォルダに解凍します。

3.    管理者権限でコマンドプロンプトを開いてから、NTttcp ネットワークベンチマークツールを解凍したフォルダにディレクトリを変更します。

4.    NTttcp を実行する前に、EC2 Windows インスタンスのアーキテクチャと一致する名前のフォルダにディレクトリを変更します。

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

TCP および UDP パフォーマンスをテストする場合、NTttcp はデフォルトではポート 5001 を介して通信します。けれども、-p スイッチを使用してそのポートを設定することができます。

重要:

  • セキュリティグループは、NTttcp が使用するポートを介した通信を許可するように設定する必要があります。
  • NTttcp.exe 接続を許可するレシーバー側と送信者側の両方に、インバウンドとアウトバウンドの Windows ファイアウォールルールを追加します。

TCP ネットワークパフォーマンスのテスト

1.    1 つのインスタンスをレシーバー/サーバーとして設定し、リスナーを初期化します。デフォルトのポート 5001 から開始します。または、-p スイッチを使用して、代替の初期リスナーポートを指定します。

たとえば、次のコマンドは、指定された IP アドレスのポート 80 ~ 81 でリッスンする 2 スレッドレシーバーを初期化します。最初のスレッドは CPU 0 で実行され、2 番目のスレッドは CPU 1 で実行されます。

ntttcp -r -p 80 -a 6 -t 60 -cd 5 -wu 5 -v -xml c:\bench.xml -m 1,0,192.168.1.4 1,1,192.168.1.4

上記の例の ntttcp.exe レシーバーパラメータを記述すると、次のようになります。

  • -r: 受信。
  • -p 80: 最初のスレッドがデータを受信するために使用するポート。ポート番号は、レシーバースレッドを追加するごとに増分されます。
  • -a 6: スレッドごとに 6 つの受信重複バッファを投稿する非同期データ転送
  • -t 60: 数単位のテスト時間。
  • -cd 5: 5 秒のテストクールダウン時間。
  • -wu 5: 5 秒のテストウォームアップ時間。
  • -v: 詳細なテスト出力を指定します。
  • -xml: テスト出力を指定されたファイルに保存します (デフォルトでは xml.txt に保存されます)。
  • -m: セッションごとに 3 つのマッピングパラメータ (スレッド数、CPUID、レシーバー IP アドレス) を指定します。複数のセッションは、スペースで区切られています。

2.    2 番目のインスタンスを送信者/クライアント側として設定し、選択したパラメータを使ってレシーバー側に対してテストを実行します。

例えば、次のコマンドは、指定された IP アドレスのポート 80-81 に 2 スレッド TCP 送信者を初期化します。最初のスレッドは CPU 0 で実行され、2 番目のスレッドは CPU 1 で実行されます。

注: 次のコマンドには、ステップ 1 のコマンドと同じ IP アドレスが指定されています。両方のコマンドでレシーバー IP アドレスを入力します。

ntttcp -s -p 80 -a -t 60 -cd 5 -wu 5 -m 1,0,192.168.1.4 1,1,192.168.1.4

上記の例の ntttcp.exe 送信者パラメータを記述すると、次のようになります。

  • -s: 送信。
  • -p 80: 最初のスレッドがデータを送信するために使用するポート。このポート番号は、送信者スレッドを追加するごとに増分されます。
  • -a: スレッドごとの非同期送信オーバーラップバッファのデフォルト値は 2 です。必要に応じて、デフォルト値以外の値を指定します。
  • -t 60: 数単位のテスト時間。
  • -cd 5: 5 秒のテストクールダウン時間。
  • -wu 5: 5 秒のテストウォームアップ時間。
  • -m: セッションごとに 3 つのマッピングパラメータ (スレッド数、CPUID、レシーバー IP アドレス) を指定します。複数のセッションは、スペースで区切られています。

レシーバーで生成される XML 出力は次のようになります。このテストでは、使用した総帯域幅は約 9.02 Gbps でした。

<ntttcpr computername="Win_EC2_Recv" version="5.31">
  <parameters>
    <send_socket_buff>0</send_socket_buff>
    <recv_socket_buff>-1</recv_socket_buff>
    <port>82</port>
    <sync_port>False</sync_port>
    <async>True</async>
    <verbose>True</verbose>
    <wsa>False</wsa>
    <use_ipv6>False</use_ipv6>
    <udp>False</udp>
    <verify_data>False</verify_data>
    <wait_all>False</wait_all>
    <run_time>60000</run_time>
    <warmup_time>5000</warmup_time>
    <cooldown_time>5000</cooldown_time>
    <dash_n_timeout>10800000</dash_n_timeout>
    <bind_sender>False</bind_sender>
    <sender_name></sender_name>
    <max_active_threads>2</max_active_threads>
  </parameters>
  <thread index="0">
    <realtime metric="s">60.012</realtime>
    <throughput metric="KB/s">542199.263</throughput>
    <throughput metric="MB/s">529.491</throughput>
    <throughput metric="mbps">4441.696</throughput>
    <avg_bytes_per_compl metric="B">65091.350</avg_bytes_per_compl>
  </thread>
  <thread index="1">
    <realtime metric="s">60.012</realtime>
    <throughput metric="KB/s">559260.669</throughput>
    <throughput metric="MB/s">546.153</throughput>
    <throughput metric="mbps">4581.463</throughput>
    <avg_bytes_per_compl metric="B">65535.750</avg_bytes_per_compl>
  </thread>
  <total_bytes metric="MB">64550.500000</total_bytes>
  <realtime metric="s">60.011000</realtime>
  <avg_bytes_per_compl metric="B">65316.236</avg_bytes_per_compl>
  <threads_avg_bytes_per_compl metric="B">65313.550</threads_avg_bytes_per_compl>
  <avg_frame_size metric="B">8194.809</avg_frame_size>
  <throughput metric="MB/s">1075.644</throughput>
  <throughput metric="mbps">9023.160</throughput>
  <total_buffers>1032808.000</total_buffers>
  <throughput metric="buffers/s">17210.311</throughput>
  <avg_packets_per_interrupt metric="packets/interrupt">5.749
    </avg_packets_per_interrupt>
  <interrupts metric="count/sec">23942.694</interrupts>
  <dpcs metric="count/sec">9546.816</dpcs>
  <avg_packets_per_dpc metric="packets/dpc">14.417
    </avg_packets_per_dpc>
  <cycles metric="cycles/byte">2.826</cycles>
  <packets_sent>730596</packets_sent>
  <packets_received>8259632</packets_received>
  <packets_retransmitted>0</packets_retransmitted>
  <errors>0</errors>
  <cpu metric="%">7.813</cpu>
  <bufferCount>9223372036854775807</bufferCount>
  <bufferLen>65536</bufferLen>
  <io>6</io>
</ntttcpr>

UDP ネットワークパフォーマンスのテスト

1.    1 つのインスタンスをレシーバー/サーバーとして設定し、リスナーを初期化します。デフォルトのポート 5001 から開始します。または、-p スイッチを使用して、代替の初期リスナーポートを指定します。

たとえば、次のコマンドは、指定された IP アドレスのポート 80 ~ 81 でリッスンする 2 スレッドレシーバーを初期化します。最初のスレッドは CPU 0 で実行され、2 番目のスレッドは CPU 1 で実行されます。

ntttcp –r –u -p 80 –t 60 –cd 5 –wu 5 –v –xml c:\\bench.xml –m 1,0,192.168.1.4 1,1,192.168.1.4

上記の例の ntttcp.exe レシーバーパラメータを記述すると、次のようになります。

  • -r: 受信。
  • -u: UDP をテスト。
  • -p 80: 最初のスレッドがデータを受信するために使用するポート。ポート番号は、レシーバースレッドを追加するごとに増分されます。
  • -t 60: 数単位のテスト時間。
  • -cd 5: 5 秒のテストクールダウン時間。
  • -wu 5: 5 秒のテストウォームアップ時間。
  • -v: 詳細なテスト出力を指定します。
  • -xml: テスト出力を指定されたファイルに保存します (デフォルトでは xml.txt に保存されます)。
  • -m: セッションごとに 3 つのマッピングパラメータ (スレッド数、CPUID、レシーバー IP アドレス) を指定します。複数のセッションは、スペースで区切られています。

2.    2 番目のインスタンスを送信者/クライアント側として設定し、必要なパラメータを使ってレシーバー側に対してテストを実行します。

たとえば、次のコマンドは、指定された IP アドレスのポート 80-81 に 2 スレッド UDP 送信者を初期化します。最初のスレッドは CPU 0 で実行され、2 番目のスレッドは CPU 1 で実行されます。

注: 次のコマンドには、ステップ 1 のコマンドと同じ IP アドレスが指定されています。両方のコマンドでレシーバー IP アドレスを入力します。

ntttcp -s –u -p 80 -t 60 -cd 5 -wu 5 -m 1,0,192.168.1.4 1,1,192.168.1.4

上記の例の ntttcp.exe 送信者パラメータを記述すると、次のようになります。

  • -s: 送信。
  • -u: UDP をテスト (デフォルトでは TCP をテスト)。
  • -p 80: 最初のスレッドがデータを送信するために使用するポート。ポート番号は、送信者スレッドを追加するごとに増分されます。
  • -t 60: 数単位のテスト時間。
  • -cd 5: 5 秒のテストクールダウン時間。
  • -wu 5: 5 秒のテストウォームアップ時間。
  • -m: セッションごとに 3 つのマッピングパラメータ (スレッド数、CPUID、レシーバー IP アドレス) を指定します。複数のセッションは、スペースで区切られています。

レシーバーで生成される XML 出力は次のようになります。

<ntttcpr computername="Win_UDP_Test" version="5.31">
  <parameters>
    <send_socket_buff>8192</send_socket_buff>
    <recv_socket_buff>-1</recv_socket_buff>
    <port>82</port>
    <sync_port>False</sync_port>
    <async>False</async>
    <verbose>True</verbose>
    <wsa>False</wsa>
    <use_ipv6>False</use_ipv6>
    <udp>True</udp>
    <verify_data>False</verify_data>
    <wait_all>False</wait_all>
    <run_time>60000</run_time>
    <warmup_time>5000</warmup_time>
    <cooldown_time>5000</cooldown_time>
    <dash_n_timeout>10800000</dash_n_timeout>
    <bind_sender>False</bind_sender>
    <sender_name></sender_name>
    <max_active_threads>2</max_active_threads>
  </parameters>
  <thread index="0">
    <realtime metric="s">60.016</realtime>
    <throughput metric="KB/s">6463.886</throughput>
    <throughput metric="MB/s">6.312</throughput>
    <throughput metric="mbps">52.952</throughput>
    <avg_bytes_per_compl metric="B">128.000</avg_bytes_per_compl>
  </thread>
  <thread index="1">
    <realtime metric="s">60.016</realtime>
    <throughput metric="KB/s">7712.922</throughput>
    <throughput metric="MB/s">7.532</throughput>
    <throughput metric="mbps">63.184</throughput>
    <avg_bytes_per_compl metric="B">128.000</avg_bytes_per_compl>
  </thread>
  <total_bytes metric="MB">830.880005</total_bytes>
  <realtime metric="s">60.015000</realtime>
  <avg_bytes_per_compl metric="B">128.000</avg_bytes_per_compl>
  <threads_avg_bytes_per_compl metric="B">128.000<</threads_avg_bytes_per_compl>
  <avg_frame_size metric="B">127.780</avg_frame_size>
  <throughput metric="MB/s">13.845</throughput>
  <throughput metric="mbps">116.136</throughput>
  <total_buffers>6806569.000</total_buffers>
  <throughput metric="buffers/s">113414.463</throughput>
  <avg_packets_per_interrupt metric="packets/interrupt">1.968
  </avg_packets_per_interrupt>
  <interrupts metric="count/sec">57715.621</interrupts>
  <dpcs metric="count/sec">11576.306</dpcs>
  <avg_packets_per_dpc metric="packets/dpc">9.814</avg_packets_per_dpc>
  <cycles metric="cycles/byte">210.673</cycles>
  <packets_sent>2</packets_sent>
  <packets_received>6818294</packets_received> 
  <packets_retransmitted>0</packets_retransmitted>
  <errors>1</errors>
  <cpu metric="%">44.976</cpu>
  <bufferCount>9223372036854775807</bufferCount>
  <bufferLen>128</bufferLen>
  <io>2</io>
</ntttcpr>
(オプション) NTttcp スイッチ

NTttcp で使用できるすべてのスイッチを表示するには、コマンドプロンプトを開き、次のコマンドを実行します。

ntttcp