網路PPS(每秒傳輸資料包數)、網路頻寬(資料轉送速度)和網路時延(資料從發送端發出到接收端接收到所需的時間)是衡量雲端服務器網路效能的重要指標,測試網路效能可以協助您評估網路的穩定性、延遲和輸送量,從而為您提供更好的使用者體驗和應用程式效能。本文為您介紹如何使用Netperf、sockperf等工具測試ECS執行個體的網路PPS、網路頻寬和網路時延,您可以根據測試結果評估ECS執行個體的網路效能。
-
強烈建議您在新購買的無資料的ECS執行個體上使用工具測試網路效能,避免造成資料丟失。
-
執行個體規格指標均在測試資料環境下驗證獲得。在真實情境中,受執行個體負載、組網模型等其他因素的影響,執行個體的效能表現可能存在差異,請您以實際情況為準。
準備測試環境
環境要求
-
準備測試網路PPS、頻寬和時延等不同測試情境的ECS執行個體。建立執行個體的操作,請參見自訂購買執行個體。
重要在測試網路效能時,強烈建議您使用相同規格的執行個體來確保測試結果的準確性和可比性,避免不同執行個體規格的vCPU核心數、記憶體大小、網路頻寬等其他因素對測試結果產生影響。
-
在同一測試情境下,所有ECS執行個體必須屬於同一個VPC、同一台交換器和同一個安全性群組。
環境樣本
本文測試網路效能使用的測試機(ECS執行個體)和輔助測試機(ECS執行個體)的執行個體規格及數量如下所示。在實際測試過程中,請您根據實際環境選擇兩台機器進行測試。
-
測試ECS執行個體的網路PPS(僅適用於Linux)
說明由於目前Windows沒有較好的網路PPS測試載入器,所以暫不提供Windows的網路PPS測試方法。
網路PPS小於600萬
測試樣本
測試機
輔助測試機
執行個體規格
ecs.g7.large
ecs.g7.large
鏡像
Alibaba Cloud Linux 3
Alibaba Cloud Linux 3
執行個體數量
1台
1台
網路
分配公網IP地址
網路PPS大於600萬小於2000萬
測試樣本
測試機
輔助測試機
執行個體規格
ecs.g7.16xlarge
ecs.g7.16xlarge
鏡像
Alibaba Cloud Linux 3
Alibaba Cloud Linux 3
執行個體數量
1台
3台
網路
分配公網IP地址
網路PPS大於2000萬
測試樣本
測試機
輔助測試機
執行個體規格
ecs.g7.32xlarge
ecs.g7.32xlarge
鏡像
Alibaba Cloud Linux 3
Alibaba Cloud Linux 3
執行個體數量
1台
3台
網路
分配公網IP地址
-
測試ECS執行個體的網路頻寬和網路時延
Linux執行個體
測試樣本
測試機
輔助測試機
執行個體規格
ecs.g7.large
ecs.g7.large
鏡像
Alibaba Cloud Linux 3
Alibaba Cloud Linux 3
執行個體數量
1台
1台
網路
分配公網IP地址
Windows執行個體
測試樣本
測試機
輔助測試機
執行個體規格
ecs.g7.large
ecs.g7.large
鏡像
Windows Server 2022
Windows Server 2022
執行個體數量
1台
1台
網路
分配公網IP地址
測試網路效能
測試網路PPS(僅適用於Linux)
由於目前Windows沒有較好的PPS測試載入器,所以暫不提供Windows的網路PPS測試方法。
網路PPS小於600萬
-
分別遠端連線測試機和輔助測試機。
具體操作,請參見使用Workbench登入Linux執行個體。
-
分別在測試機和輔助測試機上執行以下命令,下載Netperf。
wget https://benchmark-packages.oss-cn-qingdao.aliyuncs.com/netperf-2.7.0.tar.gz -
分別在測試機和輔助測試機上執行以下命令,安裝Netperf和sar監控工具。
-
執行以下命令,解壓Netperf包。
sudo yum install -y gcc autoconf automake libtool sysstat tar -zxvf netperf-2.7.0.tar.gz -
執行以下命令,查詢
gcc版本號碼。gcc -v 2>&1 -
若測試機和輔助測試機安裝的
gcc版本高於10版本,則您需要繼續執行下述操作,以確保gcc可以正常編譯。否則,請忽略此步驟。-
執行以下命令,修改
nettest_omni.c檔案。cd netperf vim src/nettest_omni.c -
按i鍵進入編輯模式,手動刪除
nettest_omni.c檔案中的聲明變數內容。聲明變數內容如下所示:
/* different options for the sockets */ int loc_nodelay, /* don't/do use NODELAY locally */ rem_nodelay, /* don't/do use NODELAY remotely */ loc_sndavoid, /* avoid send copies locally */ loc_rcvavoid, /* avoid recv copies locally */ rem_sndavoid, /* avoid send copies remotely */ rem_rcvavoid; /* avoid recv_copies remotely */ -
修改完成後按Esc鍵,輸入
:wq後按下斷行符號鍵,儲存並退出。
-
-
執行以下命令,安裝Netperf和sar監控工具。
cd netperf sudo ./configure sudo make && sudo make install
-
-
在測試機上執行以下命令,啟動64個netserver服務。
#!/bin/bash for j in `seq 64`; do netserver -p $[16000+j] > server_$[16000+j].netperf > /dev/null 2>&1 & done -
在測試機上執行以下命令,查詢測試機的私網IP地址。
ifconfig || ip addr
-
在輔助測試機上執行以下命令,向測試機輸入資料流量。
#!/bin/bash server_ip=<測試機私網IP地址> for j in `seq 64`; do port=$[16000+j] netperf -H ${server_ip} -l ${run_time:-300} -t UDP_STREAM -p $port -- -m 1 -D > /dev/null 2>&1 & done<測試機私網IP地址>需替換為上一步查詢的實際測試機的私網IP地址,樣本如下圖所示。
-
在測試機上執行以下命令,測試網路PPS。
sar -n DEV 1在測試結果中查看
rxpck/s列的資料值,rxpck/s表示該測試機每秒鐘接收的資料包總數。如下圖所示,樣本中測試機每秒鐘接收到的資料包平均數約為94萬。
網路PPS大於600萬小於2000萬
-
分別遠端連線測試機和輔助測試機。
具體操作,請參見使用Workbench登入Linux執行個體。
-
分別在3台輔助測試機和1台測試機上執行以下命令,安裝sockperf。
sudo yum install -y autoconf automake libtool gcc-c++ cd /opt sudo wget https://github.com/Mellanox/sockperf/archive/refs/tags/3.8.tar.gz sudo tar -zxf 3.8.tar.gz cd sockperf-3.8/ sudo ./autogen.sh sudo ./configure sudo make -j `cat /proc/cpuinfo| grep process | wc -l` sudo make install -
在測試機上執行以下命令,查詢測試機的私網IP地址。
ifconfig || ip addr
-
分別在3台輔助測試機上執行以下命令,向測試機輸入資料流量。
server_ip="<測試機私網IP地址>" threads=64 msg_size=14 run_time=60 basePort=6666 for((i=0;i<$threads;++i));do nohup sockperf tp -i $server_ip --pps max -m ${msg_size} -t ${run_time} --port $[${basePort}+${i}] 2>&1 & done其中
<測試機私網IP地址>是實際測試機的私網IP地址,run_time是輸入資料流量的時間,請您根據實際情況修改。 -
分別在3台輔助測試機和1台測試機上執行以下命令,測試網路流量。
sar -n DEV 1在測試機上查看
rxpck/s列的資料值,rxpck/s表示該測試機每秒鐘接收到的資料包。如下圖所示,樣本中測試機每秒鐘接收到的資料包數約為1200萬。
網路PPS大於2000萬
-
分別遠端連線測試機和輔助測試機。
具體操作,請參見使用Workbench登入Linux執行個體。
-
分別在3台輔助測試機和1台測試機上執行以下命令,安裝sockperf。
sudo yum install -y autoconf automake libtool gcc-c++ cd /opt sudo wget https://github.com/Mellanox/sockperf/archive/refs/tags/3.8.tar.gz sudo tar -zxf 3.8.tar.gz cd sockperf-3.8/ sudo ./autogen.sh sudo ./configure sudo make -j `cat /proc/cpuinfo| grep process | wc -l` sudo make install -
在測試機上執行以下命令,綁定中斷。
在高PPS情境下,通過將中斷綁定到特定的CPU核心,可以確保處理中斷的CPU核心相對固定,減少環境切換,提高處理效率。
a=$(cat /proc/interrupts | grep virtio2-input | awk -F ':' '{print $1}') cpu=0 for irq in $a; do echo $cpu >/proc/irq/$irq/smp_affinity_list let cpu+=2 done -
在測試機上執行以下命令,查詢測試機的私網IP地址。
ifconfig || ip addr
-
分別在3台輔助測試機上執行以下命令,向測試機輸入資料流量。
server_ip="<測試機私網IP地址>" threads=64 msg_size=14 run_time=60 basePort=6666 for((i=0;i<$threads;++i));do nohup sockperf tp -i $server_ip --pps max -m ${msg_size} -t ${run_time} --port $[${basePort}+${i}] 2>&1 & done其中
<測試機私網IP地址>是實際測試機的私網IP地址,run_time是輸入資料流量的時間,請您根據實際情況修改。 -
分別在3台輔助測試機和1台測試機上執行以下命令,測試網路流量。
sar -n DEV 1在測試機上查看
rxpck/s列的資料值,rxpck/s表示該測試機每秒鐘接收到的資料包。如下圖所示,樣本中測試機每秒鐘接收到的資料包數約為2000萬。
測試網路頻寬
Linux執行個體
-
分別遠端連線測試機和輔助測試機。
具體操作,請參見使用Workbench登入Linux執行個體。
-
分別在測試機和輔助測試機上執行以下命令,下載Netperf。
wget https://benchmark-packages.oss-cn-qingdao.aliyuncs.com/netperf-2.7.0.tar.gz -
分別在測試機和輔助測試機上執行以下命令,安裝Netperf和sar監控工具。
-
執行以下命令,解壓Netperf包。
sudo yum install -y gcc autoconf automake libtool sysstat tar -zxvf netperf-2.7.0.tar.gz -
執行以下命令,查詢
gcc版本號碼。gcc -v 2>&1 -
若測試機和輔助測試機安裝的
gcc版本高於10版本,則您需要繼續執行下述操作,以確保gcc可以正常編譯。否則,請忽略此步驟。-
執行以下命令,修改
nettest_omni.c檔案。cd netperf vim src/nettest_omni.c -
按i鍵進入編輯模式,手動刪除
nettest_omni.c檔案中的聲明變數內容。聲明變數內容如下所示:
/* different options for the sockets */ int loc_nodelay, /* don't/do use NODELAY locally */ rem_nodelay, /* don't/do use NODELAY remotely */ loc_sndavoid, /* avoid send copies locally */ loc_rcvavoid, /* avoid recv copies locally */ rem_sndavoid, /* avoid send copies remotely */ rem_rcvavoid; /* avoid recv_copies remotely */ -
修改完成後按Esc鍵,輸入
:wq後按下斷行符號鍵,儲存並退出。
-
-
執行以下命令,安裝Netperf和sar監控工具。
cd netperf sudo ./configure sudo make && sudo make install
-
-
在測試機上執行以下命令,啟動64個netserver服務。
#!/bin/bash for j in `seq 64`; do netserver -p $[16000+j] > server_$[16000+j].netperf 2>&1 & done -
在測試機上執行以下命令,查詢測試機的私網IP地址。
ifconfig || ip addr
-
在輔助測試機上執行以下命令,向測試機輸入資料流量。
#!/bin/bash server_ip=<測試機私網IP地址> for j in `seq 64`; do port=$[16000+j] netperf -H ${server_ip} -l ${run_time:-300} -t TCP_STREAM -p $port -- -D > /dev/null 2>&1 & done<測試機私網IP地址>需替換為上一步查詢的實際測試機的私網IP地址,樣本如下圖所示。
-
在測試機上執行以下命令,測試網路頻寬。
sar -n DEV 1在測試結果中查看rxkB/s列的資料值,rxkB/s表示該測試機每秒鐘接收的資料包的大小,單位為KB/s(KB/每秒)。1位元組等於8位元,若要計算對應的頻寬值,則可將rxkB/s列對應的數值乘以8,從而將其轉換為Kbps(千位元/每秒)。
樣本如下圖所示。

