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

4 分的閱讀內容
0

我想要在相同的 Amazon Virtual Private Cloud (Amazon VPC) 中測量 Amazon Elastic Compute Cloud (Amazon EC2) Linux 執行個體之間的網路頻寬。

簡短說明

以下是在執行個體位於相同的 Amazon VPC 時,可能會影響 Amazon EC2 網路效能的某些因素:

  • **EC2 執行個體的實體接近度:**相同「可用區域」中的執行個體在地理位置上彼此最接近。在下列情況下,各個執行個體會彼此逐漸遠離:
    相同「AWS 區域」的不同「可用區域」中的執行個體
    相同所在洲不同「區域」中的執行個體
    不同所在洲不同「區域」中的執行個體
  • **EC2 執行個體最大傳輸單元 (MTU)。**網路連線的 MTU 是您的連線可以通過的最大允許封包大小 (以位元組為單位)。所有 EC2 執行個體類型會支援 1500 個 MTU。所有目前這一代的 Amazon EC2 執行個體會支援巨型訊框。前一代執行個體 C3、G2、I2、M3 和 R3 也會使用巨型訊框。巨型訊框允許超過 1500 個 MTU。不過,在某些情況下,即便使用巨型訊框,您的執行個體也會限制為 1500 個 MTU。如需詳細資訊,請參閱巨型訊框 (9001 個 MTU)
  • **EC2 執行個體的大小:**執行個體類型較大的執行個體大小通常會比相同類型的較小執行個體能提供更好的網路效能。如需詳細資訊,請參閱 Amazon EC2 執行個體類型
  • **適用於 Linux 的 Amazon EC2 增強型網路支援:**增強型網路支援可能會影響 T2 和 M3 執行個體類型以外的執行個體效能。如需詳細資訊,請參閱 Linux 上的增強型網路。如需執行個體增強型網路的詳細資訊,請參閱如何在 EC2 執行個體上開啟和設定增強型網路?
  • **使用放置群組的 Amazon EC2 高效能運算 (HPC) 支援:**HPC 會提供全等分頻寬和低延遲。HPC 允許支援最多 100-gigabit 的網路速度,取決於執行個體類型。若要檢閱每個執行個體類型的網路效能,請參閱 Amazon Linux AMI 執行個體類型對照表。如需詳細資訊,請參閱在放置群組中啟動執行個體
  • **執行個體會使用網路 I/O 額度機制來配置網路頻寬:**在一般用途執行個體 - 網路效能的「網路效能」資料欄中,以 符號指定的執行個體可達到指定的最大網路效能。不過,這些執行個體會使用網路 I/O 額度機制,根據平均頻寬使用率為執行個體配置頻寬。因此,這些執行個體的網路效能會有所不同。

由於這些因素,您可能會在不同雲端環境之間遇到明顯的網路效能差異。最佳實務是定期評估環境的網路效能並進行基準評估,以改善應用程式效能。測試網路效能可提供寶貴的深入了解,以判斷最符合您需求的 EC2 執行個體類型、大小和組態。您可以在您選擇的任何執行個體組合上執行網路效能測試。

如需詳細資訊,請開啟 AWS Support 案例,並針對您感興趣的特定執行個體類型要求其他網路效能規格。

解決方案

在您開始基準效能測試之前,請啟動並設定 EC2 Linux 執行個體:

  1. 啟動兩個 Linux 執行個體,您可以從該執行個體執行網路效能測試。
  2. 驗證執行個體是否會支援 Linux 的增強型網路,並且驗證該執行個體是否位於相同的 Amazon VPC。
  3. (選用項目) 如果您要在不支援巨型訊框的執行個體之間執行網路測試,請遵循 EC2 執行個體的網路最大傳輸單位 (MTU) 中的步驟,以檢查並設定執行個體上的 MTU。
  4. 連線至執行個體以驗證您是否可以存取執行個體。

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

在某些發行套件 (例如 Amazon Linux) 中,iperf 屬於 Extra Packages for Enterprise Linux (EPEL) 儲存庫。若要開啟 EPEL 儲存庫,請參閱如何為執行 CentOS、RHEL 或 Amazon Linux 的 Amazon EC2 執行個體開啟 EPEL 儲存庫?

**注意事項:**iperf 命令是指 2.x 版。iperf3 命令是指 3.x 版。您對高輸送量的 EC2 執行個體進行基準效能測試時,請使用 2.x 版,因為 2.x 版會提供多執行緒支援。雖然 3.x 版也會支援使用 -P 旗標的並行串流,但 3.x 版為單一執行緒且受到單一 CPU 的限制。因此,3.x 版需要多個並行執行的程序,才能在較大的 EC2 執行個體上提高必要的輸送量。如需詳細資訊,請參閱 ESnet 網站上的 iperf2/iperf3

連接至您的 Linux 執行個體,然後執行下列命令以安裝 iperf。

若要在 RHEL 6 Linux 主機上安裝 iperf,請執行下列命令:

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

Amazon Linux 2023

因為 Amazon Linux 2023 (AL2023) 不支援 EPEL,所以您無法透過 EPEL 儲存庫下載 iperf 公用程式。如需詳細資訊,請參閱 Extra Packages for Enterprise Linux (EPEL)

