linux下Netperf使用詳解(轉發)


 首先下載 http://www.netperf.org/netperf/DownloadNetperf.html
 

安裝:

 tar zxf … && cd xxx
./configure –prefix=/tools/netperf-2.4.1 && make && make install
手冊 http://www.netperf.org/svn/netperf2/tags/netperf-2.4.3/doc/netperf.html

服務器端啟動方法 /tools/netperf-2.4.1/bin/netserver
通過客戶端測試
測試批量(bulk)網絡流量的性能
批量數據傳輸典型的例子有ftp和其它類似的網絡應用(即一次傳輸整個文件)。根據使用傳輸協議的不同,批量數據傳輸又分為TCP批量傳輸和UDP批量傳輸。

1. TCP_STREAM
/tools/netperf-2.4.1/bin/netperf -H 192.168.0.108 -l 60 [-t TCP_STREAM]
TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.0.108 (192.168.0.108) 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.01 88.91
從netperf的結果輸出中,我們可以知道以下的一些信息:
1) 遠端系統(即server)使用大小為87380字節的socket接收緩沖
2) 本地系統(即client)使用大小為16384字節的socket發送緩沖
3) 向遠端系統發送的測試分組大小為16384字節
4) 測試經歷的時間為60.01秒
5) 吞吐量的測試結果為88.91Mbits/秒
在缺省情況下,netperf向發送的測試分組大小設置為本地系統所使用的socket發送緩沖大小。
TCP_STREAM方式下與測試相關的局部參數如下表所示:
參數 說明
-s size 設置本地系統的socket發送與接收緩沖大小
-S size 設置遠端系統的socket發送與接收緩沖大小
-m size 設置本地系統發送測試分組的大小
-M size 設置遠端系統接收測試分組的大小
-D 對本地與遠端系統的socket設置TCP_NODELAY選項
通過修改以上的參數,並觀察結果的變化,我們可以確定是什么因素影響了連接的吞吐量。例如,如果懷疑路由器由於缺乏足夠的緩沖區空間,使得轉發大的分組時存在問題,就可以增加測試分組(-m)的大小,以觀察吞吐量的變化:
./netperf -H 192.168.0.108 -l 60 — -m 2048
TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.0.108 (192.168.0.108) 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.01 90.20
在這里,測試分組的大小減少到2048字節,而吞吐量卻沒有很大的變化(與前面例子中測試分組大小為16K字節相比)。相反,如果吞吐量有了較大的提升,則說明在網絡中間的路由器確實存在緩沖區的問題。

2. UDP_STREAM
/tools/netperf-2.4.1/bin/netperf -H 192.168.0.108 -l 60 -t UDP_STREAM
UDP UNIDIRECTIONAL SEND TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.0.108 (192.168.0.108) port 0 AF_INET
Socket Message Elapsed Messages
Size Size Time Okay Errors Throughput
bytes bytes secs # # 10^6bits/sec
108544 65507 60.00 10998 0 96.06
262144 60.00 3809 33.27
UDP_STREAM方式的結果中有兩行測試數據,第一行顯示的是本地系統的發送統計,這里的吞吐量表示netperf向本地socket發送分組的能力。第二行顯示的就是遠端系統接收的情況

測試請求/應答(request/response)網絡流量的性能
另一類常見的網絡流量類型是應用在client/server結構中的request/response模式。在每次交易(transaction)中,client向server發出小的查詢分組,server接收到請求,經處理后返回大的結果數據。

