netperf

Netperf是一種網路性能的測量工具,主要針對基於TCPUDP的傳輸。Netperf根據套用的不同,可以進行不同模式的網路性能測試,即批量數據傳輸(bulk data transfer)模式和請求/應答(request/reponse)模式。Netperf測試結果所反映的是一個系統能夠以多快的速度向另外一個系統傳送數據,以及另外一個系統能夠以多快的速度接收數據。

基本介紹

  • 中文名:netperf
  • 方式工作:client/server
  • server端:netserver
  • 偵聽:client端的連線
概況,網路性能,TCP,UDP,行參數,測試性能,

概況

Netperf工具以client/server方式工作。server端是netserver,用來偵聽來自client端的連線,client端是netperf,用來向server發起網路測試。在client與server之間,首先建立一個控制連線,傳遞有關測試配置的信息,以及測試的結果;在控制連線建立並傳遞了測試配置信息以後,client與server之間會再建立一個測試連線,用來來回傳遞著特殊的流量模式,以測試網路的性能。

網路性能

TCP

由於TCP協定能夠提供端到端可靠傳輸,因此被大量的網路應用程式使用。但是,可靠性的建立是要付出代價的。TCP協定保證可靠性的措施,如建立並維護連線、控制數據有序的傳遞等都會消耗一定的網路頻寬
Netperf可以模擬三種不同的TCP流量模式:
1) 單個TCP連線,批量(bulk)傳輸大量數據
2) 單個TCP連線,client請求/server應答的交易(transaction)方式
3) 多個TCP連線,每個連線中一對請求/應答的交易方式

UDP

UDP沒有建立連線的負擔,但是UDP不能保證傳輸的可靠性,所以使用UDP的應用程式需要自行跟蹤每個發出的分組,並重發丟失的分組。
Netperf可以模擬兩種UDP的流量模式:
1) 從client到server的單向批量傳輸
2) 請求/應答的交易方式
由於UDP傳輸的不可靠性,在使用netperf時要確保傳送的緩衝區大小不大於接收緩衝區大小,否則數據會丟失,netperf將給出錯誤的結果。因此,對於接收到分組的統計不一定準確,需要結合傳送分組的統計綜合得出結論。

行參數

unix系統中,可以直接運行可執行程式來啟動netserver,也可以讓inetdxinetd來自動啟動netserver。
當netserver在server端啟動以後,就可以在client端運行netperf來測試網路的性能。netperf通過命令行參數控制測試的類型和具體的測試選項。根據作用範圍的不同,netperf的命令行參數可以分為兩大類:全局命令行參數、測試相關的局部參數,兩者之間使用--分隔:
netperf [global options]-- [test-specific options]
這裡我們只解釋那些常用的命令行參數,其它的參數讀者可以查詢netperf的man手冊。
-H host :指定遠端運行netserver的server IP位址
-l testlen:指定測試的時間長度(秒)
-t testname:指定進行的測試類型,包括TCP_STREAM,UDP_STREAM,TCP_RR,TCP_CRR,UDP_RR,在下文中分別對它們說明。
在後面的測試中,netserver運行在192.168.0.28,server與client通過區域網路連線(100M Hub)。

測試性能