Windows執行個體
-
分別遠端連線測試機和輔助測試機。
具體操作,請參見使用Workbench登入Windows執行個體。
-
分別在測試機和輔助測試機中安裝測試載入器並關閉防火牆。
-
下載ntttcp.exe工具,並擷取存放路徑。
-
開啟運行對話方塊,輸入powershell進入PowerShell命令列。
-
運行以下命令,關閉防火牆,避免防火牆可能阻止兩台機器的串連。
Set-NetFirewallProfile -Profile * -Enabled:false或者增加入方向規則以允許ntttcp.exe資料包通過防火牆。
$ntttcpPath = "<ntttcp.exe實際路徑>" New-NetFirewallRule -DisplayName ntttcp -Protocol Any -Direction Inbound -Action Allow -Enabled True -Profile Any -Program $ntttcpPath說明您需要根據實際環境替換測試機的
<ntttcp.exe實際路徑>。
-
-
在測試機中運行以下命令,設定網卡RSS功能。
RSS(Receive Side Scaling)網路技術旨在通過將資料包分布到多個CPU核心上的接收隊列來提高網路效能和效率,從而實現網路處理的並行化。以下命令表示:
-
如果測試機的CPU數量不超過16,將RSS接收隊列的數量設定為與CPU數量相等,這樣可以確保每個CPU核心都有獨立的接收隊列來處理網路流量。
-
如果測試機的CPU數量超過16,關閉RSS功能。因為很多網卡限制了RSS隊列的最大數量為16,如果繼續使用RSS可能導致資源分派不均或管理複雜性增加。
$cpuNum = (Get-CimInstance -ClassName Win32_Processor).NumberOfLogicalProcessors if ($cpuNum -le 16) { Set-NetAdapterRss -Name <測試機網路介面卡的名稱> -NumberOfReceiveQueues $cpuNum } else { Disable-NetAdapterRss -Name <測試機網路介面卡的名稱> }說明-
您需要根據環境替換
<測試機網路介面卡的名稱>(可通過Get-NetAdapter | Select-Object Name命令擷取)。 -
修改網卡的RSS配置通常需要重啟網卡服務,可能會導致當前通過該網卡的網路連接暫時中斷,請您在串連恢複後再進行後續操作。
-
-
在測試機中執行以下命令,準備接收資料。
$serverIp = (Get-NetIPConfiguration -InterfaceAlias <測試機網路介面卡的名稱>).IPv4Address.IPAddress $cpuNum = (Get-CimInstance -ClassName Win32_Processor).NumberOfLogicalProcessors $threadNum = $cpuNum & <測試機ntttcp.exe實際路徑> -r -m $threadNum,0,$serverIp -t 300說明您需要根據環境替換
<測試機網路介面卡的名稱>和<測試機ntttcp.exe實際路徑>。 -
在輔助測試機中執行以下命令,發送資料。
$serverIp = "<測試機私網IP地址>" $threadNum = "<測試機threadNum>" <輔助測試機ntttcp.exe實際路徑> -s -m $threadNum,*,$serverIp -t 100說明您需要根據環境替換
<測試機私網IP地址>(可通過ipconfig命令擷取)、<測試機threadNum>(可通過$cpuNum命令擷取)和<輔助測試機ntttcp.exe實際路徑>。 -
在測試機中查看測試的網路頻寬。
測試樣本如下圖所示,
Throughput(MB/s)值表示網路頻寬(資料轉送速度)。
測試網路時延
Linux執行個體
-
分別遠端連線測試機和輔助測試機。
具體操作,請參見使用Workbench登入Linux執行個體。
-
分別在測試機和輔助測試機上執行以下命令,安裝
sockperf。sudo yum install -y autoconf automake libtool gcc-c++ cd /opt sudo wget https://github.com/Mellanox/sockperf/archive/refs/tags/3.8.tar.gz sudo tar -zxf 3.8.tar.gz cd sockperf-3.8/ sudo ./autogen.sh sudo ./configure sudo make -j `cat /proc/cpuinfo| grep process | wc -l` sudo make install -
在測試機上執行以下命令,查詢測試機的私網IP地址。
ifconfig || ip addr
-
在測試機上執行以下命令,啟動服務。
sockperf sr --tcp --daemonize -
在輔助測試機上執行以下命令,向測試機輸入資料流量。
sockperf pp -i <測試機私網IP地址> --tcp -t 30 -m 14 --full-log=result.json<測試機私網IP地址>需替換為上一步查詢的實際測試機的私網IP地址。 -
在測試機中查看測試的網路時延。
測試樣本如下圖所示:
-
以
avg-latency開頭的結果資料表示平均時延,單位為us。 -
以
percentile 99.000開頭的結果資料表示99分位時延,單位為μs。

