本文下載鏈接:
【學(xué)習(xí)筆記】Netperf網(wǎng)絡(luò)性能測(cè)試工具.pdf
一、Netperf工具簡(jiǎn)介
1、什么是Netperf ?
(1)Netperf是由惠普公司開發(fā)的一種網(wǎng)絡(luò)性能測(cè)量工具,主要針對(duì)基于TCP或UDP的傳輸。
(2)Netperf根據(jù)應(yīng)用的不同,可以進(jìn)行不同模式的網(wǎng)絡(luò)性能測(cè)試,即批量數(shù)據(jù)傳輸(bulk data transfer)模式和請(qǐng)求/應(yīng)答(request/reponse)模式。
(3)Netperf測(cè)試結(jié)果所反映的是一個(gè)系統(tǒng)能夠以多快的速度向另外一個(gè)系統(tǒng)發(fā)送數(shù)據(jù),以及另外一個(gè)系統(tǒng)能夠以多塊的速度接收數(shù)據(jù)。
2、Netperf 工作原理
(1)Netperf 工具的工作方式
① Netperf 工具以client/server方式工作。
② server端是netserver,用來偵聽來自client端的連接。
③ client端是netperf,用來向server發(fā)起網(wǎng)絡(luò)測(cè)試。
(2)Netperf 工具的工作原理
在client與server之間,首先建立一個(gè)控制連接,用于傳遞有關(guān)測(cè)試配置的信息,以及測(cè)試的結(jié)果。在控制連接建立并傳遞了測(cè)試配置信息以后,client與server之間會(huì)再建立一個(gè)測(cè)試連接,用來來回傳遞著特殊的流量模式,以測(cè)試網(wǎng)絡(luò)的性能。
(3)Netperf 工具的工作流程
① 建立控制連接:
? server端netserver啟動(dòng)監(jiān)聽,監(jiān)聽來自client端netperf 的連接請(qǐng)求;
? client端向server端發(fā)送控制連接請(qǐng)求,server端發(fā)現(xiàn)連接請(qǐng)求,建立控制連接。
? 控制連接創(chuàng)建完成,使用BSD socket傳輸信息,屬于TCP連接。
② 建立測(cè)試連接
? client端通過控制連接向server端傳遞測(cè)試配置信息。
? server端獲取測(cè)試配置信息,建立測(cè)試連接。
? 測(cè)試連接用于傳輸各種模式的流量測(cè)試網(wǎng)絡(luò)的性能。
③ 測(cè)試網(wǎng)絡(luò)性能
? client端通過測(cè)試連接向server端發(fā)送Bulk模式流量模式的數(shù)據(jù)。
? server端接受Bulk模式流量模式的數(shù)據(jù)并產(chǎn)生測(cè)試結(jié)果1。
? client端通過測(cè)試連接向server端發(fā)送request/response流量模式的數(shù)據(jù)。
? server端接受request/response流量模式的數(shù)據(jù)并產(chǎn)生測(cè)試結(jié)果2。
④ 輸出測(cè)試結(jié)果
? server端通過控制連接向client端發(fā)送測(cè)試結(jié)果。
? client端接受到測(cè)試結(jié)果并顯示或保存。
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
編譯不過可嘗試執(zhí)行:./configure --build=mips
(2)確認(rèn)安裝成功
執(zhí)行netperf -h和netserver -h命令,確認(rèn)安裝成功。
注:服務(wù)器及客戶端使用相同的源碼,測(cè)試時(shí)關(guān)閉防火墻
4、網(wǎng)絡(luò)性能測(cè)量的五項(xiàng)指標(biāo)
(1)可用性(availability)
測(cè)試網(wǎng)絡(luò)性能的第一步是確定網(wǎng)絡(luò)是否正常工作,最簡(jiǎn)單的方法是使用 ping 命令。通過向遠(yuǎn)端的機(jī)器發(fā)送 icmp echo request,并等待接收 icmp echo reply 來判斷遠(yuǎn)端的機(jī)器是否連通,網(wǎng)絡(luò)是否正常工作。
(2)響應(yīng)時(shí)間(response time)
ping 命令的 echo request/reply 一次往返所花費(fèi)時(shí)間就是響應(yīng)時(shí)間。
(3)網(wǎng)絡(luò)利用率(network utilization)
網(wǎng)絡(luò)利用率是指網(wǎng)絡(luò)被使用的時(shí)間占總時(shí)間(即被使用的時(shí)間+空閑的時(shí)間)的比例。
網(wǎng)絡(luò)測(cè)試工具一般使用網(wǎng)絡(luò)吞吐量和網(wǎng)絡(luò)帶寬容量來確定網(wǎng)絡(luò)中兩個(gè)節(jié)點(diǎn)之間的性能。
(4)網(wǎng)絡(luò)吞吐量(network throughput)
網(wǎng)絡(luò)吞吐量是指在某個(gè)時(shí)刻,在網(wǎng)絡(luò)中的兩個(gè)節(jié)點(diǎn)之間,提供給網(wǎng)絡(luò)應(yīng)用的剩余帶寬。
網(wǎng)絡(luò)吞吐量非常依賴于當(dāng)前的網(wǎng)絡(luò)負(fù)載情況,可以幫組尋找網(wǎng)絡(luò)路徑中的瓶頸。
(5)網(wǎng)絡(luò)帶寬容量(network bandwidth capacity)
網(wǎng)絡(luò)帶寬容量指的是在網(wǎng)絡(luò)的兩個(gè)節(jié)點(diǎn)之間的最大可用帶寬。這是由組成網(wǎng)絡(luò)的設(shè)備的能力所決定的。
二、Netperf 使用語法
1、neserver語法格式
| 參數(shù) | 說明 |
|---|---|
| -H host | 指定遠(yuǎn)端運(yùn)行netserver的server IP地址 |
2、netperf語法格式
netperf 通過命令行參數(shù)來控制測(cè)試的類型和具體的測(cè)試選項(xiàng)。
netperf 命令行參數(shù)分為兩大類:全局命令行參數(shù)、測(cè)試相關(guān)的局部參數(shù),兩者之間使用--分隔。
[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)全局命令行參數(shù) [global options]
| 參數(shù) | 說明 |
|---|---|
| -H host | 指定遠(yuǎn)端運(yùn)行netserver的server IP地址 |
| -l testlen | 指定測(cè)試的時(shí)間長度(秒) |
| -t testname | 指定進(jìn)行的測(cè)試類型(包括TCP_STREAM,UDP_STREAM,TCP_RR,TCP_CRR,UDP_RR)。 |
(2)局部可選參數(shù) [test options]
| 參數(shù) | 說明 |
|---|---|
| -s size | 設(shè)置本地系統(tǒng)的socket發(fā)送與接收緩沖大小 |
| -S size | 設(shè)置遠(yuǎn)端系統(tǒng)的socket發(fā)送與接收緩沖大小 |
| -m size | 設(shè)置本地系統(tǒng)發(fā)送測(cè)試分組的大小,測(cè)試PPS時(shí)值為1。測(cè)試BPS時(shí)為1400。 |
| -M size | 設(shè)置遠(yuǎn)端系統(tǒng)接收測(cè)試分組的大小 |
| -p port | 設(shè)置測(cè)試連接Server端的端口 |
| -D | 對(duì)本地與遠(yuǎn)端系統(tǒng)的socket設(shè)置TCP_NODELAY選項(xiàng) |
| -r req,resp | 設(shè)置request和reponse分組的大小 |
2、Netperf 模擬的流量模式
(1)Netperf 模擬的TCP流量模式
單個(gè)TCP連接,批量(bulk)傳輸大量數(shù)據(jù)
單個(gè)TCP連接,request/response流量模式
多個(gè)TCP連接,每個(gè)連接中一對(duì)request/response的交易(transaction)方式
TCP協(xié)議提供端到端]的可靠傳輸,但可靠性的建立會(huì)消耗一定的網(wǎng)絡(luò)帶寬。
(2)Netperf 模擬的UDP流量模式
從client到server的單向批量傳輸
請(qǐng)求/應(yīng)答request/response的交易方式
UDP不保證傳輸?shù)目煽啃裕谑褂胣etperf時(shí)要確保發(fā)送的緩沖區(qū)大小不大于接收緩沖區(qū)大小,否則數(shù)據(jù)會(huì)丟失,netperf將給出錯(cuò)誤的結(jié)果。因此,對(duì)于接收到分組的統(tǒng)計(jì)不一定準(zhǔn)確,需要結(jié)合發(fā)送分組的統(tǒng)計(jì)綜合得出結(jié)論。
三、Netperf 測(cè)試實(shí)例
Netperf 測(cè)試主要分服務(wù)端和客戶端,在一臺(tái)主機(jī)運(yùn)行服務(wù)端netserver,在另一臺(tái)主機(jī)運(yùn)行客戶端netperf。
- 服務(wù)端:192.168.0.128
- 客戶端:192.168.0.120
測(cè)試通過單個(gè)TCP連接傳輸批量數(shù)據(jù)。
1、啟動(dòng)服務(wù)端
[root@Netserver-test ~]# netserver -p 4444 //服務(wù)端開放4444端口用于監(jiān)聽
Starting netserver with host 'IN(6)ADDR_ANY' port '12865' and family AF_UNSPEC
通常建議在server端執(zhí)行sar命令來統(tǒng)計(jì)實(shí)際收到的包并作為實(shí)際結(jié)果:sar -n DEV 1 320。
2、啟動(dòng)客戶端
[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
測(cè)試結(jié)果:顯示吞吐量是881.21Mb/s。
四、Netperf 網(wǎng)絡(luò)性能測(cè)試分類
1、批量(bulk)網(wǎng)絡(luò)流量的性能測(cè)試
根據(jù)使用傳輸協(xié)議的不同,批量數(shù)據(jù)傳輸又分為TCP批量傳輸和UDP批量傳輸。
(1)TCP_STREAM
Netperf缺省情況下進(jìn)行TCP批量傳輸,即-t TCP_STREAM,用來測(cè)試進(jìn)行TCP批量傳輸時(shí)的網(wǎng)絡(luò)性能。
測(cè)試過程中,netperf向netserver發(fā)送批量的TCP數(shù)據(jù)分組,以確定數(shù)據(jù)傳輸過程中的吞吐量。
[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的結(jié)果輸出中可知:
遠(yuǎn)端系統(tǒng)(即server)使用大小為87380字節(jié)的socket接收緩沖
本地系統(tǒng)(即client)使用大小為16384字節(jié)的socket發(fā)送緩沖
向遠(yuǎn)端系統(tǒng)發(fā)送的測(cè)試分組大小為16384字節(jié)
測(cè)試經(jīng)歷的時(shí)間為60秒
吞吐量的測(cè)試結(jié)果為88Mbits/秒
在缺省情況下,netperf向netserver發(fā)送的測(cè)試分組大小設(shè)置為本地系統(tǒng)所使用的socket發(fā)送緩沖大小。
如果懷疑路由器由于缺乏足夠的緩沖區(qū)空間,使得轉(zhuǎn)發(fā)大的分組時(shí)存在問題,就可以增加測(cè)試分組(-m)的大小,以觀察吞吐量的變化。減小測(cè)試分組的大小,如果吞吐量有了較大的提升,則說明在網(wǎng)絡(luò)中間的路由器確實(shí)存在緩沖區(qū)的問題。
(2)UDP_STREAM
UDP_STREAM用來測(cè)試進(jìn)行UDP批量傳輸時(shí)的網(wǎng)絡(luò)性能。
測(cè)試UDP的網(wǎng)絡(luò)性能時(shí),測(cè)試分組的大小不得大于socket的發(fā)送與接收緩沖大小,否則netperf會(huì)報(bào)出錯(cuò)提示。
[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
為了避免這樣的情況,可以通過命令行參數(shù)限定測(cè)試分組的大小,或者增加socket的發(fā)送/接收緩沖大小。
UDP_STREAM方式使用使用-m來修改測(cè)試中使用分組的大小。
[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方式的結(jié)果中有兩行測(cè)試數(shù)據(jù):
第一行顯示的是本地系統(tǒng)的發(fā)送統(tǒng)計(jì),吞吐量93.55Mbits/秒表示netperf向本地socket發(fā)送分組的能力。但是UDP是不可靠的傳輸協(xié)議,發(fā)送出去的分組數(shù)量不一定等于接收到的分組數(shù)量。
第二行顯示的就是遠(yuǎn)端系統(tǒng)接收的情況,遠(yuǎn)端系統(tǒng)的吞吐量93.54Mbits/秒也幾乎等于本地系統(tǒng)的發(fā)送吞吐量。但是,在實(shí)際環(huán)境中,一般遠(yuǎn)端系統(tǒng)的socket緩沖大小不同于本地系統(tǒng)的socket緩沖區(qū)大小,而且由于UDP協(xié)議的不可靠性,遠(yuǎn)端系統(tǒng)的接收吞吐量要遠(yuǎn)遠(yuǎn)小于發(fā)送出去的吞吐量。
2、請(qǐng)求/應(yīng)答(request/response)網(wǎng)絡(luò)流量的性能測(cè)試
在client/server結(jié)構(gòu)中的request/response模式。在每次交易(transaction)中,client向server發(fā)出小的查詢分組,server接收到請(qǐng)求,經(jīng)處理后返回大的結(jié)果數(shù)據(jù)。
(1)TCP_RR
TCP_RR方式的測(cè)試對(duì)象是多次TCP request和response的交易過程,但發(fā)生在同一個(gè)TCP連接中,這種模式常常出現(xiàn)在數(shù)據(jù)庫應(yīng)用中。數(shù)據(jù)庫的client程序與server程序建立一個(gè)TCP連接以后,就在這個(gè)連接中傳送數(shù)據(jù)庫的多次交易過程。
[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輸出的結(jié)果也是由兩行組成。第一行顯示本地系統(tǒng)的情況,第二行顯示的是遠(yuǎn)端系統(tǒng)的信息。平均的交易率(transaction rate)為9502.73次/秒。
通過使用-r參數(shù)設(shè)置request和reponse分組的大小,可以進(jìn)行更有實(shí)際意義的測(cè)試。
[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的測(cè)試對(duì)象是多次TCP request和response的交易過程,但為每次交易建立一個(gè)新的TCP連接。最典型的應(yīng)用就是HTTP,每次HTTP交易是在一條單獨(dú)的TCP連接中進(jìn)行的。因此,由于需要不停地建立新的TCP連接,并且在交易結(jié)束后拆除TCP連接,交易率一定會(huì)受到很大的影響。
[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
即使是使用一個(gè)字節(jié)的request/response分組,交易率也明顯的降低了,只有2662.20次/秒。TCP_CRR使用與TCP_RR相同的局部參數(shù)。
(3)UDP_RR
UDP_RR方式使用UDP分組進(jìn)行request/response的交易過程。由于沒有TCP連接所帶來的負(fù)擔(dān),所以我們推測(cè)交易率一定會(huì)有相應(yīng)的提升。
[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
結(jié)果證實(shí)了我們的推測(cè),交易率為10141.16次/秒,高過TCP_RR的數(shù)值。不過,如果出現(xiàn)了相反的結(jié)果,即交易率反而降低了,也不需要擔(dān)心,因?yàn)檫@說明了在網(wǎng)絡(luò)中,路由器或其它的網(wǎng)絡(luò)設(shè)備對(duì)UDP采用了與TCP不同的緩沖區(qū)空間和處理技術(shù)。
五、學(xué)習(xí)筆記參考資料
1、《Netperf-百度百科》,https://baike.baidu.com/item/netperf/11070957?fr=aladdin
2、《Netperf安裝及使用》,soloate,https://www.cnblogs.com/soloate/p/5763748.html
3、《netperf 與網(wǎng)絡(luò)性能測(cè)量》,湯凱,https://www.ibm.com/developerworks/cn/linux/l-netperf/
4、《網(wǎng)絡(luò)性能測(cè)試方法》,阿里云幫助文檔,https://help.aliyun.com/knowledge_detail/55757.html#HFXbx