但是,您可以手動下載並安裝 AL2023 的 iperf:

  1. 安裝開發工具和 git:

    sudo yum groupinstall "Development Tools"sudo yum install git
  2. 複製 iperf 代碼:

    cd /usr/local/sudo git clone https://git.code.sf.net/p/iperf2/code iperf2-code
  3. 建置並安裝套件:

    cd /usr/local/iperf2-codesudo ./configure
    sudo make
    sudo make install

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

依預設,iperf 會在測試 TCP 效能時透過連接埠 5001 進行通訊。不過,您可以使用 -p 交換器來設定該連接埠。請確認設定安全群組,以允許透過 iperf 使用的連接埠進行通訊。

  1. 將某個執行個體設定為要在預設連接埠上接聽的伺服器,或使用 -p 交換器指定替代接聽程式連接埠。如果不同,請將 5001 取代為您的連接埠:

    $ sudo iperf -s \[-p 5001\]
  2. 將第二個執行個體設定為用戶端,並使用所需參數針對伺服器執行測試。例如,下列命令會針對具有 40 個並行連線的指定伺服器執行個體起始 TCP 測試:

    $ iperf -c 172.31.30.41 --parallel 40 -i 1 -t 2

    **注意事項:**如需使用 iperf (第 2 版) 進行雙向測試時,請使用用戶端的 -r 選項。

輸出會使用這些參數以顯示每個用戶端串流的間隔、每個用戶端串流傳輸的資料,以及每個用戶端串流使用的頻寬。下列 iperf 輸出會顯示叢集放置群組中啟動的兩個 c5n.18xlarge EC2 Linux 執行個體的測試結果。在所有連線間傳輸的總頻寬為 97.6 Gbit/秒:

------------------------------------------------------------------------------------
Client connecting to 172.31.30.41, TCP port 5001
TCP window size:  975 KByte (default)
------------------------------------------------------------------------------------
[  8] local 172.31.20.27 port 49498 connected with 172.31.30.41 port 5001
[ 38] local 172.31.20.27 port 49560 connected with 172.31.30.41 port 5001
[ 33] local 172.31.20.27 port 49548 connected with 172.31.30.41 port 5001
[ 40] local 172.31.20.27 port 49558 connected with 172.31.30.41 port 5001
[ 36] local 172.31.20.27 port 49554 connected with 172.31.30.41 port 5001
[ 39] local 172.31.20.27 port 49562 connected with 172.31.30.41 port 5001
...
[SUM]  0.0- 2.0 sec  22.8 GBytes  97.6 Gbits/sec

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

依預設,iperf 在測試 UDP 效能時會透過連接埠 5001 進行通訊。不過,您可以使用 -p 交換器來設定該連接埠。請確認設定安全群組,以允許透過 iperf 使用的連接埠進行通訊。

**注意事項:**除非您指定不同的頻寬,否則 UDP 的預設值為每秒 1 Mbit。

  1. 將某個執行個體設定為要在預設 UDP 連接埠上接聽的伺服器,或使用 -p 交換器指定替代接聽程式連接埠。如果不同,請將 5001 取代為您的連接埠:

    $ sudo iperf -s -u \[-p 5001\]
  2. 將第二個執行個體設定為用戶端,然後使用所需參數針對伺服器執行測試。下列範例會針對指定的伺服器執行個體啟動 UDP 測試,並將 -b 參數設為 5g-b 參數會將頻寬從 UDP 預設值每秒 1 Mbit 變更為 5g。5g 是 c5n18xlarge 執行個體可為 VPC 內單一流量提供的最大網路效能
    **注意事項:**UDP 為無連線模式,而且沒有 TCP 擁有的壅塞控制演算法。使用 iperf 進行測試時,使用 UDP 獲得的頻寬可能會低於使用 TCIP 獲得的頻寬。

    \# iperf -c 172.31.1.152 -u -b 5g

以下是 UDP 測試的範例輸出:

$ iperf -c 172.31.30.41 -u -b 5g
------------------------------------------------------------------------------------
Client connecting to 172.31.30.41, UDP port 5001
Sending 1470 byte datagrams, IPG target: 2.35 us (kalman adjust)
UDP buffer size:  208 KByte (default)
------------------------------------------------------------------------------------
[  3] local 172.31.20.27 port 39022 connected with 172.31.30.41 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3] 0.0-10.0 sec  5.82 GBytes  5.00 Gbits/sec
[  3] Sent 4251700 datagrams
[  3] Server Report:
[  3] 0.0-10.0 sec  5.82 GBytes  5.00 Gbits/sec   0.003 ms 1911/4251700 (0.045%)
[  3] 0.00-10.00 sec  1 datagrams received out-of-order

此輸出會顯示下列值:

  • 間隔 (時間)
  • 傳輸的資料量
  • 達到的頻寬
  • 誤差 (資料封包定期抵達的時間偏差)
  • UDP 資料封包的損失和總數

相關資訊

ESnet 網站使用 iperf3 進行磁碟測試

在 ESnet 網站上進行網路調整

在 ESnet 網站上比較輸送量工具

在 SourceForge 網站上的 iperf2

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