轉載自:http://www.samirchen.com/linux-network-performance-test/網絡性能測試的幾項重要指標
1、可用性
測試網絡性能的第一步是確定網絡是否正常工作,最簡單的方法就是使用ping
命令,通過向遠端的機器發送ICMP請求,并等待接收ICMP回應,來判斷遠端的機器是否連通,網絡是否正常工作。
2、響應時間
ping
命令的ICMP報文響應一次往返所花費時間就是響應時間,有很多因素會影響到響應時間,如網段的負荷,網絡主機的負荷,廣播風暴,工作不正常的網絡設備等等。
3、網絡利用率
網絡利用率是指網絡被使用的時間占總時間(即被使用的時間+空閑的時間)的比例。例如,Ethernet雖然是共享的,但同時卻只能有一個報文在傳輸,因此在任一時刻,Ethernet或者是100%的利用率,或者是0%的利用率。計算一個網段的網絡利用率相對比較容易,但是確定一個網絡的利用率就比較復雜。因此,網絡測試工具一般使用網絡吞吐量和網絡帶寬容量來確定網絡中兩個節點之間的性能。
4、網絡吞吐量
網絡吞吐量是指在某個時刻,在網絡中的兩個節點之間,提供給網絡應用的剩余帶寬,通過網絡吞吐量可以尋找出網絡瓶頸。比如,即使client
和server
都被分別連接到各自的100M
以太網卡上,但是如果這兩個100M
的以太網卡被10M
的交換機連接起來,那么10M
的交換機就是網絡的瓶頸。
5、網絡帶寬容量
與網絡吞吐量不同,網絡帶寬容量指的是在網絡的兩個節點之間的最大可用帶寬,這是由組成網絡的設備能力所決定的。
使用iperf進行測試
iperf介紹
iperf是一個TCP/IP和UDP/IP性能測試工具,能夠提供網絡吞吐率信息,以及震動、丟包率、最大組和最大傳輸單元大小等統計信息,可以由這些信息來分析網絡的通信性能、定位網絡瓶頸。
iperf以client/server方式工作,服務器端和客戶端都使用同一程序iperf
,服務器端使用-s
選項,而客戶端則使用-c
選項。在 client與server之間,首先建立一個控制連接,傳遞有關測試配置的信息,以及測試的結果;在控制連接建立并傳遞了測試配置信息以后,client與server之間會再建立一個測試連接,用來回傳遞著特殊的流量模式,以測試網絡的性能。
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的使用
啟動server端:
[root@rh iperf-2.0.2]# cd /usr/iperf/bin
[root@rh bin]# ./iperf -s
還可以設置這些參數:
服務器端選項 | 環境變量選項 | 說明 |
---|
-s, --server | $IPERF_SERVER | 在服務器端運行 iperf; |
-D | . | 以后臺方式運行 iperf 服務模式; |
-R | . | 如果 iperf 正在運行,則將其終止運行; |
啟動client端:
用TCP的方式測試本機到192.168.0.138
主機(-c 192.168.0.138)
的網絡性能,時長為60
秒(-t 60)
,緩沖區的大小為8KB
(-l 8k)
,每10
秒(-i 10)
打印一次測試結果。
[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
還可以設置這些參數:
客戶端選項 | 環境變量選項 | 說明 |
---|
-b, --bandwidth | $IPERF_BANDWIDTH | 指定客戶端通過 UDP 協議發送信息的帶寬,默認值為 1Mbps; |
使用netperf進行測試
netperf介紹
netperf是一種網絡性能測量工具,主要針對基于TCP或UDP的傳輸。netperf根據應用的不同,可以進行不同模式的網絡性能測試,即批量數據傳輸(bulk data transfer)模式和請求/應答(request/response)模式。netperf反應的是一個系統能以多快的速度向另一個系統發送數據,以及另一個系統能以多快的速度接受數據。
netperf是以client/server的方式工作,server端是netserver,用來偵聽來自client 端的連接;client端是netperf,用來向server發起網絡測試。在client與server之間,首先建立一個控制連接,傳遞有關測試配置的信息,以及測試結果;在控制連接建立并傳遞了測試配置信息后,client與server之間會再建立一個測試連接,用來來回傳遞著特殊的流量模式,以測試網絡的性能。
netperf可以模擬三種不同的TCP流量模式:
- 單個TCP連接,批量(bulk)傳輸大量數據;
- 單個TCP連接,client請求/server應答的交易(transaction)方式;
- 多個TCP連接,每個連接中一對請求/應答的交易方式
netperf可以模擬兩種UDP的流量模式:
- 從client到server的單向批量傳輸;
- 請求/應答的交易方式。
由于UDP傳輸的不可靠性,在使用 netperf時要確保發送的緩沖區大小不大于接收緩沖區大小,否則數據會丟失,netperf將給出錯誤的結果。因此,對于接收到分組的統計不一定準確,需要結合發送分組的統計綜合得出結論。
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使用
啟動server端:
[root@rh netperf-2.6.0]# cd /usr/netperf/bin
[root@rh bin]# ./netserver
啟動client端:
1)TCP_STREAM
模式。進行TCP批量傳輸性能測試。這是netperf缺省情況。
批量數據傳輸典型的例子有FTP和其他類似的網絡應用(即一次傳輸整個文件)。根據使用傳輸協議的不同,批量數據傳輸又分為TCP批量傳輸和UDP批量傳輸。
用 TCP 批量傳輸的方式
(-t TCP_STREAM)
測試本機到 192.168.0.138
主機(-H 192.168.0.138)
的網絡性能,時長 60
秒(-l 60)
,每次發送本地發送測試分組的大小為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的輸出結果中,可以得到如下信息:
- 1)遠端系統(即 server)使用大小為 87380 字節的 socket 接收緩沖;
- 2)本地系統(即 client)使用大小為 16384 字節的 socket 發送緩沖;
- 3)向遠端系統發送的測試分組大小為 2048 字節,通過 -m 2048 設置;
- 4)測試經歷的時間為 60 秒;
- 5)吞吐量的測試結果為 5463.11 Mbps;
在缺省的情況下,netperf向遠端系統發送的測試分組大小會設置為本地系統所使用的 socket 發送緩沖大小。
還可以設置這些局部命令行參數:
客戶端選項 | 變量 | 說明 |
---|
-s | $size | 設置本地系統的 socket 發送與接收緩沖大小; |
-S | $size | 設置遠端系統的 socket 發送與接收緩沖大小; |
-m | $size | 設置本地系統發送測試分組的大小; |
-M | $size | 設置遠端系統接收測試分組的大小; |
-D | . | 對本地與遠端系統的 socket 設置 TCP_NODELAY 選項; |
通過修改以上的參數,并觀察測試結果的變化,可以確定是什么因素影響了連接的吞吐量。
例如,如果懷疑路由器由于缺乏足夠的緩沖區空間,使得轉發大的分組時存在問題,就可以改變測試分組的大小(-m)
,以觀察吞吐量的變化。如果當測試分組由較大變為較小,而吞吐量出現較大的變化(比如吞吐量變大),說明網絡中路由器確實存在緩沖區不足的問題。
2)UDP_STREAM
,進行 UDP 批量傳輸性能測試。
需要注意的是此時測試分組的大小不能大于 socket 發送與接收的緩沖區大小,否則 netperf 會報錯。
UDP_STREAM
方式使用與 TCP_STREAM
方式相同的局部命令行參數。
用 UDP 批量傳輸的方式
(-t UDP_STREAM)
測試本機到 192.168.0.138
主機(-H 192.168.0.138)
的網絡性能,時長 60
秒(-l 60)
,每次發送本地發送測試分組的大小為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
可以看到,最后結果有兩行,第一行數據顯示的是本地系統的發送統計,這里的吞吐量表示 netperf 向本地 socket 發送分組的能力。但是由于 UDP 是不可靠的傳輸協議,發送出去的分組數量不一定等于接收到的分組數量;第二行數據顯示的就是遠端系統接收的情況,這里看到接收到的數據小于發送的數據,即存在丟包的情況。遠端系統的接收吞吐量也小于本地發送吞吐量。
3)TCP_RR
,在一個 TCP 連接中進行多次 request 和 response 的交易過程的性能測試。
這種方式常出現在數據庫應用中,數據庫與客戶端程序建立一個 TCP 連接后,就在這個連接中傳遞數據庫的多次交易過程。
用 TCP_RR
的方式(-t TCP_RR)
測試本機到 192.168.0.138
主機(-H 192.168.0.138)
的網絡性能,時長 60
秒(-l 60)
,設置 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
這里的輸出結果有兩行,第一行數據顯示的是本地系統的信息,第二行數據顯示的遠端系統的信息。Trans. Rate per sec
是平均交易率。
通常增加 request/response 分組的大小會使得交易率下降。相對于實際的系統,這里的交易率的計算沒有充分考慮到交易過程中的應用程序處理時延,因此結果會高于實際情況。
還可以設置這些參數:
客戶端選項 | 變量 | 說明 |
---|
-r | $req,$resp | 設置 request 和 reponse 分組的大小; |
-s | $size | 設置本地系統的 socket 發送與接收緩沖大小; |
-S | $size | 設置遠端系統的 socket 發送與接收緩沖大小; |
-D | . | 對本地與遠端系統的 socket 設置 TCP_NODELAY 選項; |
4)TCP_CRR
,與 TCP_RR
的方式不同,TCP_CRR
為每次交易建立一個新的 TCP 連接。測試這種情況的網絡性能。
這種方式最典型的應用是 HTTP,每次 HTTP 交易是在一條單獨的 TCP 連接中進行的,這個過程需要不停地建立新的 TCP 連接,并在交易結束后結束 TCP 連接,交易率會受到較大影響。
用 TCP_CRR
的方式(-t TCP_CRR)
測試本機到 192.168.0.138
主機(-H 192.168.0.138)
的網絡性能,時長 60
秒(-l 60)
,設置 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
這里的輸出結果有兩行,第一行數據顯示的是本地系統的信息,第二行數據顯示的遠端系統的信息。Trans. Rate per sec
是平均交易率。
5)UDP_RR
,使用 UDP 分組進行 request 和 response 交易過程的性能測試。
用 UDP_RR
的方式(-t UDP_RR)
測試本機到 192.168.0.138
主機(-H 192.168.0.138)
的網絡性能,時長 60
秒(-l 60)
,設置 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
這里的輸出結果有兩行,第一行數據顯示的是本地系統的信息,第二行數據顯示的遠端系統的信息。Trans. Rate per sec
是平均交易率。
UDP_RR
方式使用 UDP 分組進行 request/response 的交易過程。由于沒喲 TCP 連接所帶來的負擔,所以交易率相對 TCP_RR
方式一般會有相應的提升。
但是如果出現了相反的結果,即交易率反而降低了,也不用太驚訝,因為這說明在網絡中,路由器或其他網絡設備對 UDP 采用了與 TCP 不同的緩沖區空間和處理技術。
其他注意事項
測試的時候,常常由于防火墻的原因造成網絡不能連接,這時候可以設置或關閉防火墻后再測試。關閉和啟動防火墻命令:
service iptables stop/start;
后記
常用的網絡性能測試工具除了 iperf、netperf,還有pathload、pathrate、DBS、tcptrace等工具。
本文參考:《網絡管理必備工具軟件精解(Linux版)》,作者:李波;楊紅,人民郵電出版社。