1. 程式人生 > >Netperf網路效能測試工具詳解教程

Netperf網路效能測試工具詳解教程

本文下載連結:

【學習筆記】Netperf網路效能測試工具.pdf

一、Netperf工具簡介

1、什麼是Netperf ?

(1)Netperf是由惠普公司開發的一種網路效能測量工具,主要針對基於TCP或UDP的傳輸。

(2)Netperf根據應用的不同,可以進行不同模式的網路效能測試,即批量資料傳輸(bulk data transfer)模式和請求/應答(request/reponse)模式。

(3)Netperf測試結果所反映的是一個系統能夠以多快的速度向另外一個系統傳送資料,以及另外一個系統能夠以多塊的速度接收資料。

2、Netperf 工作原理
(1)Netperf 工具的工作方式

① Netperf 工具以client/server方式工作。

② server端是netserver,用來偵聽來自client端的連線。

③ client端是netperf,用來向server發起網路測試。

(2)Netperf 工具的工作原理

在client與server之間,首先建立一個控制連線,用於傳遞有關測試配置的資訊,以及測試的結果。在控制連線建立並傳遞了測試配置資訊以後,client與server之間會再建立一個測試連線,用來來回傳遞著特殊的流量模式,以測試網路的效能。

(3)Netperf 工具的工作流程

① 建立控制連線:

  • ❶ server端netserver啟動監聽,監聽來自client端netperf 的連線請求;

  • ❷ client端向server端傳送控制連線請求,server端發現連線請求,建立控制連線。

  • ❸ 控制連線建立完成,使用BSD socket傳輸資訊,屬於TCP連線。

② 建立測試連線

  • ❶ client端通過控制連線向server端傳遞測試配置資訊。

  • ❷ server端獲取測試配置資訊,建立測試連線。

  • ❸ 測試連線用於傳輸各種模式的流量測試網路的效能。

③ 測試網路效能

  • ❶ client端通過測試連線向server端傳送Bulk模式流量模式的資料。

  • ❷ server端接受Bulk模式流量模式的資料併產生測試結果1。

  • ❸ client端通過測試連線向server端傳送request/response流量模式的資料。

  • ❹ server端接受request/response流量模式的資料併產生測試結果2。

④ 輸出測試結果

  • ❶ server端通過控制連線向client端傳送測試結果。

  • ❷ client端接受到測試結果並顯示或儲存。

3、Netperf 安裝
(1)下載安裝 Netperf
wget -c "https://codeload.github.com/HewlettPackard/netperf/tar.gz/netperf-2.5.0" -O netperf-2.5.0.tar.gz
tar -zxvf netperf-2.5.0.tar.gz
cd netperf-netperf-2.5.0
./configure
make && make install

編譯不過可嘗試執行:./configure --build=mips

(2)確認安裝成功

執行netperf -hnetserver -h命令,確認安裝成功。

注:伺服器及客戶端使用相同的原始碼,測試時關閉防火牆

4、網路效能測量的五項指標

(1)可用性(availability)

測試網路效能的第一步是確定網路是否正常工作,最簡單的方法是使用 ping 命令。通過向遠端的機器傳送 icmp echo request,並等待接收 icmp echo reply 來判斷遠端的機器是否連通,網路是否正常工作。

(2)響應時間(response time)

ping 命令的 echo request/reply 一次往返所花費時間就是響應時間。

(3)網路利用率(network utilization)

網路利用率是指網路被使用的時間佔總時間(即被使用的時間+空閒的時間)的比例。

網路測試工具一般使用網路吞吐量和網路頻寬容量來確定網路中兩個節點之間的效能。

(4)網路吞吐量(network throughput)

網路吞吐量是指在某個時刻,在網路中的兩個節點之間,提供給網路應用的剩餘頻寬。

網路吞吐量非常依賴於當前的網路負載情況,可以幫組尋找網路路徑中的瓶頸。

(5)網路頻寬容量(network bandwidth capacity)

網路頻寬容量指的是在網路的兩個節點之間的最大可用頻寬。這是由組成網路的裝置的能力所決定的。

二、Netperf 使用語法

