全部產品
Search
文件中心

:網路效能測試方法

更新時間:Aug 23, 2018

本文介紹了如何測試 ECS 執行個體的網路效能,包括以下操作步驟:

  1. 準備環境,包括:
    1.1. 準備測試機
    1.2. 準備陪練機
    1.3. 安裝 Netperf
    1.4. 安裝 iperf3
    1.5. 開啟多隊列功能
  2. 使用 netperf 工具測試網路效能,包括:
    2.1. 介紹工具相關參數
    2.2. 測試收方向
    2.3. 測試發方向
    2.4. 分析測試結果
  3. 使用 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。

  1. 運行以下命令下載 Netperf。

    1. wget -c "https://codeload.github.com/HewlettPackard/netperf/tar.gz/netperf-2.5.0" -O netperf-2.5.0.tar.gz
  2. 運行以下命令安裝 Netperf。

    1. tar -zxvf netperf-2.5.0.tar.gz
    2. cd netperf-netperf-2.5.0
    3. ./configure && make && make install && cd ..
  3. 運行 netperf -hnetserver -h 驗證安裝是否成功。

1.4. 安裝 iperf3

按以下步驟在測試機和陪練機上安裝 iperf3 工具。

  1. 運行以下命令下載 iperf3。

    1. yum install git -y
    2. git clone https://github.com/esnet/iperf
  2. 運行以下命令安裝 iperf3。

    1. cd iperf
    2. ./configure && make && make install && cd ..
    3. cd src
    4. ADD_PATH="$(pwd)"
    5. PATH="${ADD_PATH}:${PATH}"
    6. export PATH
  3. 運行 iperf3 -h,驗證安裝是否成功。

1.5. 開啟多隊列功能

在測試機內部執行以下命令(假設需要開啟的網卡是 eth0)開啟多隊列功能。

  1. ethtool -L eth0 combined 4
  2. echo "ff" > /sys/class/net/eth0/queues/rx-0/rps_cpus
  3. echo "ff" > /sys/class/net/eth0/queues/rx-1/rps_cpus
  4. echo "ff" > /sys/class/net/eth0/queues/rx-2/rps_cpus
  5. 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 指定資料包大小。
  • 測試 PPS 時,該值為 1。
  • 測試 bps(bit per second)時,該值為 1400。

2.2. 測試收方向

  1. 在測試機內啟動 netserver 進程,-p 指定不同通信埠:

    1. netserver -p 11256
    2. netserver -p 11257
    3. netserver -p 11258
    4. netserver -p 11259
    5. netserver -p 11260
    6. netserver -p 11261
    7. netserver -p 11262
    8. netserver -p 11263
  2. 在陪練機內啟動 netperf 進程,分別指定到測試機的不同 netserver 通信埠。

    1. netperf -H 172.0.0.1 -p 11256 -t UDP_STREAM -l 300 -- -m 1 #第一台
    2. netperf -H 172.0.0.1 -p 11257 -t UDP_STREAM -l 300 -- -m 1 #第二台
    3. netperf -H 172.0.0.1 -p 11258 -t UDP_STREAM -l 300 -- -m 1 #第三台
    4. netperf -H 172.0.0.1 -p 11259 -t UDP_STREAM -l 300 -- -m 1 #第四台
    5. netperf -H 172.0.0.1 -p 11260 -t UDP_STREAM -l 300 -- -m 1 #第五台
    6. netperf -H 172.0.0.1 -p 11261 -t UDP_STREAM -l 300 -- -m 1 #第六台
    7. netperf -H 172.0.0.1 -p 11262 -t UDP_STREAM -l 300 -- -m 1 #第七台
    8. netperf -H 172.0.0.1 -p 11263 -t UDP_STREAM -l 300 -- -m 1 #第八台

    如果需要測試 bps,上述命令應該為:

    1. netperf -H 172.0.0.1 -p 11256 -t UDP_STREAM -l 300 -- -m 1400 #第一台
    2. netperf -H 172.0.0.1 -p 11257 -t UDP_STREAM -l 300 -- -m 1400 #第二台
    3. netperf -H 172.0.0.1 -p 11258 -t UDP_STREAM -l 300 -- -m 1400 #第三台
    4. netperf -H 172.0.0.1 -p 11259 -t UDP_STREAM -l 300 -- -m 1400 #第四台
    5. netperf -H 172.0.0.1 -p 11260 -t UDP_STREAM -l 300 -- -m 1400 #第五台
    6. netperf -H 172.0.0.1 -p 11261 -t UDP_STREAM -l 300 -- -m 1400 #第六台
    7. netperf -H 172.0.0.1 -p 11262 -t UDP_STREAM -l 300 -- -m 1400 #第七台
    8. netperf -H 172.0.0.1 -p 11263 -t UDP_STREAM -l 300 -- -m 1400 #第八台