1. TCP_RR
TCP_RR方式的測試對象是多次TCP request和response的交易過程,但是它們發生在同一個TCP連接中,這種模式常常出現在數據庫應用中。數據庫的client程序與server程序建立一個TCP連接以后,就在這個連接中傳送數據庫的多次交易過程。
/tools/netperf-2.4.1/bin/netperf -H 192.168.0.108 -t TCP_RR
TCP REQUEST/RESPONSE TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.0.108 (192.168.0.108) 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 3328.91
16384 87380
Netperf輸出的結果也是由兩行組成。第一行顯示本地系統的情況,第二行顯示的是遠端系統的信息。平均的交易率(transaction rate)為3328.91次/秒。注意到這里每次交易中的request和response分組的大小都為1個字節,不具有很大的實際意義。用戶可以通過測試相關的參數來改變request和response分組的大小,TCP_RR方式下的參數如下表所示:
參數 說明
-r req,resp 設置request和reponse分組的大小
-s size 設置本地系統的socket發送與接收緩沖大小
-S size 設置遠端系統的socket發送與接收緩沖大小
-D 對本地與遠端系統的socket設置TCP_NODELAY選項

-H host :指定遠端運行netserver的server IP地址。 -l testlen:指定測試的時間長度(秒) -t testname:指定進行的測試類型,包括TCP_STREAM,UDP_STREAM,TCP_RR,TCP_CRR,UDP_RR -s size 設置本地系統的socket發送與接收緩沖大小 -S size 設置遠端系統的socket發送與接收緩沖大小 -m size 設置本地系統發送測試分組的大小 -M size 設置遠端系統接收測試分組的大小 -D 對本地與遠端系統的socket設置TCP_NODELAY選項


通過使用-r參數,我們可以進行更有實際意義的測試:
/tools/netperf-2.4.1/bin/netperf -H 192.168.0.108 -t TCP_RR — -r 32,1024
TCP REQUEST/RESPONSE TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.0.108 (192.168.0.108) 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 32 1024 10.00 1108.21
16384 87380

2. TCP_CRR
與TCP_RR不同,TCP_CRR為每次交易建立一個新的TCP連接。最典型的應用就是HTTP,每次HTTP交易是在一條單獨的TCP連接中進行的。因此,由於需要不停地建立新的TCP連接,並且在交易結束后拆除TCP連接,交易率一定會受到很大的影響。
/tools/netperf-2.4.1/bin/netperf -H 192.168.0.108 -t TCP_CRR — -r 32,1024
TCP Connect/Request/Response TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.0.108 (192.168.0.108) 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 32 1024 10.00 793.08
16384 87380
交易率也明顯的降低了,只有793.08次/秒。
3. UDP_RR
UDP_RR方式使用UDP分組進行request/response的交易過程。沒有TCP連接所帶來的負擔
/tools/netperf-2.4.1/bin/netperf -H 192.168.0.108 -t UDP_RR — -r 32,1024
UDP REQUEST/RESPONSE TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.0.108 (192.168.0.108) 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
108544 108544 32 1024 10.00 1139.40
262144 262144
#可能會受到網絡中路由器或其它的網絡設備對UDP采用了與TCP不同的緩沖區空間和處理技術影響,正常情況下會高於TCP_RR的值

本文首先介紹網絡性能測量的一些基本概念和方法,然后結合 netperf 工具的使用,具體的討論如何測試不同情況下的網絡性能。

在構建或管理一個網絡系統時,我們更多的是關心網絡的可用性,即網絡是否連通,而對於其整體的性能往往考慮不多,或者即使考慮到性能的問題,但是卻發現沒有合適的手段去測試網絡的性能。

當開發出一個網絡應用程序后,我們會發現,在實際的網絡環境使用中,網絡應用程序的使用效果不是很理想,問題可能出現在程序的開發上面,也有可能由於實際的網絡環境中存在着瓶頸。面對這種問題,程序員一般會一籌莫展,原因就在於不掌握一些網絡性能測量的工具。

在本文中,首先介紹網絡性能測量的一些基本概念和方法,然后結合 netperf 工具的使用,具體的討論如何測試不同情況下的網絡性能。

網絡性能測試概述

網絡性能測量的五項指標

測量網絡性能的五項指標是:

  • 可用性(availability)

  • 響應時間(response time)

  • 網絡利用率(network utilization)

  • 網絡吞吐量(network throughput)

  • 網絡帶寬容量(network bandwidth capacity)

1. 可用性