1、neserver語法格式
引數 說明
-H host 指定遠端執行netserver的server IP地址
2、netperf語法格式

netperf 通過命令列引數來控制測試的型別和具體的測試選項。

netperf 命令列引數分為兩大類:全域性命令列引數、測試相關的區域性引數,兩者之間使用--分隔。

[root@Netperf-test ~]# netperf -h
Usage: netperf [global options] -- [test options] 
Global options:
    -a send,recv      Set the local send,recv buffer alignment
    -A send,recv      Set the remote send,recv buffer alignment
    -B brandstr       Specify a string to be emitted with brief output
    -c [cpu_rate]     Report local CPU usage
    -C [cpu_rate]     Report remote CPU usage
    -d                Increase debugging output
    -D time,[units] * Display interim results at least every time interval
                      using units as the initial guess for units per second
                      A negative value for time will make heavy use of the
                      system's timestamping functionality
    -f G|M|K|g|m|k    Set the output units
    -F lfill[,rfill]* Pre-fill buffers with data from specified file
    -h                Display this text
    -H name|ip,fam *  Specify the target machine and/or local ip and family
    -i max,min        Specify the max and min number of iterations (15,1)
    -I lvl[,intvl]    Specify confidence level (95 or 99) (99) 
                      and confidence interval in percentage (10)
    -j                Keep additional timing statistics
    -l testlen        Specify test duration (>0 secs) (<0 bytes|trans)
    -L name|ip,fam *  Specify the local ip|name and address family
    -o send,recv      Set the local send,recv buffer offsets
    -O send,recv      Set the remote send,recv buffer offset
    -n numcpu         Set the number of processors for CPU util
    -N                Establish no control connection, do 'send' side only
    -p port,lport*    Specify netserver port number and/or local port
    -P 0|1            Don't/Do display test headers
    -r                Allow confidence to be hit on result only
    -s seconds        Wait seconds between test setup and test start
    -S                Set SO_KEEPALIVE on the data connection
    -t testname       Specify test to perform
    -T lcpu,rcpu      Request netperf/netserver be bound to local/remote cpu
    -v verbosity      Specify the verbosity level
    -W send,recv      Set the number of send,recv buffers
    -v level          Set the verbosity level (default 1, min 0)
    -V                Display the netperf version and exit
    -y local,remote   Set the socket priority
    -Y local,remote   Set the IP_TOS. Use hexadecimal.
    -Z passphrase     Set and pass to netserver a passphrase
(1)全域性命令列引數 [global options]
引數 說明
-H host 指定遠端執行netserver的server IP地址
-l testlen 指定測試的時間長度(秒)
-t testname 指定進行的測試型別(包括TCP_STREAM,UDP_STREAM,TCP_RR,TCP_CRR,UDP_RR)。
(2)區域性可選引數 [test options]
引數 說明
-s size 設定本地系統的socket傳送與接收緩衝大小
-S size 設定遠端系統的socket傳送與接收緩衝大小
-m size 設定本地系統傳送測試分組的大小,測試PPS時值為1。測試BPS時為1400。
-M size 設定遠端系統接收測試分組的大小
-p port 設定測試連線Server端的埠
-D 對本地與遠端系統的socket設定TCP_NODELAY選項
-r req,resp 設定request和reponse分組的大小
2、Netperf 模擬的流量模式
(1)Netperf 模擬的TCP流量模式
  • 單個TCP連線,批量(bulk)傳輸大量資料

  • 單個TCP連線,request/response流量模式

  • 多個TCP連線,每個連線中一對request/response的交易(transaction)方式

TCP協議提供端到端]的可靠傳輸,但可靠性的建立會消耗一定的網路頻寬。

(2)Netperf 模擬的UDP流量模式
  • 從client到server的單向批量傳輸

  • 請求/應答request/response的交易方式

UDP不保證傳輸的可靠性,在使用netperf時要確保傳送的緩衝區大小不大於接收緩衝區大小,否則資料會丟失,netperf將給出錯誤的結果。因此,對於接收到分組的統計不一定準確,需要結合傳送分組的統計綜合得出結論。

三、Netperf 測試例項