2.3. 測試發方向

  1. 在所有陪練機內啟動 1 個 netserver 進程,-p 指定通信埠。

    1. netserver -p 11256
  2. 在測試機內啟動 8 個 netperf 進程,-H指定為不同 IP 位址。

    1. netperf -H 172.0.0.2 -p 11256 -t UDP_STREAM -l 300 -- -m 1 #第一台
    2. netperf -H 172.0.0.3 -p 11256 -t UDP_STREAM -l 300 -- -m 1 #第二台
    3. netperf -H 172.0.0.4 -p 11256 -t UDP_STREAM -l 300 -- -m 1 #第三台
    4. netperf -H 172.0.0.5 -p 11256 -t UDP_STREAM -l 300 -- -m 1 #第四台
    5. netperf -H 172.0.0.6 -p 11256 -t UDP_STREAM -l 300 -- -m 1 #第五台
    6. netperf -H 172.0.0.7 -p 11256 -t UDP_STREAM -l 300 -- -m 1 #第六台
    7. netperf -H 172.0.0.8 -p 11256 -t UDP_STREAM -l 300 -- -m 1 #第七台
    8. netperf -H 172.0.0.9 -p 11256 -t UDP_STREAM -l 300 -- -m 1 #第八台

    如果需要測試 bps,上述命令應該為:

    1. netperf -H 172.0.0.2 -p 11256 -t UDP_STREAM -l 300 -- -m 1400 #第一台
    2. netperf -H 172.0.0.3 -p 11256 -t UDP_STREAM -l 300 -- -m 1400 #第二台
    3. netperf -H 172.0.0.4 -p 11256 -t UDP_STREAM -l 300 -- -m 1400 #第三台
    4. netperf -H 172.0.0.5 -p 11256 -t UDP_STREAM -l 300 -- -m 1400 #第四台
    5. netperf -H 172.0.0.6 -p 11256 -t UDP_STREAM -l 300 -- -m 1400 #第五台
    6. netperf -H 172.0.0.7 -p 11256 -t UDP_STREAM -l 300 -- -m 1400 #第六台
    7. netperf -H 172.0.0.8 -p 11256 -t UDP_STREAM -l 300 -- -m 1400 #第七台
    8. netperf -H 172.0.0.9 -p 11256 -t UDP_STREAM -l 300 -- -m 1400 #第八台

2.4. 分析測試結果

最終發送端每個 netperf 進程會輸出如下結果,第一條資料行為發包資訊概覽如下。

  1. Socket Message Elapsed Messages
  2. Size Size Time Okay Errors Throughput
  3. bytes bytes secs # # 10^6bits/sec
  4. 124928 1 10.00 4532554 0 3.63
  5. 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. 測試收方向

  1. 在測試機中以 server 模式啟動 iperf3 進程,-p 指定不同通信埠:

    1. iperf3 -s -i 1 -p 16001
    2. iperf3 -s -i 1 -p 16002
    3. iperf3 -s -i 1 -p 16003
    4. iperf3 -s -i 1 -p 16004
    5. iperf3 -s -i 1 -p 16005
    6. iperf3 -s -i 1 -p 16006
    7. iperf3 -s -i 1 -p 16007
    8. iperf3 -s -i 1 -p 16008
  2. 在陪練機中以 client 模式啟動 iperf3 進程,分別指定到測試機的不同通信埠。

    1. iperf3 -u -l 16 -b 100m -t 120 -c 172.0.0.1 -i 1 -p 16001 -A 1
    2. iperf3 -u -l 16 -b 100m -t 120 -c 172.0.0.1 -i 1 -p 16002 -A 2
    3. iperf3 -u -l 16 -b 100m -t 120 -c 172.0.0.1 -i 1 -p 16003 -A 3
    4. iperf3 -u -l 16 -b 100m -t 120 -c 172.0.0.1 -i 1 -p 16004 -A 4
    5. iperf3 -u -l 16 -b 100m -t 120 -c 172.0.0.1 -i 1 -p 16005 -A 5
    6. iperf3 -u -l 16 -b 100m -t 120 -c 172.0.0.1 -i 1 -p 16006 -A 6
    7. iperf3 -u -l 16 -b 100m -t 120 -c 172.0.0.1 -i 1 -p 16007 -A 7
    8. iperf3 -u -l 16 -b 100m -t 120 -c 172.0.0.1 -i 1 -p 16008 -A 8

3.3. 測試發方向

  1. 在每個陪練機中以 server 模式啟動 1 個 iperf3 進程,-p 指定通信埠。

    1. iperf3 -s -i 1 -p 16001
  2. 在測試機中以 client 模式啟動 8 個 iperf3 進程,-c 指定為各個陪練機的 IP 位址。

    1. iperf3 -u -l 16 -b 100m -t 120 -c 172.0.0.2 -i 1 -p 16001 -A 1
    2. iperf3 -u -l 16 -b 100m -t 120 -c 172.0.0.3 -i 1 -p 16001 -A 2
    3. iperf3 -u -l 16 -b 100m -t 120 -c 172.0.0.4 -i 1 -p 16001 -A 3
    4. iperf3 -u -l 16 -b 100m -t 120 -c 172.0.0.5 -i 1 -p 16001 -A 4
    5. iperf3 -u -l 16 -b 100m -t 120 -c 172.0.0.6 -i 1 -p 16001 -A 5
    6. iperf3 -u -l 16 -b 100m -t 120 -c 172.0.0.7 -i 1 -p 16001 -A 6
    7. iperf3 -u -l 16 -b 100m -t 120 -c 172.0.0.8 -i 1 -p 16001 -A 7
    8. iperf3 -u -l 16 -b 100m -t 120 -c 172.0.0.9 -i 1 -p 16001 -A 8

3.4. 分析測試結果

最終發送端每個 iperf3 進程會輸出如下結果,第一條資料行為發包資訊概覽如下。

  1. [ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams
  2. [ 4] 0.00-10.00 sec 237 MBytes 199 Mbits/sec 0.027 ms 500/30352 (1.6%)
  3. [ 4] Sent 30352 datagrams

輸出結果中各欄位含義解釋如下表所示。

欄位資料 含義
237 傳送的總資料量
199 頻寬大小
0.027 波動率
500/30352 丟包/總報文數
1.6% 丟包率

PPS = 對端收到的包/時間

通常我們建議在 server 端運行 sar 來統計實際收到的包並作為實際結果,具體命令為: sar -n DEV 1 320