本文下載鏈接:
【學(xué)習(xí)筆記】Netperf網(wǎng)絡(luò)性能測試工具.pdf
一、Netperf工具簡介
1倦沧、什么是Netperf 它匕?
(1)Netperf是由惠普公司開發(fā)的一種網(wǎng)絡(luò)性能測量工具,主要針對基于TCP或UDP的傳輸告希。
(2)Netperf根據(jù)應(yīng)用的不同烧给,可以進(jìn)行不同模式的網(wǎng)絡(luò)性能測試,即批量數(shù)據(jù)傳輸(bulk data transfer)模式和請求/應(yīng)答(request/reponse)模式指么。
(3)Netperf測試結(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ò)測試届谈。
(2)Netperf 工具的工作原理
在client與server之間,首先建立一個(gè)控制連接湖雹,用于傳遞有關(guān)測試配置的信息曙搬,以及測試的結(jié)果鸽嫂。在控制連接建立并傳遞了測試配置信息以后据某,client與server之間會(huì)再建立一個(gè)測試連接诗箍,用來來回傳遞著特殊的流量模式,以測試網(wǎng)絡(luò)的性能筷狼。
(3)Netperf 工具的工作流程
① 建立控制連接:
? server端netserver啟動(dòng)監(jiān)聽氨距,監(jiān)聽來自client端netperf 的連接請求俏让;
? client端向server端發(fā)送控制連接請求茬暇,server端發(fā)現(xiàn)連接請求,建立控制連接勒奇。
? 控制連接創(chuàng)建完成巧骚,使用BSD socket傳輸信息,屬于TCP連接竣蹦。
② 建立測試連接
? client端通過控制連接向server端傳遞測試配置信息沧奴。
? server端獲取測試配置信息,建立測試連接纲菌。
? 測試連接用于傳輸各種模式的流量測試網(wǎng)絡(luò)的性能疮绷。
③ 測試網(wǎng)絡(luò)性能
? client端通過測試連接向server端發(fā)送Bulk模式流量模式的數(shù)據(jù)。
? server端接受Bulk模式流量模式的數(shù)據(jù)并產(chǎn)生測試結(jié)果1灶芝。
? client端通過測試連接向server端發(fā)送request/response流量模式的數(shù)據(jù)。
? server端接受request/response流量模式的數(shù)據(jù)并產(chǎn)生測試結(jié)果2夜涕。
④ 輸出測試結(jié)果
? server端通過控制連接向client端發(fā)送測試結(jié)果。
? client端接受到測試結(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ù)器及客戶端使用相同的源碼驳阎,測試時(shí)關(guān)閉防火墻
4、網(wǎng)絡(luò)性能測量的五項(xiàng)指標(biāo)
(1)可用性(availability)
測試網(wǎng)絡(luò)性能的第一步是確定網(wǎng)絡(luò)是否正常工作蜘腌,最簡單的方法是使用 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ò)測試工具一般使用網(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ù)來控制測試的類型和具體的測試選項(xiàng)隙轻。
netperf 命令行參數(shù)分為兩大類:全局命令行參數(shù)、測試相關(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 | 指定測試的時(shí)間長度(秒) |
-t testname | 指定進(jìn)行的測試類型(包括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ā)送測試分組的大小撑瞧,測試PPS時(shí)值為1。測試BPS時(shí)為1400订咸。 |
-M size | 設(shè)置遠(yuǎn)端系統(tǒng)接收測試分組的大小 |
-p port | 設(shè)置測試連接Server端的端口 |
-D | 對本地與遠(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è)連接中一對request/response的交易(transaction)方式
TCP協(xié)議提供端到端]的可靠傳輸高每,但可靠性的建立會(huì)消耗一定的網(wǎng)絡(luò)帶寬。
(2)Netperf 模擬的UDP流量模式
從client到server的單向批量傳輸
請求/應(yīng)答request/response的交易方式
UDP不保證傳輸?shù)目煽啃砸常谑褂胣etperf時(shí)要確保發(fā)送的緩沖區(qū)大小不大于接收緩沖區(qū)大小带欢,否則數(shù)據(jù)會(huì)丟失,netperf將給出錯(cuò)誤的結(jié)果吁朦。因此渡贾,對于接收到分組的統(tǒng)計(jì)不一定準(zhǔn)確,需要結(jié)合發(fā)送分組的統(tǒng)計(jì)綜合得出結(jié)論空骚。
三、Netperf 測試實(shí)例
Netperf 測試主要分服務(wù)端和客戶端熬甚,在一臺(tái)主機(jī)運(yùn)行服務(wù)端netserver肋坚,在另一臺(tái)主機(jī)運(yùn)行客戶端netperf。
- 服務(wù)端:192.168.0.128
- 客戶端:192.168.0.120
測試通過單個(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
測試結(jié)果:顯示吞吐量是881.21Mb/s。
四羹幸、Netperf 網(wǎng)絡(luò)性能測試分類
1、批量(bulk)網(wǎng)絡(luò)流量的性能測試
根據(jù)使用傳輸協(xié)議的不同将硝,批量數(shù)據(jù)傳輸又分為TCP批量傳輸和UDP批量傳輸屏镊。
(1)TCP_STREAM
Netperf缺省情況下進(jìn)行TCP批量傳輸,即-t TCP_STREAM律罢,用來測試進(jìn)行TCP批量傳輸時(shí)的網(wǎng)絡(luò)性能棍丐。
測試過程中,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ā)送的測試分組大小為16384字節(jié)
測試經(jīng)歷的時(shí)間為60秒
吞吐量的測試結(jié)果為88Mbits/秒
在缺省情況下,netperf向netserver發(fā)送的測試分組大小設(shè)置為本地系統(tǒng)所使用的socket發(fā)送緩沖大小师骗。
如果懷疑路由器由于缺乏足夠的緩沖區(qū)空間讨惩,使得轉(zhuǎn)發(fā)大的分組時(shí)存在問題寒屯,就可以增加測試分組(-m)的大小,以觀察吞吐量的變化处面。減小測試分組的大小,如果吞吐量有了較大的提升魂角,則說明在網(wǎng)絡(luò)中間的路由器確實(shí)存在緩沖區(qū)的問題智绸。
(2)UDP_STREAM
UDP_STREAM用來測試進(jìn)行UDP批量傳輸時(shí)的網(wǎng)絡(luò)性能访忿。
測試UDP的網(wǎng)絡(luò)性能時(shí)海铆,測試分組的大小不得大于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ù)限定測試分組的大小竖幔,或者增加socket的發(fā)送/接收緩沖大小。
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方式的結(jié)果中有兩行測試數(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、請求/應(yīng)答(request/response)網(wǎng)絡(luò)流量的性能測試
在client/server結(jié)構(gòu)中的request/response模式赂苗。在每次交易(transaction)中贮尉,client向server發(fā)出小的查詢分組,server接收到請求猜谚,經(jīng)處理后返回大的結(jié)果數(shù)據(jù)。
(1)TCP_RR
TCP_RR方式的測試對象是多次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í)際意義的測試。
[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的交易過程旱爆,但為每次交易建立一個(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),所以我們推測交易率一定會(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í)了我們的推測愕撰,交易率為10141.16次/秒,高過TCP_RR的數(shù)值带迟。不過囱桨,如果出現(xiàn)了相反的結(jié)果,即交易率反而降低了舍肠,也不需要擔(dān)心,因?yàn)檫@說明了在網(wǎng)絡(luò)中叽躯,路由器或其它的網(wǎng)絡(luò)設(shè)備對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ò)性能測量》,湯凱莺债,https://www.ibm.com/developerworks/cn/linux/l-netperf/
4、《網(wǎng)絡(luò)性能測試方法》齐邦,阿里云幫助文檔第租,https://help.aliyun.com/knowledge_detail/55757.html#HFXbx