http://blog.itpub.net/22664653/viewspace-714569/
2012
Netperf是一種網(wǎng)絡(luò)性能測量工具,主要針對基于TCP或UDP的傳輸,Netperf根據(jù)應(yīng)用的不同,可以進(jìn)行不同模式的網(wǎng)絡(luò)性能測試,即批量數(shù)據(jù)傳輸(bulk data transfer)模式和請求/應(yīng)答(request/reponse)模式。Netperf測試結(jié)果所反映的是一個系統(tǒng)能夠以多快的速度向另外一個系統(tǒng)發(fā)送數(shù)據(jù),以及另外一個系統(tǒng)能夠以多塊的速度接收數(shù)據(jù)。
一 netperf 簡介
1.1.工作原理
Netperf工具以client/server方式工作。server端是netserver,用來偵聽來自client端的連接,client端是netperf,用來向server發(fā)起網(wǎng)絡(luò)測試.在client與server之間,首先建立一個控制連接,傳遞有關(guān)測試配置的信息,以及測試的結(jié)果:在控制連接建立并傳遞了測試配置信息以后,client與server之間會再建立一個測試連接,進(jìn)行來回傳遞特殊的流量模式,以測試網(wǎng)絡(luò)的性能.具體過程如下圖所示:
圖.1 建立連接
圖2 測試并產(chǎn)生結(jié)果
圖3 回傳結(jié)果
1.2 安裝
下載Netperf工具
# wget ftp://ftp.netperf.org/netperf/netperf-2.5.0.tar.gz
# tar zxvf netperf-2.5.0.tar.gz
# ./configure
# make && make install
在unix系統(tǒng)中,可以直接運(yùn)行可執(zhí)行程序來啟動netserver。測試的時候,必須在兩臺機(jī)器上同時安裝netperf,當(dāng)netserver在server端啟動以后,就可以在client端運(yùn)行netperf來測試網(wǎng)絡(luò)的性能。
1.3 命令介紹
根據(jù)作用范圍的不同,netperf的命令行參數(shù)可以分為兩大類:全局命令行參數(shù)、測試相關(guān)的局部參數(shù),兩者之間使用--分隔:
Netperf [global options] –-[test-specific options]
其中:
全局命令行參數(shù)包括如下選項(xiàng):
-H host :指定遠(yuǎn)端運(yùn)行netserver的server IP地址。
-l testlen:指定測試的時間長度(秒)
-t testname:指定進(jìn)行的測試類型,包括TCP_STREAM,UDP_STREAM,TCP_RR,TCP_CRR,UDP_RR
測試相關(guān)的局部參數(shù)包括如下選項(xiàng):
-s size 設(shè)置本地系統(tǒng)的socket發(fā)送與接收緩沖大小
-S size 設(shè)置遠(yuǎn)端系統(tǒng)的socket發(fā)送與接收緩沖大小
-m size 設(shè)置本地系統(tǒng)發(fā)送測試分組的大小
-M size 設(shè)置遠(yuǎn)端系統(tǒng)接收測試分組的大小
-D 對本地與遠(yuǎn)端系統(tǒng)的socket設(shè)置TCP_NODELAY選項(xiàng)
二 使用netperf進(jìn)行網(wǎng)絡(luò)測試
2.1 測試批量(bulk)網(wǎng)絡(luò)流量的性能
批量數(shù)據(jù)傳輸?shù)湫偷睦佑衒tp和其它類似的網(wǎng)絡(luò)應(yīng)用(即一次傳輸整個文件)。根據(jù)使用傳輸協(xié)議的不同,批量數(shù)據(jù)傳輸又分為TCP批量傳輸和UDP批量傳輸。
1.TCP_STREAM
Netperf缺省情況下進(jìn)行TCP批量傳輸,即-t TCP_STREAM。測試過程中,netperf向netserver發(fā)送批量的TCP數(shù)據(jù)分組,以確定數(shù)據(jù)傳輸過程中的吞吐量:
[root@rac4 ~]# netperf -H 10.250.7.241 -l 60
MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.250.7.241 (10.250.7.241) port 0 AF_INET
Recv Send Send
Socket Socket Message Elapsed
Size Size Size Time Throughput
bytes bytes bytes secs. 10^6bits/sec
87380 16384 16384 60.12 826.89
從netperf測試的輸出結(jié)果,可以知道如下信息:
1)遠(yuǎn)端系統(tǒng)(即server)使用大小為87380字節(jié)的socket接收緩沖
2)本地系統(tǒng)(即client)使用大小為16384字節(jié)的socket發(fā)送緩沖
3)向遠(yuǎn)端系統(tǒng)發(fā)送的測試分組大小為16384字節(jié)
4)測試經(jīng)歷的時間為60秒
5)吞吐量的測試結(jié)果為826.89 Mbits/秒
在缺省情況下,netperf向發(fā)送的測試分組大小設(shè)置為本地系統(tǒng)所使用的socket發(fā)送緩沖大小。
對于有問題的網(wǎng)絡(luò),我們可以修改上面介紹的測試局部參數(shù),來判段是什么原因?qū)е戮W(wǎng)絡(luò)的吞吐量異常的!比如修改發(fā)送的包的大小來測試,來測試路由的緩存是否合適
[root@rac4 ~]# netperf -H 10.250.7.241 -l 20 -- -m 20480
MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.250.7.241 (10.250.7.241) port 0 AF_INET
Recv Send Send
Socket Socket Message Elapsed
Size Size Size Time Throughput
bytes bytes bytes secs. 10^6bits/sec
87380 16384 20480 20.00 787.26
[root@rac4 ~]# netperf -H 10.250.7.241 -l 20 -- -m 16384
MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.250.7.241 (10.250.7.241) port 0 AF_INET
Recv Send Send
Socket Socket Message Elapsed
Size Size Size Time Throughput
bytes bytes bytes secs. 10^6bits/sec
87380 16384 16384 20.00 998.21
[root@rac4 ~]# netperf -H 10.250.7.241 -l 20 -- -m 10240
MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.250.7.241 (10.250.7.241) port 0 AF_INET
Recv Send Send
Socket Socket Message Elapsed
Size Size Size Time Throughput
bytes bytes bytes secs. 10^6bits/sec
87380 16384 10240 20.01 785.19
從上面的例子看來,增大或者減小都會影響網(wǎng)絡(luò)的吞吐量!默認(rèn)的16384是最優(yōu)的(我的測試環(huán)境是同一網(wǎng)段下的兩臺VM,不具有代表性)
2.UDP_STREAM
UDP_STREAM用來測試進(jìn)行UDP批量傳輸時的網(wǎng)絡(luò)性能。注意:此時測試分組的大小不得大于socket的發(fā)送與接收緩沖大小,否則netperf會報(bào)出錯提示:
[root@rac4 ~]# netperf -t UDP_STREAM -H 10.250.7.241 -l 30 -- -m 262155
MIGRATED UDP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.250.7.241 (10.250.7.241) port 0 AF_INET
send_data: data send error: errno 90
netperf: send_omni: send_data failed: Message too long
我的測試環(huán)境socket 默認(rèn)的緩沖大小為262144bytes!
[root@rac3 ~]# netperf -t UDP_STREAM -H 10.250.7.220 -l 10
MIGRATED UDP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.250.7.220 (10.250.7.220) port 0 AF_INET
Socket Message Elapsed Messages
Size Size Time Okay Errors Throughput
bytes bytes secs # # 10^6bits/sec
262144 65507 10.00 28783 0 1508.00
262144 10.00 35376 1853.42
UDP_STREAM方式的結(jié)果中有兩行測試數(shù)據(jù):
第一行:本地系統(tǒng)的發(fā)送統(tǒng)計(jì),這里的吞吐量表示netperf向本地socket發(fā)送分組的能力。
第二行:遠(yuǎn)端系統(tǒng)的接收統(tǒng)計(jì)!從上面的結(jié)果可以看出10.250.7.220 和 本地的吞吐量是相近的!
在實(shí)際環(huán)境中,一般遠(yuǎn)端系統(tǒng)的socket緩沖大小不同于本地系統(tǒng)的socket緩沖區(qū)大小,而且由于UDP協(xié)議的不可靠性,遠(yuǎn)端系統(tǒng)的接收吞吐量要遠(yuǎn)遠(yuǎn)小于發(fā)送出去的吞吐量。
[root@rac4 ~]# netperf -t UDP_STREAM -H 10.250.7.241 -l 10
MIGRATED UDP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.250.7.241 (10.250.7.241) port 0 AF_INET
Socket Message Elapsed Messages
Size Size Time Okay Errors Throughput
bytes bytes secs # # 10^6bits/sec
262144 65507 10.00 42962 0 2251.09
262144 10.00 17866 936.13
接收的17866少于發(fā)送的42962,吞吐量也有較大出入!
2.2 測試請求/應(yīng)答(request/response)網(wǎng)絡(luò)流量的性能
另一類常見的網(wǎng)絡(luò)流量類型是應(yīng)用在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ā)生在同一個TCP連接中,這種模式常常出現(xiàn)在數(shù)據(jù)庫應(yīng)用中。數(shù)據(jù)庫的client程序與server程序建立一個TCP連接以后,就在這個連接中傳送數(shù)據(jù)庫的多次交易過程。
[root@rac3 ~]# netperf -t TCP_RR -H 10.250.7.220
MIGRATED TCP REQUEST/RESPONSE TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.250.7.220 (10.250.7.220) port 0 AF_INET : first burst 0
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 10481.21
16384 87380
第一行顯示本地系統(tǒng)的信息。
第二行顯示遠(yuǎn)端系統(tǒng)的信息。
平均的交易率(transaction rate)為 10481.21 次/秒。注意默認(rèn)情況下每次交易中的request和response分組的大小都為1個字節(jié),不具有實(shí)際意義。
我們可以通過測試相關(guān)的參數(shù)來改變request和response分組的大小,TCP_RR方式下的參數(shù)如下表所示:
參數(shù) 說明
-r req,resp 設(shè)置request和reponse分組的大小
-s size 設(shè)置本地系統(tǒng)的socket發(fā)送與接收緩沖大小
-S size 設(shè)置遠(yuǎn)端系統(tǒng)的socket發(fā)送與接收緩沖大小
-D 對本地與遠(yuǎn)端系統(tǒng)的socket設(shè)置TCP_NODELAY選項(xiàng)
通過使用-r參數(shù),我們可以進(jìn)行更有實(shí)際意義的測試:
[root@rac3 ~]# netperf -t TCP_RR -H 10.250.7.220 -- -r 64 64
MIGRATED TCP REQUEST/RESPONSE TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.250.7.220 (10.250.7.220) port 0 AF_INET : first burst 0
Local /Remote
Socket Size Request Resp. Elapsed Trans.
Send Recv Size Size Time Rate
bytes Bytes bytes bytes secs. per sec
16384 87380 64 64 10.00 10631.44
2.TCP_CRR
與TCP_RR不同,TCP_CRR為每次交易建立一個新的TCP連接。最典型的應(yīng)用就是HTTP,每次HTTP交易是在一條單獨(dú)的TCP連接中進(jìn)行的。因此,由于需要不停地建立新的TCP連接,并且在交易結(jié)束后拆除TCP連接,交易率一定會受到很大的影響。
[root@rac3 ~]# netperf -t TCP_CRR -H 10.250.7.220
MIGRATED TCP Connect/Request/Response TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.250.7.220 (10.250.7.220) port 0 AF_INET
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 2988.56 <===明顯減小!
16384 87380
3.UDP_RR
UDP_RR方式使用UDP分組進(jìn)行request/response的交易過程。由于沒有TCP連接所帶來的負(fù)擔(dān),所以交易率一定會有相應(yīng)的提升。
[root@rac3 ~]# netperf -t UDP_RR -H 10.250.7.220
MIGRATED UDP REQUEST/RESPONSE TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 10.250.7.220 (10.250.7.220) port 0 AF_INET : first burst 0
Local /Remote
Socket Size Request Resp. Elapsed Trans.
Send Recv Size Size Time Rate
bytes Bytes bytes bytes secs. per sec
262144 262144 1 1 10.00 97886.03 <===明顯上升!
262144 262144
三 參考資料:
QQ截圖20120107201506.jpg
QQ截圖20120107201537.jpg
QQ截圖20120107201552.jpg
QQ截圖20120107201407.jpg