Netperf 測試主要分服務端和客戶端,在一臺主機執行服務端netserver,在另一臺主機執行客戶端netperf。

  • 服務端:192.168.0.128
  • 客戶端:192.168.0.120

測試通過單個TCP連線傳輸批量資料。

1、啟動服務端
[root@Netserver-test ~]# netserver -p 4444		//服務端開放4444埠用於監聽
Starting netserver with host 'IN(6)ADDR_ANY' port '12865' and family AF_UNSPEC

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

2、啟動客戶端
[root@Netperf-test ~]# netperf -H 192.168.0.128 -l 60 --m 1
Recv   Send    Send                          
Socket Socket  Message  Elapsed              
Size   Size    Size     Time     Throughput  
bytes  bytes   bytes    secs.    10^6bits/sec  
87380  16384  16384    60.01     935.66   

測試結果:顯示吞吐量是881.21Mb/s。

四、Netperf 網路效能測試分類

1、批量(bulk)網路流量的效能測試

根據使用傳輸協議的不同,批量資料傳輸又分為TCP批量傳輸和UDP批量傳輸。

(1)TCP_STREAM

Netperf預設情況下進行TCP批量傳輸,即-t TCP_STREAM,用來測試進行TCP批量傳輸時的網路效能。

測試過程中,netperf向netserver傳送批量的TCP資料分組,以確定資料傳輸過程中的吞吐量。

[root@Netperf-test ~]# netperf -H 192.168.0.128 -l 60
TCP STREAM TEST to 192.168.0.128
Recv   Send    Send
Socket Socket  Message  Elapsed
Size   Size    Size     Time     Throughput
bytes  bytes   bytes    secs.    10^6bits/sec
87380  16384  16384    60.00      88.00

從netperf的結果輸出中可知:

  • 遠端系統(即server)使用大小為87380位元組的socket接收緩衝

  • 本地系統(即client)使用大小為16384位元組的socket傳送緩衝

  • 向遠端系統傳送的測試分組大小為16384位元組

  • 測試經歷的時間為60秒

  • 吞吐量的測試結果為88Mbits/秒

在預設情況下,netperf向netserver傳送的測試分組大小設定為本地系統所使用的socket傳送緩衝大小。

如果懷疑路由器由於缺乏足夠的緩衝區空間,使得轉發大的分組時存在問題,就可以增加測試分組(-m)的大小,以觀察吞吐量的變化。減小測試分組的大小,如果吞吐量有了較大的提升,則說明在網路中間的路由器確實存在緩衝區的問題。

(2)UDP_STREAM

UDP_STREAM用來測試進行UDP批量傳輸時的網路效能。

測試UDP的網路效能時,測試分組的大小不得大於socket的傳送與接收緩衝大小,否則netperf會報出錯提示。

[root@Netperf-test ~]# netperf -t UDP_STREAM -H 192.168.0.128 -l 60
UDP UNIDIRECTIONAL SEND TEST to 192.168.0.128
udp_send: data send error: Message too long

為了避免這樣的情況,可以通過命令列引數限定測試分組的大小,或者增加socket的傳送/接收緩衝大小。

UDP_STREAM方式使用使用-m來修改測試中使用分組的大小。

[root@Netperf-test ~]# netperf -t UDP_STREAM -H 192.168.0.128 -- -m 1024
UDP UNIDIRECTIONAL SEND TEST to 192.168.0.128
Socket  Message  Elapsed      Messages
Size    Size     Time         Okay Errors   Throughput
bytes   bytes    secs            #      #   10^6bits/sec
65535    1024    9.99        114127     0      93.55
65535            9.99        114122            93.54

UDP_STREAM方式的結果中有兩行測試資料:

第一行顯示的是本地系統的傳送統計,吞吐量93.55Mbits/秒錶示netperf向本地socket傳送分組的能力。但是UDP是不可靠的傳輸協議,傳送出去的分組數量不一定等於接收到的分組數量。

第二行顯示的就是遠端系統接收的情況,遠端系統的吞吐量93.54Mbits/秒也幾乎等於本地系統的傳送吞吐量。但是,在實際環境中,一般遠端系統的socket緩衝大小不同於本地系統的socket緩衝區大小,而且由於UDP協議的不可靠性,遠端系統的接收吞吐量要遠遠小於傳送出去的吞吐量。