測試批量(bulk)網路流量的性能
批量數據傳輸典型的例子有ftp和其它類似的網路套用(即一次傳輸整個檔案)。根據使用傳輸協定的不同,批量數據傳輸又分為TCP批量傳輸和UDP批量傳輸。
1. TCP_STREAM
Netperf預設情況下進行TCP批量傳輸,即-t TCP_STREAM。測試過程中,netperf向netserver傳送批量的TCP數據分組,以確定數據傳輸過程中的吞吐量:
1) 遠端系統(即server)使用大小為87380位元組的socket接收緩衝從netperf的結果輸出中,我們可以知道以下的一些信息:
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)的大小,以觀察吞吐量的變化:
2. UDP_STREAM在這裡,測試分組的大小減少到2048位元組,而吞吐量卻沒有很大的變化(與前面例子中測試分組大小為16K位元組相比)。相反,如果吞吐量有了較大的提升,則說明在網路中間的路由器確實存在緩衝區的問題。
UDP_STREAM用來測試進行UDP批量傳輸時的網路性能。需要特別注意的是,此時測試分組的大小不得大於socket的傳送與接收緩衝大小,否則netperf會報出錯提示:
.
為了避免這樣的情況,可以通過命令行參數限定測試分組的大小,或者增加socket的傳送/接收緩衝大小。UDP_STREAM方式使用與TCP_STREAM方式相同的局部命令行參數,因此,這裡可以使用-m來修改測試中使用分組的大小:
第二行顯示的就是遠端系統接收的情況,由於client與server直接連線在一起,而且網路中沒有其它的流量,所以本地系統傳送過去的分組幾乎都被遠端系統正確的接收了,遠端系統的吞吐量也幾乎等於本地系統的傳送吞吐量。但是,在實際環境中,一般遠端系統的socket緩衝大小不同於本地系統的socket緩衝區大小,而且由於UDP協定的不可靠性,遠端系統的接收吞吐量要遠遠小於傳送出去的吞吐量。UDP_STREAM方式的結果中有兩行測試數據,第一行顯示的是本地系統的傳送統計,這裡的吞吐量表示netperf向本地socket傳送分組的能力。但是,我們知道,UDP是不可靠的傳輸協定,傳送出去的分組數量不一定等於接收到的分組數量。
測試請求/應答(request/response)網路流量的性能
另一類常見的網路流量類型是套用在client/server結構中的request/response模式。在每次交易(transaction)中,client向server發出小的查詢分組,server接收到請求,經處理後返回大的結果數據。
1. TCP_RR
TCP_RR方式的測試對象是多次TCP request和response的交易過程,但是它們發生在同一個TCP連線中,這種模式常常出現在資料庫套用中。資料庫的client程式與server程式建立一個TCP連線以後,就在這個連線中傳送資料庫的多次交易過程。
參數
說明
-r req,resp
設定request和reponse分組的大小
-s size
設定本地系統的socket傳送與接收緩衝大小
-S size
設定遠端系統的socket傳送與接收緩衝大小
-D
對本地與遠端系統的socket設定TCP_NODELAY選項
Netperf輸出的結果也是由兩行組成。第一行顯示本地系統的情況,第二行顯示的是遠端系統的信息。平均的交易率(transaction rate)為9502.73次/秒。注意到這裡每次交易中的request和response分組的大小都為1個位元組,不具有很大的實際意義。用戶可以通過測試相關的參數來改變request和response分組的大小,TCP_RR方式下的參數如下表所示:
通過使用-r參數,我們可以進行更有實際意義的測試:
2. TCP_CRR從結果中可以看出,由於request/reponse分組的大小增加了,導致了交易率明顯的下降。 註:相對於實際的系統,這裡交易率的計算沒有充分考慮到交易過程中的應用程式處理時延,因此結果往往會高於實際情況。
與TCP_RR不同,TCP_CRR為每次交易建立一個新的TCP連線。最典型的套用就是HTTP,每次HTTP交易是在一條單獨的TCP連線中進行的。因此,由於需要不停地建立新的TCP連線,並且在交易結束後拆除TCP連線,交易率一定會受到很大的影響。
3. UDP_RR即使是使用一個位元組的request/response分組,交易率也明顯的降低了,只有2662.20次/秒。TCP_CRR使用與TCP_RR相同的局部參數。
UDP_RR方式使用UDP分組進行request/response的交易過程。由於沒有TCP連線所帶來的負擔,所以我們推測交易率一定會有相應的提升。
.
結果證實了我們的推測,交易率為10141.16次/秒,高過TCP_RR的數值。不過,如果出現了相反的結果,即交易率反而降低了,也不需要擔心,因為這說明了在網路中,路由器或其它的網路設備對UDP採用了與TCP不同的緩衝區空間和處理技術。
結束
除了netperf以外,還有很多其它的網路性能測試工具,如dbs, iperf, pathrate, nettest, netlogger, tcptrace, ntop等。這些工具有其各自的特色和不同的側重點,我們可以根據具體的套用環境,有選擇的使用它們,這樣就可以使這些工具發揮出最大的功效。雖然都是開放原始碼的軟體,但是這些工具的功能與商業的網路測試工具同樣強大,而且也得到了廣泛的套用,熟悉這些工具對我們的實際工作一定會有很大的幫助。

相關詞條

熱門詞條

聯絡我們