測試網絡性能的第一步是確定網絡是否正常工作,最簡單的方法是使用 ping 命令。通過向遠端的機器發送 icmp echo request,並等待接收 icmp echo reply 來判斷遠端的機器是否連通,網絡是否正常工作。

Ping 命令有非常豐富的命令選項,比如 -c 可以指定發送 echo request 的個數,-s 可以指定每次發送的 ping 包大小。

網絡設備內部一般有多個緩沖池,不同的緩沖池使用不同的緩沖區大小,分別用來處理不同大小的分組(packet)。例如交換機中通常具有三種類型的包緩 沖:一類針對小的分組,一類針對中等大小的分組,還有一類針對大的分組。為了測試這樣的網絡設備,測試工具必須要具有發送不同大小分組的能力。Ping 命令的 -s 就可以使用在這種場合。

2. 響應時間

Ping 命令的 echo request/reply 一次往返所花費時間就是響應時間。有很多因素會影響到響應時間,如網段的負荷,網絡主機的負荷,廣播風暴,工作不正常的網絡設備等等。

在網絡工作正常時,記錄下正常的響應時間。當用戶抱怨網絡的反應時間慢時,就可以將現在的響應時間與正常的響應時間對比,如果兩者差值的波動很大,就能說明網絡設備存在故障。

3. 網絡利用率

網絡利用率是指網絡被使用的時間占總時間(即被使用的時間+空閑的時間)的比例。比如,Ethernet 雖然是共享的,但同時卻只能有一個報文在傳輸。因此在任一時刻,Ethernet 或者是 100% 的利用率,或者是 0% 的利用率。

計算一個網段的網絡利用率相對比較容易,但是確定一個網絡的利用率就比較復雜。因此,網絡測試工具一般使用網絡吞吐量和網絡帶寬容量來確定網絡中兩個節點之間的性能。

4. 網絡吞吐量

網絡吞吐量是指在某個時刻,在網絡中的兩個節點之間,提供給網絡應用的剩余帶寬。

網絡吞吐量可以幫組尋找網絡路徑中的瓶頸。比如,即使 client 和 server 都被分別連接到各自的 100M Ethernet 上,但是如果這兩個 100M 的Ethernet 被 10M 的 Ethernet 連接起來,那么 10M 的 Ethernet 就是網絡的瓶頸。

網絡吞吐量非常依賴於當前的網絡負載情況。因此,為了得到正確的網絡吞吐量,最好在不同時間(一天中的不同時刻,或者一周中不同的天)分別進行測試,只有這樣才能得到對網絡吞吐量的全面認識。

有些網絡應用程序在開發過程的測試中能夠正常運行,但是到實際的網絡環境中卻無法正常工作(由於沒有足夠的網絡吞吐量)。這是因為測試只是在空閑的網絡環境中,沒有考慮到實際的網絡環境中還存在着其它的各種網絡流量。所以,網絡吞吐量定義為剩余帶寬是有實際意義的。

5. 網絡帶寬容量

與網絡吞吐量不同,網絡帶寬容量指的是在網絡的兩個節點之間的最大可用帶寬。這是由組成網絡的設備的能力所決定的。

測試網絡帶寬容量有兩個困難之處:在網絡存在其它網絡流量的時候,如何得知網絡的最大可用帶寬;在測試過程中,如何對現有的網絡流量不造成影響。網絡測試工具一般采用 packet pairs 和 packet trains 技術來克服這樣的困難。

收集網絡性能數據的方式

當確定了網絡性能的測試指標以后,就需要使用網絡測試工具收集相應的性能數據,分別有三種從網絡獲取數據的方式:

1. 通過snmp協議直接到網絡設備中獲取,如net-snmp工具

2. 偵聽相關的網絡性能數據,典型的工具是tcpdump

3. 自行產生相應的測試數據,如本文中使用的netperf工具

 

 

netperf --help

[root@xiesshavip001 ~]# netperf --help netperf: invalid option -- '-' 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM