網路效能的測量工具netperf

renjixinchina發表於2014-02-24

安裝

下載 netperf

unzip netperf-2.6.0.zip

cd netperf-2.6.0

./configure

Make

Make install

命令列引數

netperf [global options]-- [test-specific options]

這裡我們只解釋那些常用的命令列引數,其它的引數讀者可以查詢netperfman手冊。

-H host :指定遠端執行netserverserver IP地址。

-l testlen:指定測試的時間長度(秒)

-t testname:指定進行的測試型別,包括TCP_STREAMUDP_STREAMTCP_RRTCP_CRRUDP_RR,在下文中分別對它們說明。

在後面的測試中,netserver執行在192.168.0.28serverclient透過區域網連線(100M Hub)。

Netperf測試網路效能

測試批次(bulk)網路流量的效能

批次資料傳輸典型的例子有ftp和其它類似的網路應用(即一次傳輸整個檔案)。根據使用傳輸協議的不同,批次資料傳輸又分為TCP批次傳輸和UDP批次傳輸。

1 TCP_STREAM

Netperf預設情況下進行TCP批次傳輸,即-t TCP_STREAM。測試過程中,netperfnetserver傳送批次的TCP資料分組,以確定資料傳輸過程中的吞吐量:

 ./netperf -H 192.168.0.28 -l 60

TCP STREAM TEST to 192.168.0.28

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的結果輸出中,我們可以知道以下的一些資訊:

1 遠端系統(即server)使用大小為87380位元組的socket接收緩衝

2 本地系統(即client)使用大小為16384位元組的socket傳送緩衝

3 向遠端系統傳送的測試分組大小為16384位元組

4 測試經歷的時間為60

5 吞吐量的測試結果為88Mbits/

在預設情況下,netperf向傳送的測試分組大小設定為本地系統所使用的socket傳送緩衝大小。

TCP_STREAM方式下與測試相關的區域性引數如下表所示:

引數

說明

-s size

設定本地系統的socket傳送與接收緩衝大小

-S size

設定遠端系統的socket傳送與接收緩衝大小

-m size

設定本地系統傳送測試分組的大小

-M size

設定遠端系統接收測試分組的大小

-D

對本地與遠端系統的socket設定TCP_NODELAY選項

透過修改以上的引數,並觀察結果的變化,我們可以確定是什麼因素影響了連線的吞吐量。例如,如果懷疑路由器由於缺乏足夠的緩衝區空間,使得轉發大的分組時存在問題,就可以增加測試分組(-m)的大小,以觀察吞吐量的變化:

 ./netperf -H 192.168.0.28 -l 60 -- -m 2048

TCP STREAM TEST to 192.168.0.28

Recv   Send    Send

Socket Socket  Message  Elapsed

Size   Size    Size     Time     Throughput

bytes  bytes   bytes    secs.    10^6bits/sec

 

 87380  16384   2048    60.00      87.62

在這裡,測試分組的大小減少到2048位元組,而吞吐量卻沒有很大的變化(與前面例子中測試分組大小為16K位元組相比)。相反,如果吞吐量有了較大的提升,則說明在網路中間的路由器確實存在緩衝區的問題。

2 UDP_STREAM

UDP_STREAM用來測試進行UDP批次傳輸時的網路效能。需要特別注意的是,此時測試分組的大小不得大於socket的傳送與接收緩衝大小,否則netperf會報出錯提示:

./netperf -t UDP_STREAM -H 192.168.0.28 -l 60

UDP UNIDIRECTIONAL SEND TEST to 192.168.0.28

udp_send: data send error: Message too long

為了避免這樣的情況,可以透過命令列引數限定測試分組的大小,或者增加socket的傳送/接收緩衝大小。UDP_STREAM方式使用與TCP_STREAM方式相同的區域性命令列引數,因此,這裡可以使用-m來修改測試中使用分組的大小:

 ./netperf -t UDP_STREAM -H 192.168.0.28 -- -m 1024

UDP UNIDIRECTIONAL SEND TEST to 192.168.0.28

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方式的結果中有兩行測試資料,第一行顯示的是本地系統的傳送統計,這裡的吞吐量表示netperf向本地socket傳送分組的能力。但是,我們知道,UDP是不可靠的傳輸協議,傳送出去的分組數量不一定等於接收到的分組數量。

第二行顯示的就是遠端系統接收的情況,由於clientserver直接連線在一起,而且網路中沒有其它的流量,所以本地系統傳送過去的分組幾乎都被遠端系統正確的接收了,遠端系統的吞吐量也幾乎等於本地系統的傳送吞吐量。但是,在實際環境中,一般遠端系統的socket緩衝大小不同於本地系統的socket緩衝區大小,而且由於UDP協議的不可靠性,遠端系統的接收吞吐量要遠遠小於傳送出去的吞吐量。

測試請求/應答(request/response)網路流量的效能

另一類常見的網路流量型別是應用在client/server結構中的request/response模式。在每次交易(transaction)中,clientserver發出小的查詢分組,server接收到請求,經處理後返回大的結果資料。如下圖所示:

1 TCP_RR

TCP_RR方式的測試物件是多次TCP requestresponse的交易過程,但是它們發生在同一個TCP連線中,這種模式常常出現在資料庫應用中。資料庫的client程式與server程式建立一個TCP連線以後,就在這個連線中傳送資料庫的多次交易過程。

./netperf -t TCP_RR -H 192.168.0.28

TCP REQUEST/RESPONSE TEST to 192.168.0.28

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輸出的結果也是由兩行組成。第一行顯示本地系統的情況,第二行顯示的是遠端系統的資訊。平均的交易率(transaction rate)為9502.73/秒。注意到這裡每次交易中的requestresponse分組的大小都為1個位元組,不具有很大的實際意義。使用者可以透過測試相關的引數來改變requestresponse分組的大小,TCP_RR方式下的引數如下表所示:

引數

說明

-r req,resp

設定requestreponse分組的大小

-s size

設定本地系統的socket傳送與接收緩衝大小

-S size

設定遠端系統的socket傳送與接收緩衝大小

-D

對本地與遠端系統的socket設定TCP_NODELAY選項

透過使用-r引數,我們可以進行更有實際意義的測試:

./netperf -t TCP_RR -H 192.168.0.28 -- -r 32,1024

TCP REQUEST/RESPONSE TEST to 192.168.0.28

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

從結果中可以看出,由於request/reponse分組的大小增加了,導致了交易率明顯的下降。 注:相對於實際的系統,這裡交易率的計算沒有充分考慮到交易過程中的應用程式處理時延,因此結果往往會高於實際情況。

2 TCP_CRR

TCP_RR不同,TCP_CRR為每次交易建立一個新的TCP連線。最典型的應用就是HTTP,每次HTTP交易是在一條單獨的TCP連線中進行的。因此,由於需要不停地建立新的TCP連線,並且在交易結束後拆除TCP連線,交易率一定會受到很大的影響。

./netperf -t TCP_CRR -H 192.168.0.28

TCP Connect/Request/Response TEST to 192.168.0.28

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

即使是使用一個位元組的request/response分組,交易率也明顯的降低了,只有2662.20/秒。TCP_CRR使用與TCP_RR相同的區域性引數。

3 UDP_RR

UDP_RR方式使用UDP分組進行request/response的交易過程。由於沒有TCP連線所帶來的負擔,所以我們推測交易率一定會有相應的提升。

./netperf -t UDP_RR -H 192.168.0.28

UDP REQUEST/RESPONSE TEST to 192.168.0.28

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

結果證實了我們的推測,交易率為10141.16/秒,高過TCP_RR的數值。不過,如果出現了相反的結果,即交易率反而降低了,也不需要擔心,因為這說明了在網路中,路由器或其它的網路裝置對UDP採用了與TCP不同的緩衝區空間和處理技術。

 

參考地址: http://www.ibm.com/developerworks/cn/linux/l-netperf/


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15747463/viewspace-1087001/,如需轉載,請註明出處,否則將追究法律責任。

相關文章