轉(zhuǎn)載自:http://www.samirchen.com/linux-network-performance-test/網(wǎng)絡(luò)性能測(cè)試的幾項(xiàng)重要指標(biāo)
1、可用性
測(cè)試網(wǎng)絡(luò)性能的第一步是確定網(wǎng)絡(luò)是否正常工作,最簡(jiǎn)單的方法就是使用ping
命令,通過(guò)向遠(yuǎn)端的機(jī)器發(fā)送ICMP請(qǐng)求,并等待接收ICMP回應(yīng),來(lái)判斷遠(yuǎn)端的機(jī)器是否連通,網(wǎng)絡(luò)是否正常工作。
2、響應(yīng)時(shí)間
ping
命令的ICMP報(bào)文響應(yīng)一次往返所花費(fèi)時(shí)間就是響應(yīng)時(shí)間,有很多因素會(huì)影響到響應(yīng)時(shí)間,如網(wǎng)段的負(fù)荷,網(wǎng)絡(luò)主機(jī)的負(fù)荷,廣播風(fēng)暴,工作不正常的網(wǎng)絡(luò)設(shè)備等等。
3、網(wǎng)絡(luò)利用率
網(wǎng)絡(luò)利用率是指網(wǎng)絡(luò)被使用的時(shí)間占總時(shí)間(即被使用的時(shí)間+空閑的時(shí)間)的比例。例如,Ethernet雖然是共享的,但同時(shí)卻只能有一個(gè)報(bào)文在傳輸,因此在任一時(shí)刻,Ethernet或者是100%的利用率,或者是0%的利用率。計(jì)算一個(gè)網(wǎng)段的網(wǎng)絡(luò)利用率相對(duì)比較容易,但是確定一個(gè)網(wǎng)絡(luò)的利用率就比較復(fù)雜。因此,網(wǎng)絡(luò)測(cè)試工具一般使用網(wǎng)絡(luò)吞吐量和網(wǎng)絡(luò)帶寬容量來(lái)確定網(wǎng)絡(luò)中兩個(gè)節(jié)點(diǎn)之間的性能。
4、網(wǎng)絡(luò)吞吐量
網(wǎng)絡(luò)吞吐量是指在某個(gè)時(shí)刻,在網(wǎng)絡(luò)中的兩個(gè)節(jié)點(diǎn)之間,提供給網(wǎng)絡(luò)應(yīng)用的剩余帶寬,通過(guò)網(wǎng)絡(luò)吞吐量可以尋找出網(wǎng)絡(luò)瓶頸。比如,即使client
和server
都被分別連接到各自的100M
以太網(wǎng)卡上,但是如果這兩個(gè)100M
的以太網(wǎng)卡被10M
的交換機(jī)連接起來(lái),那么10M
的交換機(jī)就是網(wǎng)絡(luò)的瓶頸。
5、網(wǎng)絡(luò)帶寬容量
與網(wǎng)絡(luò)吞吐量不同,網(wǎng)絡(luò)帶寬容量指的是在網(wǎng)絡(luò)的兩個(gè)節(jié)點(diǎn)之間的最大可用帶寬,這是由組成網(wǎng)絡(luò)的設(shè)備能力所決定的。
使用iperf進(jìn)行測(cè)試
iperf介紹
iperf是一個(gè)TCP/IP和UDP/IP性能測(cè)試工具,能夠提供網(wǎng)絡(luò)吞吐率信息,以及震動(dòng)、丟包率、最大組和最大傳輸單元大小等統(tǒng)計(jì)信息,可以由這些信息來(lái)分析網(wǎng)絡(luò)的通信性能、定位網(wǎng)絡(luò)瓶頸。
iperf以client/server方式工作,服務(wù)器端和客戶端都使用同一程序iperf
,服務(wù)器端使用-s
選項(xiàng),而客戶端則使用-c
選項(xiàng)。在 client與server之間,首先建立一個(gè)控制連接,傳遞有關(guān)測(cè)試配置的信息,以及測(cè)試的結(jié)果;在控制連接建立并傳遞了測(cè)試配置信息以后,client與server之間會(huì)再建立一個(gè)測(cè)試連接,用來(lái)回傳遞著特殊的流量模式,以測(cè)試網(wǎng)絡(luò)的性能。
iperf獲取與安裝
下載地址:http://iperf.sourceforge.net/
配置與安裝:
[root@rh tool]# tar -zxvf iperf-2.0.2.tar.gz
[root@rh tool]# cd iperf-2.0.2
[root@rh iperf-2.0.2]# ./configure --prefix=/usr/netperf
[root@rh iperf-2.0.2]# make
[root@rh iperf-2.0.2]# make install
[root@rh iperf-2.0.2]# ls /usr/netperf
iperf的使用
啟動(dòng)server端:
[root@rh iperf-2.0.2]# cd /usr/iperf/bin
[root@rh bin]# ./iperf -s
還可以設(shè)置這些參數(shù):
服務(wù)器端選項(xiàng) | 環(huán)境變量選項(xiàng) | 說(shuō)明 |
---|
-s, --server | $IPERF_SERVER | 在服務(wù)器端運(yùn)行 iperf; |
-D | . | 以后臺(tái)方式運(yùn)行 iperf 服務(wù)模式; |
-R | . | 如果 iperf 正在運(yùn)行,則將其終止運(yùn)行; |
啟動(dòng)client端:
用TCP的方式測(cè)試本機(jī)到192.168.0.138
主機(jī)(-c 192.168.0.138)
的網(wǎng)絡(luò)性能,時(shí)長(zhǎng)為60
秒(-t 60)
,緩沖區(qū)的大小為8KB
(-l 8k)
,每10
秒(-i 10)
打印一次測(cè)試結(jié)果。
[root@rh iperf-2.0.2]# cd /usr/iperf/bin
[root@rh bin]# ./iperf -c 192.168.0.138 -t 60 -l 8k -i 10
------------------------------------------------------------
Client connecting to 192.168.0.138, TCP port 5001
TCP window size: 23.2 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.0.137 port 42812 connected with 192.168.0.138 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 1.64 GBytes 1.41 Gbits/sec
[ 3] 10.0-20.0 sec 5.26 GBytes 4.52 Gbits/sec
[ 3] 20.0-30.0 sec 5.26 GBytes 4.52 Gbits/sec
[ 3] 30.0-40.0 sec 5.27 GBytes 4.53 Gbits/sec
[ 3] 40.0-50.0 sec 5.26 GBytes 4.51 Gbits/sec
[ 3] 50.0-60.0 sec 5.26 GBytes 4.52 Gbits/sec
[ 3] 0.0-60.0 sec 27.9 GBytes 4.00 Gbits/sec
還可以設(shè)置這些參數(shù):
客戶端選項(xiàng) | 環(huán)境變量選項(xiàng) | 說(shuō)明 |
---|
-b, --bandwidth | $IPERF_BANDWIDTH | 指定客戶端通過(guò) UDP 協(xié)議發(fā)送信息的帶寬,默認(rèn)值為 1Mbps; |
使用netperf進(jìn)行測(cè)試
netperf介紹
netperf是一種網(wǎng)絡(luò)性能測(cè)量工具,主要針對(duì)基于TCP或UDP的傳輸。netperf根據(jù)應(yīng)用的不同,可以進(jìn)行不同模式的網(wǎng)絡(luò)性能測(cè)試,即批量數(shù)據(jù)傳輸(bulk data transfer)模式和請(qǐng)求/應(yīng)答(request/response)模式。netperf反應(yīng)的是一個(gè)系統(tǒng)能以多快的速度向另一個(gè)系統(tǒng)發(fā)送數(shù)據(jù),以及另一個(gè)系統(tǒng)能以多快的速度接受數(shù)據(jù)。
netperf是以client/server的方式工作,server端是netserver,用來(lái)偵聽(tīng)來(lái)自client 端的連接;client端是netperf,用來(lái)向server發(fā)起網(wǎng)絡(luò)測(cè)試。在client與server之間,首先建立一個(gè)控制連接,傳遞有關(guān)測(cè)試配置的信息,以及測(cè)試結(jié)果;在控制連接建立并傳遞了測(cè)試配置信息后,client與server之間會(huì)再建立一個(gè)測(cè)試連接,用來(lái)來(lái)回傳遞著特殊的流量模式,以測(cè)試網(wǎng)絡(luò)的性能。
netperf可以模擬三種不同的TCP流量模式:
- 單個(gè)TCP連接,批量(bulk)傳輸大量數(shù)據(jù);
- 單個(gè)TCP連接,client請(qǐng)求/server應(yīng)答的交易(transaction)方式;
- 多個(gè)TCP連接,每個(gè)連接中一對(duì)請(qǐng)求/應(yīng)答的交易方式
netperf可以模擬兩種UDP的流量模式:
- 從client到server的單向批量傳輸;
- 請(qǐng)求/應(yīng)答的交易方式。
由于UDP傳輸?shù)牟豢煽啃?,在使?nbsp;netperf時(shí)要確保發(fā)送的緩沖區(qū)大小不大于接收緩沖區(qū)大小,否則數(shù)據(jù)會(huì)丟失,netperf將給出錯(cuò)誤的結(jié)果。因此,對(duì)于接收到分組的統(tǒng)計(jì)不一定準(zhǔn)確,需要結(jié)合發(fā)送分組的統(tǒng)計(jì)綜合得出結(jié)論。
netperf獲取與安裝
下載地址:http://www.netperf.org/netperf/
配置與安裝:
[root@rh tool]# tar -zxvf netperf-2.6.0.tar.gz
[root@rh tool]# cd netperf-2.6.0
[root@rh netperf-2.6.0]# ./configure --prefix /usr/netperf
[root@rh netperf-2.6.0]# make
[root@rh netperf-2.6.0]# make check
[root@rh netperf-2.6.0]# make install
[root@rh netperf-2.6.0]# ls /usr/netperf
netperf使用
啟動(dòng)server端:
[root@rh netperf-2.6.0]# cd /usr/netperf/bin
[root@rh bin]# ./netserver
啟動(dòng)client端:
1)TCP_STREAM
模式。進(jìn)行TCP批量傳輸性能測(cè)試。這是netperf缺省情況。
批量數(shù)據(jù)傳輸?shù)湫偷睦佑蠪TP和其他類似的網(wǎng)絡(luò)應(yīng)用(即一次傳輸整個(gè)文件)。根據(jù)使用傳輸協(xié)議的不同,批量數(shù)據(jù)傳輸又分為TCP批量傳輸和UDP批量傳輸。
用 TCP 批量傳輸?shù)姆绞?/code> (-t TCP_STREAM)
測(cè)試本機(jī)到 192.168.0.138
主機(jī)(-H 192.168.0.138)
的網(wǎng)絡(luò)性能,時(shí)長(zhǎng) 60
秒(-l 60)
,每次發(fā)送本地發(fā)送測(cè)試分組的大小為2048Bytes
(-m 2048)
。
[root@rh netperf-2.6.0]# cd /usr/netperf/bin
[root@rh bin]# ./netperf -t TCP_STREAM -H 192.168.0.138 -l 60 -- -m 2048
MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.0.138 () 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 2048 60.00 5463.11
從上面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ā)送的測(cè)試分組大小為 2048 字節(jié),通過(guò) -m 2048 設(shè)置;
- 4)測(cè)試經(jīng)歷的時(shí)間為 60 秒;
- 5)吞吐量的測(cè)試結(jié)果為 5463.11 Mbps;
在缺省的情況下,netperf向遠(yuǎn)端系統(tǒng)發(fā)送的測(cè)試分組大小會(huì)設(shè)置為本地系統(tǒng)所使用的 socket 發(fā)送緩沖大小。
還可以設(shè)置這些局部命令行參數(shù):
客戶端選項(xiàng) | 變量 | 說(shuō)明 |
---|
-s | $size | 設(shè)置本地系統(tǒng)的 socket 發(fā)送與接收緩沖大?。?/td> |
-S | $size | 設(shè)置遠(yuǎn)端系統(tǒng)的 socket 發(fā)送與接收緩沖大小; |
-m | $size | 設(shè)置本地系統(tǒng)發(fā)送測(cè)試分組的大小; |
-M | $size | 設(shè)置遠(yuǎn)端系統(tǒng)接收測(cè)試分組的大小; |
-D | . | 對(duì)本地與遠(yuǎn)端系統(tǒng)的 socket 設(shè)置 TCP_NODELAY 選項(xiàng); |
通過(guò)修改以上的參數(shù),并觀察測(cè)試結(jié)果的變化,可以確定是什么因素影響了連接的吞吐量。
例如,如果懷疑路由器由于缺乏足夠的緩沖區(qū)空間,使得轉(zhuǎn)發(fā)大的分組時(shí)存在問(wèn)題,就可以改變測(cè)試分組的大小(-m)
,以觀察吞吐量的變化。如果當(dāng)測(cè)試分組由較大變?yōu)檩^小,而吞吐量出現(xiàn)較大的變化(比如吞吐量變大),說(shuō)明網(wǎng)絡(luò)中路由器確實(shí)存在緩沖區(qū)不足的問(wèn)題。
2)UDP_STREAM
,進(jìn)行 UDP 批量傳輸性能測(cè)試。
需要注意的是此時(shí)測(cè)試分組的大小不能大于 socket 發(fā)送與接收的緩沖區(qū)大小,否則 netperf 會(huì)報(bào)錯(cuò)。
UDP_STREAM
方式使用與 TCP_STREAM
方式相同的局部命令行參數(shù)。
用 UDP 批量傳輸?shù)姆绞?/code> (-t UDP_STREAM)
測(cè)試本機(jī)到 192.168.0.138
主機(jī)(-H 192.168.0.138)
的網(wǎng)絡(luò)性能,時(shí)長(zhǎng) 60
秒(-l 60)
,每次發(fā)送本地發(fā)送測(cè)試分組的大小為2048Bytes
(-m 2048)
。
[root@rh netperf-2.6.0]# cd /usr/netperf/bin
[root@rh bin]# ./netperf -t UDP_STREAM -H 192.168.0.138 -l 60 -- -m 2048
MIGRATED UDP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.0.138 () port 0 AF_INET
Socket Message Elapsed Messages
Size Size Time Okay Errors Throughput
bytes bytes secs # # 10^6bits/sec
229376 2048 60.00 11159606 0 3047.29
229376 60.00 11115165 3035.15
可以看到,最后結(jié)果有兩行,第一行數(shù)據(jù)顯示的是本地系統(tǒng)的發(fā)送統(tǒng)計(jì),這里的吞吐量表示 netperf 向本地 socket 發(fā)送分組的能力。但是由于 UDP 是不可靠的傳輸協(xié)議,發(fā)送出去的分組數(shù)量不一定等于接收到的分組數(shù)量;第二行數(shù)據(jù)顯示的就是遠(yuǎn)端系統(tǒng)接收的情況,這里看到接收到的數(shù)據(jù)小于發(fā)送的數(shù)據(jù),即存在丟包的情況。遠(yuǎn)端系統(tǒng)的接收吞吐量也小于本地發(fā)送吞吐量。
3)TCP_RR
,在一個(gè) TCP 連接中進(jìn)行多次 request 和 response 的交易過(guò)程的性能測(cè)試。
這種方式常出現(xiàn)在數(shù)據(jù)庫(kù)應(yīng)用中,數(shù)據(jù)庫(kù)與客戶端程序建立一個(gè) TCP 連接后,就在這個(gè)連接中傳遞數(shù)據(jù)庫(kù)的多次交易過(guò)程。
用 TCP_RR
的方式(-t TCP_RR)
測(cè)試本機(jī)到 192.168.0.138
主機(jī)(-H 192.168.0.138)
的網(wǎng)絡(luò)性能,時(shí)長(zhǎng) 60
秒(-l 60)
,設(shè)置 request 分組大小為 64Bytes
,response 分組大小1024Bytes
。
[root@rh netperf-2.6.0]# cd /usr/netperf/bin
[root@rh bin]# ./netperf -t TCP_RR -H 192.168.0.138 -l 60 -- -r 64,1024
MIGRATED TCP REQUEST/RESPONSE TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.0.138 () 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 1024 60.00 9194.92
16384 87380
這里的輸出結(jié)果有兩行,第一行數(shù)據(jù)顯示的是本地系統(tǒng)的信息,第二行數(shù)據(jù)顯示的遠(yuǎn)端系統(tǒng)的信息。Trans. Rate per sec
是平均交易率。
通常增加 request/response 分組的大小會(huì)使得交易率下降。相對(duì)于實(shí)際的系統(tǒng),這里的交易率的計(jì)算沒(méi)有充分考慮到交易過(guò)程中的應(yīng)用程序處理時(shí)延,因此結(jié)果會(huì)高于實(shí)際情況。
還可以設(shè)置這些參數(shù):
客戶端選項(xiàng) | 變量 | 說(shuō)明 |
---|
-r | $req,$resp | 設(shè)置 request 和 reponse 分組的大??; |
-s | $size | 設(shè)置本地系統(tǒng)的 socket 發(fā)送與接收緩沖大??; |
-S | $size | 設(shè)置遠(yuǎn)端系統(tǒng)的 socket 發(fā)送與接收緩沖大小; |
-D | . | 對(duì)本地與遠(yuǎn)端系統(tǒng)的 socket 設(shè)置 TCP_NODELAY 選項(xiàng); |
4)TCP_CRR
,與 TCP_RR
的方式不同,TCP_CRR
為每次交易建立一個(gè)新的 TCP 連接。測(cè)試這種情況的網(wǎng)絡(luò)性能。
這種方式最典型的應(yīng)用是 HTTP,每次 HTTP 交易是在一條單獨(dú)的 TCP 連接中進(jìn)行的,這個(gè)過(guò)程需要不停地建立新的 TCP 連接,并在交易結(jié)束后結(jié)束 TCP 連接,交易率會(huì)受到較大影響。
用 TCP_CRR
的方式(-t TCP_CRR)
測(cè)試本機(jī)到 192.168.0.138
主機(jī)(-H 192.168.0.138)
的網(wǎng)絡(luò)性能,時(shí)長(zhǎng) 60
秒(-l 60)
,設(shè)置 request 分組大小為 64Bytes
,response 分組大小 1024Bytes
。
[root@rh netperf-2.6.0]# cd /usr/netperf/bin
[root@rh bin]# ./netperf -t TCP_CRR -H 192.168.0.138 -l 60 -- -r 64,1024
MIGRATED TCP Connect/Request/Response TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.0.138 () 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 64 1024 60.00 2728.00
16384 87380
這里的輸出結(jié)果有兩行,第一行數(shù)據(jù)顯示的是本地系統(tǒng)的信息,第二行數(shù)據(jù)顯示的遠(yuǎn)端系統(tǒng)的信息。Trans. Rate per sec
是平均交易率。
5)UDP_RR
,使用 UDP 分組進(jìn)行 request 和 response 交易過(guò)程的性能測(cè)試。
用 UDP_RR
的方式(-t UDP_RR)
測(cè)試本機(jī)到 192.168.0.138
主機(jī)(-H 192.168.0.138)
的網(wǎng)絡(luò)性能,時(shí)長(zhǎng) 60
秒(-l 60)
,設(shè)置 request 分組大小為 64Bytes
,response 分組大小1024Bytes
。
[root@rh netperf-2.6.0]# cd /usr/netperf/bin
[root@rh bin]# ./netperf -t UDP_RR -H 192.168.0.138 -l 60 -- -r 64,1024
MIGRATED UDP REQUEST/RESPONSE TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.0.138 () 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
229376 229376 64 1024 60.00 10635.03
229376 229376
這里的輸出結(jié)果有兩行,第一行數(shù)據(jù)顯示的是本地系統(tǒng)的信息,第二行數(shù)據(jù)顯示的遠(yuǎn)端系統(tǒng)的信息。Trans. Rate per sec
是平均交易率。
UDP_RR
方式使用 UDP 分組進(jìn)行 request/response 的交易過(guò)程。由于沒(méi)喲 TCP 連接所帶來(lái)的負(fù)擔(dān),所以交易率相對(duì) TCP_RR
方式一般會(huì)有相應(yīng)的提升。
但是如果出現(xiàn)了相反的結(jié)果,即交易率反而降低了,也不用太驚訝,因?yàn)檫@說(shuō)明在網(wǎng)絡(luò)中,路由器或其他網(wǎng)絡(luò)設(shè)備對(duì) UDP 采用了與 TCP 不同的緩沖區(qū)空間和處理技術(shù)。
其他注意事項(xiàng)
測(cè)試的時(shí)候,常常由于防火墻的原因造成網(wǎng)絡(luò)不能連接,這時(shí)候可以設(shè)置或關(guān)閉防火墻后再測(cè)試。關(guān)閉和啟動(dòng)防火墻命令:
service iptables stop/start;
后記
常用的網(wǎng)絡(luò)性能測(cè)試工具除了 iperf、netperf,還有pathload、pathrate、DBS、tcptrace等工具。
本文參考:《網(wǎng)絡(luò)管理必備工具軟件精解(Linux版)》,作者:李波;楊紅,人民郵電出版社。