京寵展信息指南
1603
2022-05-30
【學習筆記】Netperf網絡性能測試工具.pdf
(1)Netperf是由惠普公司開發的一種網絡性能測量工具,主要針對基于TCP或UDP的傳輸。
(2)Netperf根據應用的不同,可以進行不同模式的網絡性能測試,即批量數據傳輸(bulk data transfer)模式和請求/應答(request/reponse)模式。
(3)Netperf測試結果所反映的是一個系統能夠以多快的速度向另外一個系統發送數據,以及另外一個系統能夠以多塊的速度接收數據。
① Netperf 工具以client/server方式工作。
② server端是netserver,用來偵聽來自client端的連接。
③ client端是netperf,用來向server發起網絡測試。
在client與server之間,首先建立一個控制連接,用于傳遞有關測試配置的信息,以及測試的結果。在控制連接建立并傳遞了測試配置信息以后,client與server之間會再建立一個測試連接,用來來回傳遞著特殊的流量模式,以測試網絡的性能。
① 建立控制連接:
? 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端接受到測試結果并顯示或保存。
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
執行netperf -h和netserver -h命令,確認安裝成功。
注:服務器及客戶端使用相同的源碼,測試時關閉防火墻
(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 通過命令行參數來控制測試的類型和具體的測試選項。
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
單個TCP連接,批量(bulk)傳輸大量數據
單個TCP連接,request/response流量模式
多個TCP連接,每個連接中一對request/response的交易(transaction)方式
TCP協議提供端到端]的可靠傳輸,但可靠性的建立會消耗一定的網絡帶寬。
從client到server的單向批量傳輸
請求/應答request/response的交易方式
UDP不保證傳輸的可靠性,在使用netperf時要確保發送的緩沖區大小不大于接收緩沖區大小,否則數據會丟失,netperf將給出錯誤的結果。因此,對于接收到分組的統計不一定準確,需要結合發送分組的統計綜合得出結論。
Netperf 測試主要分服務端和客戶端,在一臺主機運行服務端netserver,在另一臺主機運行客戶端netperf。
服務端:192.168.0.128
客戶端:192.168.0.120
測試通過單個TCP連接傳輸批量數據。
[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。
[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。
根據使用傳輸協議的不同,批量數據傳輸又分為TCP批量傳輸和UDP批量傳輸。
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)的大小,以觀察吞吐量的變化。減小測試分組的大小,如果吞吐量有了較大的提升,則說明在網絡中間的路由器確實存在緩沖區的問題。
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協議的不可靠性,遠端系統的接收吞吐量要遠遠小于發送出去的吞吐量。
在client/server結構中的request/response模式。在每次交易(transaction)中,client向server發出小的查詢分組,server接收到請求,經處理后返回大的結果數據。
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
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相同的局部參數。
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#HFXbx
云性能測試服務 CPTS 網絡 自動化測試
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。