如何在 Amazon EC2 Windows 執行個體上對網路輸送量進行基準測試?

4 分的閱讀內容
0

我需要測量 Amazon Elastic Compute Cloud (Amazon EC2) Windows 執行個體之間的網路帶寬。我該如何操作?

解決方法

網路效能基準測試可協助您判斷最符合您需求的 Amazon EC2 執行個體類型、大小和組態。如需每種執行個體類型的網路效能的詳細資訊,請參閱 Amazon EC2 執行個體類型

啟動和設定您的 Amazon EC2 Windows 執行個體

運行基準測試之前,請按照下列步驟操作:

1.    啟動兩個 EC2 Windows 執行個體以執行網路效能測試。

2.    確認執行個體支援適用於 Windows 的增強型聯網

3.    若要在非同一置放群組中或不支援巨型帧的執行個體之間執行網路測試,請檢查並設定最大傳輸單元 (MTU)

4.    確認您可以連線至執行個體

在兩個執行個體上安裝 NTttcp 網路基準測試工具

連線到兩個 Windows 執行個體中的每個執行個體,然後依照下列步驟執行:

1.    從 GitHub 網站下載微軟最新版本的 NTttcp

2.    將檔案內容解壓縮到資料夾中。

3.    以系統管理員權限開啟命令提示字元,然後將目錄變更為解壓縮 NTttcp 網路基準測試工具的資料夾。

4.    在執行 NTttcp 之前,請將目錄變更為名稱與 EC2 Windows 執行個體架構相符的資料夾。

測試執行個體之間的 TCP 和 UDP 網路效能

測試 TCP 和 UDP 效能時,依預設 NTttcp 會透過連接埠 5001 進行通訊。不過,您可以使用 -p 交換器設定連接埠。

重要事項

  • 安全群組必須設定為允許透過 NTttcp 使用的連接埠進行通訊。
  • 在接收器和發送器上新增輸入和輸出 Windows 防火牆規則,以允許 NTttcp.exe 連線。

測試 TCP 網路效能

1.    從預設連接埠 5001 開始,將一個執行個體設定為接收器/伺服器,以初始化監聽器。或者,使用 -p 交換器指定替代的初始接聽程式連接埠。

例如,下列命令會初始化雙執行緒接收器,該接收器會在指定 IP 地址的 80—81 連接埠上接聽。第一個線程在 CPU 0 上運行,第二個線程在 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: 每個執行緒發佈六個接收重疊緩衝區的非同步資料傳輸
  • -t 60: 測試持續時間(秒)。
  • -cd 5: 5 秒的測試冷卻時間。
  • -wu 5: 測試預熱時間為 5 秒。
  • -v: 指定詳細測試輸出。
  • -xml: 將測試輸出保存到指定的檔案(預設保存為 xml.txt)。
  • -m: 為每個工作階段指定三個映射參數 (# 執行緒、CPUID、接收器 IP 地址)。多個工作階段會以空格分隔。

2.    將第二個執行個體設定為發送器/客戶端,然後使用您選擇的參數對接收器運行測試。

例如,下列命令會將雙執行緒 TCP 發送器初始化到指定 IP 位址的連接埠 80-81。第一個線程在 CPU 0 上運行,第二個線程在 CPU 1 上運行。

**注意:**下列命令的 IP 地址與步驟 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: 為每個工作階段指定三個映射參數 (# 執行緒、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.    從預設連接埠 5001 開始,將一個執行個體設定為接收器/伺服器,以初始化監聽器。或者,使用 -p 交換器指定替代的初始接聽程式連接埠。

例如,下列命令會初始化雙執行緒接收器,該接收器會在指定 IP 地址的 80—81 連接埠上接聽。第一個線程在 CPU 0 上運行,第二個線程在 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: 為每個工作階段指定三個映射參數 (# 執行緒、CPUID、接收器 IP 地址)。多個工作階段會以空格分隔。

2.    將第二個執行個體設定為發送器/用戶端,然後使用所需參數對接收器執行測試。

例如,下列命令會將雙執行緒 UDP 發送器初始化到指定 IP 地址的連接埠 80-81。第一個線程在 CPU 0 上運行,第二個線程在 CPU 1 上運行。

**注意:**下列命令的 IP 地址與步驟 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: 為每個工作階段指定三個映射參數 (# 執行緒、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

相關資訊

EC2 執行個體的網路最大傳輸單位 (MTU)

放置群組

如何在同一個 Amazon VPC 中對 Amazon EC2 Linux 執行個體之間的網路輸送量進行基準測試?

AWS 官方
AWS 官方已更新 3 年前