1. 准備環境
您需要准備:
- 測試機:被壓力測試網絡 PPS 的 ECS 實例,可作為 Netperf 或 iperf3 測試中的 client 端或 server 端。
- 陪練機:ECS 實例,作為 Netperf 測試或 iperf3 測試中的 client 端或 server 端,與測試機之間建立控制連接,傳遞測試配置相關的信息,以及測試結果。
所有 實例必須在同一個安全組內。
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
。