本文介紹了如何測試 ECS 執行個體的網路效能,包括以下操作步驟:
- 準備環境,包括:
1.1. 準備測試機
1.2. 準備陪練機
1.3. 安裝 Netperf
1.4. 安裝 iperf3
1.5. 開啟多隊列功能 - 使用 netperf 工具測試網路效能,包括:
2.1. 介紹工具相關參數
2.2. 測試收方向
2.3. 測試發方向
2.4. 分析測試結果 - 使用 iperf3 工具測試網路效能,包括:
3.1 介紹工具相關參數
3.2 測試收方向
3.3 測試發方向
3.4 分析測試結果
1. 準備環境
您需要準備:
- 測試機:被壓力測試網路 PPS 的 ECS 執行個體,可作為 Netperf 或 iperf3 測試中的 client 端或 server 端。
- 陪練機:ECS 執行個體,作為 Netperf 測試或 iperf3 測試中的 client 端或 server 端,與測試機之間建立控制連接,傳遞測試組態相關的資訊,以及測試結果。
所有 ECS 執行個體必須在同一個安全性群組內。
1.1. 準備 1 台測試機
- 鏡像:centos_7_2_64_40G_base_20170222.vhd
- 規格:ecs.se1.14xlarge
- 數量:1
- 虛擬機器名稱:i-test-vm(假設)
假設測試機 IP 位址為:172.0.0.1。
1.2. 準備 8 台陪練機
- 鏡像:centos_7_2_64_40G_base_20170222.vhd
- 規格:ecs.se1.14xlarge
- 數量:8
- 虛擬機器名稱:i-partnerVm-{1-8}
假設 8 台陪練機的 IP 位址為:172.0.0.2 − 172.0.0.9。
1.3. 安裝 Netperf
按以下步驟在測試機和陪練機上安裝 Netperf。
運行以下命令下載 Netperf。
wget -c "https://codeload.github.com/HewlettPackard/netperf/tar.gz/netperf-2.5.0" -O netperf-2.5.0.tar.gz
運行以下命令安裝 Netperf。
tar -zxvf netperf-2.5.0.tar.gz
cd netperf-netperf-2.5.0
./configure && make && make install && cd ..
運行
netperf -h
和netserver -h
驗證安裝是否成功。
1.4. 安裝 iperf3
按以下步驟在測試機和陪練機上安裝 iperf3 工具。
運行以下命令下載 iperf3。
yum install git -y
git clone https://github.com/esnet/iperf
運行以下命令安裝 iperf3。
cd iperf
./configure && make && make install && cd ..
cd src
ADD_PATH="$(pwd)"
PATH="${ADD_PATH}:${PATH}"
export PATH
運行
iperf3 -h
,驗證安裝是否成功。
1.5. 開啟多隊列功能
在測試機內部執行以下命令(假設需要開啟的網卡是 eth0)開啟多隊列功能。
ethtool -L eth0 combined 4
echo "ff" > /sys/class/net/eth0/queues/rx-0/rps_cpus
echo "ff" > /sys/class/net/eth0/queues/rx-1/rps_cpus
echo "ff" > /sys/class/net/eth0/queues/rx-2/rps_cpus
echo "ff" > /sys/class/net/eth0/queues/rx-3/rps_cpus
2. 使用 Netperf 工具測試網路效能
2.1. 介紹工具相關參數
Netperf 安裝完成後,會生成 2 個工具:netserver 和 netperf。以下為 2 個工具的主要參數。
工具名稱 | 工具說明 | 主要參數 | 參數說明 |
---|---|---|---|
netserver | 接收端工具(server 端) | -p | 連接埠號碼 |
netperf | 發送端工具(client 端) | -H | 指定 ECS 執行個體的 IP 位址。 |
-p | 指定 ECS 執行個體的通信埠。 | ||
-l | 指定已耗用時間。 | ||
-t | 指定發包協議類型:TCP_STREAM 或 UDP_STREAM。建議使用 UDP_STREAM。 | ||
-m | 指定資料包大小。
|
2.2. 測試收方向
在測試機內啟動 netserver 進程,
-p
指定不同通信埠:netserver -p 11256
netserver -p 11257
netserver -p 11258
netserver -p 11259
netserver -p 11260
netserver -p 11261
netserver -p 11262
netserver -p 11263
在陪練機內啟動 netperf 進程,分別指定到測試機的不同 netserver 通信埠。
netperf -H 172.0.0.1 -p 11256 -t UDP_STREAM -l 300 -- -m 1 #第一台
netperf -H 172.0.0.1 -p 11257 -t UDP_STREAM -l 300 -- -m 1 #第二台
netperf -H 172.0.0.1 -p 11258 -t UDP_STREAM -l 300 -- -m 1 #第三台
netperf -H 172.0.0.1 -p 11259 -t UDP_STREAM -l 300 -- -m 1 #第四台
netperf -H 172.0.0.1 -p 11260 -t UDP_STREAM -l 300 -- -m 1 #第五台
netperf -H 172.0.0.1 -p 11261 -t UDP_STREAM -l 300 -- -m 1 #第六台
netperf -H 172.0.0.1 -p 11262 -t UDP_STREAM -l 300 -- -m 1 #第七台
netperf -H 172.0.0.1 -p 11263 -t UDP_STREAM -l 300 -- -m 1 #第八台
如果需要測試 bps,上述命令應該為:
netperf -H 172.0.0.1 -p 11256 -t UDP_STREAM -l 300 -- -m 1400 #第一台
netperf -H 172.0.0.1 -p 11257 -t UDP_STREAM -l 300 -- -m 1400 #第二台
netperf -H 172.0.0.1 -p 11258 -t UDP_STREAM -l 300 -- -m 1400 #第三台
netperf -H 172.0.0.1 -p 11259 -t UDP_STREAM -l 300 -- -m 1400 #第四台
netperf -H 172.0.0.1 -p 11260 -t UDP_STREAM -l 300 -- -m 1400 #第五台
netperf -H 172.0.0.1 -p 11261 -t UDP_STREAM -l 300 -- -m 1400 #第六台
netperf -H 172.0.0.1 -p 11262 -t UDP_STREAM -l 300 -- -m 1400 #第七台
netperf -H 172.0.0.1 -p 11263 -t UDP_STREAM -l 300 -- -m 1400 #第八台
2.3. 測試發方向
在所有陪練機內啟動 1 個 netserver 進程,
-p
指定通信埠。netserver -p 11256
在測試機內啟動 8 個 netperf 進程,
-H
指定為不同 IP 位址。netperf -H 172.0.0.2 -p 11256 -t UDP_STREAM -l 300 -- -m 1 #第一台
netperf -H 172.0.0.3 -p 11256 -t UDP_STREAM -l 300 -- -m 1 #第二台
netperf -H 172.0.0.4 -p 11256 -t UDP_STREAM -l 300 -- -m 1 #第三台
netperf -H 172.0.0.5 -p 11256 -t UDP_STREAM -l 300 -- -m 1 #第四台
netperf -H 172.0.0.6 -p 11256 -t UDP_STREAM -l 300 -- -m 1 #第五台
netperf -H 172.0.0.7 -p 11256 -t UDP_STREAM -l 300 -- -m 1 #第六台
netperf -H 172.0.0.8 -p 11256 -t UDP_STREAM -l 300 -- -m 1 #第七台
netperf -H 172.0.0.9 -p 11256 -t UDP_STREAM -l 300 -- -m 1 #第八台
如果需要測試 bps,上述命令應該為:
netperf -H 172.0.0.2 -p 11256 -t UDP_STREAM -l 300 -- -m 1400 #第一台
netperf -H 172.0.0.3 -p 11256 -t UDP_STREAM -l 300 -- -m 1400 #第二台
netperf -H 172.0.0.4 -p 11256 -t UDP_STREAM -l 300 -- -m 1400 #第三台
netperf -H 172.0.0.5 -p 11256 -t UDP_STREAM -l 300 -- -m 1400 #第四台
netperf -H 172.0.0.6 -p 11256 -t UDP_STREAM -l 300 -- -m 1400 #第五台
netperf -H 172.0.0.7 -p 11256 -t UDP_STREAM -l 300 -- -m 1400 #第六台
netperf -H 172.0.0.8 -p 11256 -t UDP_STREAM -l 300 -- -m 1400 #第七台
netperf -H 172.0.0.9 -p 11256 -t UDP_STREAM -l 300 -- -m 1400 #第八台
2.4. 分析測試結果
最終發送端每個 netperf 進程會輸出如下結果,第一條資料行為發包資訊概覽如下。
Socket Message Elapsed Messages
Size Size Time Okay Errors Throughput
bytes bytes secs # # 10^6bits/sec
124928 1 10.00 4532554 0 3.63
212992 10.00 1099999 0.88
輸出結果中各欄位含義解釋如下表所示。
欄位資料 | 含義 |
---|---|
124928 | 緩衝區大小 |
1 | 資料包大小(Byte) |
10.00 | 測試時間(s) |
4532554 | 資料包成功數 |
0 | 失敗數 |
3.63 | 網路輸送量(Mbit/s) |
PPS = 資料包成功數/測試時間
通常我們建議在 server 端運行
sar
來統計實際收到的包並作為實際結果,具體命令為:sar -n DEV 1 320
。
3. 使用 iperf3 工具測試網路效能
3.1. 介紹工具相關參數
iperf3 安裝完成後,在對應的 src 的。以下為工具的主要參數。
工具名稱 | 工具說明 | 主要參數 | 參數說明 |
iperf3 | 收發一體 | -s | 表示作為 server 端接收包。 |
-i | 間隔多久輸出資訊流量資訊,預設單位為秒。 | ||
-p | 指定服務的監聽通信埠。 | ||
-u | 表示採用 UDP 協議發送報文,不帶該參數表示採用 TCP 協議 | ||
-l | 表示包大小,預設單位為 Byte。通常測試 PPS 的時候該值為 16,測試 bps 時該值為 1400。 | ||
-b | 設定流量頻寬,可選單位包括:k/m/g。 | ||
-t | 流量的期間,預設單位為秒。 | ||
-A | CPU 親和性,可以將具體的 iperf3 進程綁定對應編號的邏輯 CPU,避免 iperf 進程在不同的 CPU 間調度。 |
3.2. 測試收方向
在測試機中以 server 模式啟動 iperf3 進程,
-p
指定不同通信埠:iperf3 -s -i 1 -p 16001
iperf3 -s -i 1 -p 16002
iperf3 -s -i 1 -p 16003
iperf3 -s -i 1 -p 16004
iperf3 -s -i 1 -p 16005
iperf3 -s -i 1 -p 16006
iperf3 -s -i 1 -p 16007
iperf3 -s -i 1 -p 16008
在陪練機中以 client 模式啟動 iperf3 進程,分別指定到測試機的不同通信埠。
iperf3 -u -l 16 -b 100m -t 120 -c 172.0.0.1 -i 1 -p 16001 -A 1
iperf3 -u -l 16 -b 100m -t 120 -c 172.0.0.1 -i 1 -p 16002 -A 2
iperf3 -u -l 16 -b 100m -t 120 -c 172.0.0.1 -i 1 -p 16003 -A 3
iperf3 -u -l 16 -b 100m -t 120 -c 172.0.0.1 -i 1 -p 16004 -A 4
iperf3 -u -l 16 -b 100m -t 120 -c 172.0.0.1 -i 1 -p 16005 -A 5
iperf3 -u -l 16 -b 100m -t 120 -c 172.0.0.1 -i 1 -p 16006 -A 6
iperf3 -u -l 16 -b 100m -t 120 -c 172.0.0.1 -i 1 -p 16007 -A 7
iperf3 -u -l 16 -b 100m -t 120 -c 172.0.0.1 -i 1 -p 16008 -A 8
3.3. 測試發方向
在每個陪練機中以 server 模式啟動 1 個 iperf3 進程,
-p
指定通信埠。iperf3 -s -i 1 -p 16001
在測試機中以 client 模式啟動 8 個 iperf3 進程,
-c
指定為各個陪練機的 IP 位址。iperf3 -u -l 16 -b 100m -t 120 -c 172.0.0.2 -i 1 -p 16001 -A 1
iperf3 -u -l 16 -b 100m -t 120 -c 172.0.0.3 -i 1 -p 16001 -A 2
iperf3 -u -l 16 -b 100m -t 120 -c 172.0.0.4 -i 1 -p 16001 -A 3
iperf3 -u -l 16 -b 100m -t 120 -c 172.0.0.5 -i 1 -p 16001 -A 4
iperf3 -u -l 16 -b 100m -t 120 -c 172.0.0.6 -i 1 -p 16001 -A 5
iperf3 -u -l 16 -b 100m -t 120 -c 172.0.0.7 -i 1 -p 16001 -A 6
iperf3 -u -l 16 -b 100m -t 120 -c 172.0.0.8 -i 1 -p 16001 -A 7
iperf3 -u -l 16 -b 100m -t 120 -c 172.0.0.9 -i 1 -p 16001 -A 8
3.4. 分析測試結果
最終發送端每個 iperf3 進程會輸出如下結果,第一條資料行為發包資訊概覽如下。
[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams
[ 4] 0.00-10.00 sec 237 MBytes 199 Mbits/sec 0.027 ms 500/30352 (1.6%)
[ 4] Sent 30352 datagrams
輸出結果中各欄位含義解釋如下表所示。
欄位資料 | 含義 |
---|---|
237 | 傳送的總資料量 |
199 | 頻寬大小 |
0.027 | 波動率 |
500/30352 | 丟包/總報文數 |
1.6% | 丟包率 |
PPS = 對端收到的包/時間
通常我們建議在 server 端運行 sar 來統計實際收到的包並作為實際結果,具體命令為:
sar -n DEV 1 320
。