2、請求/應答(request/response)網路流量的效能測試

在client/server結構中的request/response模式。在每次交易(transaction)中,client向server發出小的查詢分組,server接收到請求,經處理後返回大的結果資料。

(1)TCP_RR

TCP_RR方式的測試物件是多次TCP request和response的交易過程,但發生在同一個TCP連線中,這種模式常常出現在資料庫應用中。資料庫的client程式與server程式建立一個TCP連線以後,就在這個連線中傳送資料庫的多次交易過程。

[root@Netperf-test ~]# netperf -t TCP_RR -H 192.168.0.128
TCP REQUEST/RESPONSE TEST to 192.168.0.128
Local /Remote
Socket Size   Request  Resp.   Elapsed  Trans.
Send   Recv   Size     Size    Time     Rate
bytes  Bytes  bytes    bytes   secs.    per sec
16384  87380  1        1       10.00    9502.73
16384  87380

Netperf輸出的結果也是由兩行組成。第一行顯示本地系統的情況,第二行顯示的是遠端系統的資訊。平均的交易率(transaction rate)為9502.73次/秒。

通過使用-r引數設定request和reponse分組的大小,可以進行更有實際意義的測試。

[root@Netperf-test ~]# netperf -t TCP_RR -H 192.168.0.128 -- -r 32,1024
TCP REQUEST/RESPONSE TEST to 192.168.0.128
Local /Remote
Socket Size   Request  Resp.   Elapsed  Trans.
Send   Recv   Size     Size    Time     Rate
bytes  Bytes  bytes    bytes   secs.    per sec
16384  87380  32       1024    10.00    4945.97
16384  87380
(2)TCP_CRR

TCP_CRR的測試物件是多次TCP request和response的交易過程,但為每次交易建立一個新的TCP連線。最典型的應用就是HTTP,每次HTTP交易是在一條單獨的TCP連線中進行的。因此,由於需要不停地建立新的TCP連線,並且在交易結束後拆除TCP連線,交易率一定會受到很大的影響。

[root@Netperf-test ~]# netperf -t TCP_CRR -H 192.168.0.128
TCP Connect/Request/Response TEST to 192.168.0.128
Local /Remote
Socket Size   Request  Resp.   Elapsed  Trans.
Send   Recv   Size     Size    Time     Rate
bytes  Bytes  bytes    bytes   secs.    per sec
131070 131070 1        1       9.99     2662.20
16384  87380

即使是使用一個位元組的request/response分組,交易率也明顯的降低了,只有2662.20次/秒。TCP_CRR使用與TCP_RR相同的區域性引數。

(3)UDP_RR

UDP_RR方式使用UDP分組進行request/response的交易過程。由於沒有TCP連線所帶來的負擔,所以我們推測交易率一定會有相應的提升。

[root@Netperf-test ~]# netperf -t UDP_RR -H 192.168.0.128
UDP REQUEST/RESPONSE TEST to 192.168.0.128
Local /Remote
Socket Size   Request  Resp.   Elapsed  Trans.
Send   Recv   Size     Size    Time     Rate
bytes  Bytes  bytes    bytes   secs.    per sec
65535  65535  1        1       9.99     10141.16
65535  65535

結果證實了我們的推測,交易率為10141.16次/秒,高過TCP_RR的數值。不過,如果出現了相反的結果,即交易率反而降低了,也不需要擔心,因為這說明了在網路中,路由器或其它的網路裝置對UDP採用了與TCP不同的緩衝區空間和處理技術。

五、學習筆記參考資料

1、《Netperf-百度百科》,https://baike.baidu.com/item/netperf/11070957?fr=aladdin

2、《Netperf安裝及使用》,soloate,https://www.cnblogs.com/soloate/p/5763748.html

3、《netperf 與網路效能測量》,湯凱,https://www.ibm.com/developerworks/cn/linux/l-netperf/

4、《網路效能測試方法》,阿里雲幫助文件,https://help.aliyun.com/knowledge_detail/55757.html#HF