轉載自:http://os.chinaunix.net/a2004/0708/1042/000001042354.shtml
本文首先介紹網絡性能測量的一些基本概念和方法,然后結合 netperf 工具的使用,具體的討論如何測試不同情況下的網絡性能。
在構建或管理一個網絡系統(tǒng)時,我們更多的是關心網絡的可用性,即網絡是否連通,而對于其整體的性能往往考慮不多,或者即使考慮到性能的問題,但是卻發(fā)現(xiàn)沒有合適的手段去測試網絡的性能。
當開發(fā)出一個網絡應用程序后,我們會發(fā)現(xiàn),在實際的網絡環(huán)境使用中,網絡應用程序的使用效果不是很理想,問題可能出現(xiàn)在程序的開發(fā)上面,也有可能由于實際的網絡環(huán)境中存在著瓶頸。面對這種問題,程序員一般會一籌莫展,原因就在于不掌握一些網絡性能測量的工具。
在本文中,首先介紹網絡性能測量的一些基本概念和方法,然后結合 netperf 工具的使用,具體的討論如何測試不同情況下的網絡性能。
網絡性能測試概述
網絡性能測量的五項指標
測量網絡性能的五項指標是:
可用性(availability)
響應時間(response time)
網絡利用率(network utilization)
網絡吞吐量(network throughput)
網絡帶寬容量(network bandwidth capacity)
1. 可用性
測試網絡性能的第一步是確定網絡是否正常工作,最簡單的方法是使用 ping 命令。通過向遠端的機器發(fā)送 icmp echo request,并等待接收 icmp echo reply 來判斷遠端的機器是否連通,網絡是否正常工作。
Ping 命令有非常豐富的命令選項,比如 -c 可以指定發(fā)送 echo request 的個數(shù),-s 可以指定每次發(fā)送的 ping 包大小。
網絡設備內部一般有多個緩沖池,不同的緩沖池使用不同的緩沖區(qū)大小,分別用來處理不同大小的分組(packet)。例如交換機中通常具有三種類型的包緩沖:一類針對小的分組,一類針對中等大小的分組,還有一類針對大的分組。為了測試這樣的網絡設備,測試工具必須要具有發(fā)送不同大小分組的能力。Ping 命令的 -s 就可以使用在這種場合。
2. 響應時間
Ping 命令的 echo request/reply 一次往返所花費時間就是響應時間。有很多因素會影響到響應時間,如網段的負荷,網絡主機的負荷,廣播風暴,工作不正常的網絡設備等等。
在網絡工作正常時,記錄下正常的響應時間。當用戶抱怨網絡的反應時間慢時,就可以將現(xiàn)在的響應時間與正常的響應時間對比,如果兩者差值的波動很大,就能說明網絡設備存在故障。
3. 網絡利用率
網絡利用率是指網絡被使用的時間占總時間(即被使用的時間+空閑的時間)的比例。比如,Ethernet 雖然是共享的,但同時卻只能有一個報文在傳輸。因此在任一時刻,Ethernet 或者是 100% 的利用率,或者是 0% 的利用率。
計算一個網段的網絡利用率相對比較容易,但是確定一個網絡的利用率就比較復雜。因此,網絡測試工具一般使用網絡吞吐量和網絡帶寬容量來確定網絡中兩個節(jié)點之間的性能。
4. 網絡吞吐量
網絡吞吐量是指在某個時刻,在網絡中的兩個節(jié)點之間,提供給網絡應用的剩余帶寬。
網絡吞吐量可以幫組尋找網絡路徑中的瓶頸。比如,即使 client 和 server 都被分別連接到各自的 100M Ethernet 上,但是如果這兩個 100M 的Ethernet 被 10M 的 Ethernet 連接起來,那么 10M 的 Ethernet 就是網絡的瓶頸。
網絡吞吐量非常依賴于當前的網絡負載情況。因此,為了得到正確的網絡吞吐量,最好在不同時間(一天中的不同時刻,或者一周中不同的天)分別進行測試,只有這樣才能得到對網絡吞吐量的全面認識。
有些網絡應用程序在開發(fā)過程的測試中能夠正常運行,但是到實際的網絡環(huán)境中卻無法正常工作(由于沒有足夠的網絡吞吐量)。這是因為測試只是在空閑的網絡環(huán)境中,沒有考慮到實際的網絡環(huán)境中還存在著其它的各種網絡流量。所以,網絡吞吐量定義為剩余帶寬是有實際意義的。
5. 網絡帶寬容量
與網絡吞吐量不同,網絡帶寬容量指的是在網絡的兩個節(jié)點之間的最大可用帶寬。這是由組成網絡的設備的能力所決定的。
測試網絡帶寬容量有兩個困難之處:在網絡存在其它網絡流量的時候,如何得知網絡的最大可用帶寬;在測試過程中,如何對現(xiàn)有的網絡流量不造成影響。網絡測試工具一般采用 packet pairs 和 packet trains 技術來克服這樣的困難。
收集網絡性能數(shù)據(jù)的方式
當確定了網絡性能的測試指標以后,就需要使用網絡測試工具收集相應的性能數(shù)據(jù),分別有三種從網絡獲取數(shù)據(jù)的方式:
1. 通過snmp協(xié)議直接到網絡設備中獲取,如net-snmp工具
2. 偵聽相關的網絡性能數(shù)據(jù),典型的工具是tcpdump
3. 自行產生相應的測試數(shù)據(jù),如本文中使用的netperf工具
Netperf
Netperf是一種網絡性能的測量工具,主要針對基于TCP或UDP的傳輸。Netperf根據(jù)應用的不同,可以進行不同模式的網絡性能測試,即批量數(shù)據(jù)傳輸(bulk data transfer)模式和請求/應答(request/reponse)模式。Netperf測試結果所反映的是一個系統(tǒng)能夠以多快的速度向另外一個系統(tǒng)發(fā)送數(shù)據(jù),以及另外一個系統(tǒng)能夠以多塊的速度接收數(shù)據(jù)。
Netperf工具以client/server方式工作。server端是netserver,用來偵聽來自client端的連接,client端是netperf,用來向server發(fā)起網絡測試。在client與server之間,首先建立一個控制連接,傳遞有關測試配置的信息,以及測試的結果;在控制連接建立并傳遞了測試配置信息以后,client與server之間會再建立一個測試連接,用來來回傳遞著特殊的流量模式,以測試網絡的性能。
TCP網絡性能
由于TCP協(xié)議能夠提供端到端的可靠傳輸,因此被大量的網絡應用程序使用。但是,可靠性的建立是要付出代價的。TCP協(xié)議保證可靠性的措施,如建立并維護連接、控制數(shù)據(jù)有序的傳遞等都會消耗一定的網絡帶寬。
Netperf可以模擬三種不同的TCP流量模式:
1) 單個TCP連接,批量(bulk)傳輸大量數(shù)據(jù)
2) 單個TCP連接,client請求/server應答的交易(transaction)方式
3) 多個TCP連接,每個連接中一對請求/應答的交易方式
UDP網絡性能
UDP沒有建立連接的負擔,但是UDP不能保證傳輸?shù)目煽啃?,所以使用UDP的應用程序需要自行跟蹤每個發(fā)出的分組,并重發(fā)丟失的分組。
Netperf可以模擬兩種UDP的流量模式:
1) 從client到server的單向批量傳輸
2) 請求/應答的交易方式
由于UDP傳輸?shù)牟豢煽啃裕谑褂胣etperf時要確保發(fā)送的緩沖區(qū)大小不大于接收緩沖區(qū)大小,否則數(shù)據(jù)會丟失,netperf將給出錯誤的結果。因此,對于接收到分組的統(tǒng)計不一定準確,需要結合發(fā)送分組的統(tǒng)計綜合得出結論。
Netperf的命令行參數(shù)
在unix系統(tǒng)中,可以直接運行可執(zhí)行程序來啟動netserver,也可以讓inetd或xinetd來自動啟動netserver。
當netserver在server端啟動以后,就可以在client端運行netperf來測試網絡的性能。netperf通過命令行參數(shù)來控制測試的類型和具體的測試選項。根據(jù)作用范圍的不同,netperf的命令行參數(shù)可以分為兩大類:全局命令行參數(shù)、測試相關的局部參數(shù),兩者之間使用--分隔:
netperf [global options]-- [test-specific options]
這里我們只解釋那些常用的命令行參數(shù),其它的參數(shù)讀者可以查詢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)。
Netperf測試網絡性能
測試批量(bulk)網絡流量的性能
批量數(shù)據(jù)傳輸?shù)湫偷睦佑衒tp和其它類似的網絡應用(即一次傳輸整個文件)。根據(jù)使用傳輸協(xié)議的不同,批量數(shù)據(jù)傳輸又分為TCP批量傳輸和UDP批量傳輸。
1. TCP_STREAM
Netperf缺省情況下進行TCP批量傳輸,即-t TCP_STREAM。測試過程中,netperf向netserver發(fā)送批量的TCP數(shù)據(jù)分組,以確定數(shù)據(jù)傳輸過程中的吞吐量:
./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) 遠端系統(tǒng)(即server)使用大小為87380字節(jié)的socket接收緩沖
2) 本地系統(tǒng)(即client)使用大小為16384字節(jié)的socket發(fā)送緩沖
3) 向遠端系統(tǒng)發(fā)送的測試分組大小為16384字節(jié)
4) 測試經歷的時間為60秒
5) 吞吐量的測試結果為88Mbits/秒
在缺省情況下,netperf向發(fā)送的測試分組大小設置為本地系統(tǒng)所使用的socket發(fā)送緩沖大小。
TCP_STREAM方式下與測試相關的局部參數(shù)如下表所示:

通過修改以上的參數(shù),并觀察結果的 。