-
Windows執行個體
-
分別遠端連線測試機和輔助測試機。
具體操作,請參見使用Workbench登入Windows執行個體。
-
分別在測試機和輔助測試機中安裝測試載入器並關閉防火牆。
-
下載latte.exe工具,並擷取存放路徑。
-
開啟運行對話方塊,輸入powershell進入PowerShell命令列。
-
運行以下命令,關閉防火牆,避免防火牆可能阻止兩台機器的串連。
Set-NetFirewallProfile -Profile * -Enabled:false或者增加入方向規則以允許latte.exe資料包通過防火牆。
$lattePath = "<latte.exe實際路徑>" New-NetFirewallRule -DisplayName Latte -Protocol Any -Direction Inbound -Action Allow -Enabled True -Profile Any -Program $lattePath說明您需要根據實際環境替換測試機的
<latte.exe實際路徑>。
-
-
在測試機中執行以下命令,準備接收資料。
$serverIp = (Get-NetIPConfiguration | Where-Object {$_.InterfaceAlias -eq '<測試機網路介面卡的名稱>'} | Select-Object -ExpandProperty IPv4Address).IPAddress $port = <通訊連接埠> & "<測試機latte.exe實際路徑>" -a "$serverIp`:$port" -i 65535說明-
您需要根據環境替換
<測試機網路介面卡的名稱>(可通過Get-NetAdapter | Select-Object Name命令擷取)和<測試機latte.exe實際路徑>。 -
<通訊連接埠>由您自訂,但是必須確保測試機和輔助測試機兩端的連接埠號碼一致。
-
-
在輔助測試機中執行以下命令,發送資料。
$serverIp = "<測試機私網IP地址>" $port = <通訊連接埠> & "<輔助測試機latte.exe實際路徑>" -c -a "${serverIp}:$port" -i 65535說明-
您需要根據環境替換
<測試機私網IP地址>(可通過ipconfig命令擷取)、<輔助測試機latte.exe實際路徑>。 -
<通訊連接埠>由您自訂,但是必須確保測試機和輔助測試機兩端的連接埠號碼一致。
-
-
在測試機中查看測試的網路時延。
測試樣本如下圖所示,
Latency(usec)值表示資料轉送的平均時延,單位為 μs。