上一篇 /下一篇 2007-10-05 20:28:54/ 個人分類:網(wǎng)絡(luò)測試工具
在構(gòu)建或管理一個網(wǎng)絡(luò)系統(tǒng)時,我們更多的是關(guān)心網(wǎng)絡(luò)的可用性,即網(wǎng)絡(luò)是否連通,而對于其整體的性能往往考慮不多,或者即使考慮到性能的問題,但是卻發(fā)現(xiàn)沒有合適的手段去測試網(wǎng)絡(luò)的性能。
當(dāng)開發(fā)出一個網(wǎng)絡(luò)應(yīng)用程序后,我們會發(fā)現(xiàn),在實際的網(wǎng)絡(luò)環(huán)境使用中,網(wǎng)絡(luò)應(yīng)用程序的使用效果不 是很理想,問題可能出現(xiàn)在程序的開發(fā)上面,也有可能由于實際的網(wǎng)絡(luò)環(huán)境中存在著瓶頸。面對這種問題,程序員一般會一籌莫展,原因就在于不掌握一些網(wǎng)絡(luò)性能測量的工具。
在本文中,首先介紹網(wǎng)絡(luò)性能測量的一些基本概念和方法,然后結(jié)合 netperf 工具的使用,具體的討論如何測試不同情況下的網(wǎng)絡(luò)性能。
網(wǎng)絡(luò)性能測試概述
測量網(wǎng)絡(luò)性能的五項指標(biāo)是:
可用性(availability)
響應(yīng)時間(response time)
網(wǎng)絡(luò)利用率(networkutilization)
網(wǎng)絡(luò)吞吐量(network throughput)
網(wǎng)絡(luò)帶寬容量(network bandwidthcapacity)
1. 可用性
測試網(wǎng)絡(luò)性能的第一步是確定網(wǎng)絡(luò)是否正常工作,最簡單的方法是使用 ping 命令。通過向遠(yuǎn)端的機(jī)器發(fā)送 icmp echo request,并等待接收 icmp echo reply 來判斷遠(yuǎn)端的機(jī)器是否連通,網(wǎng)絡(luò)是否正常工作。
Ping 命令有非常豐富的命令選項,比如 -c 可以指定發(fā)送 echo request 的個數(shù),-l 可以指定每次發(fā)送的 ping 包大小。
網(wǎng)絡(luò)設(shè)備內(nèi)部一般有多個緩沖池,不同的緩沖池使用不同的緩沖區(qū)大小,分別用來處理不同大小的分組(packet)。例如交換機(jī)中通常具有三種類型的包緩沖:一類針對小的分組,一類針對中等大小的分組,還有一類針對大的分組。為了測試這樣的網(wǎng)絡(luò)設(shè)備,測試工具必須要具有發(fā)送不同大小分組的能力。 Ping 命令的 -l 就可以使用在這種場合。
2. 響應(yīng)時間
Ping 命令的 echo request/reply 一次往返所花費時間就是響應(yīng)時間。有很多因素會影響到響應(yīng)時間,如網(wǎng)段的負(fù)荷,網(wǎng)絡(luò)主機(jī)的負(fù)荷,廣播風(fēng)暴,工作不正常的網(wǎng)絡(luò)設(shè)備等等。
在網(wǎng)絡(luò)工作正常時,記錄下正常的響應(yīng)時間。當(dāng)用戶抱怨網(wǎng)絡(luò)的反應(yīng)時間慢時,就可以將現(xiàn)在的響應(yīng)時間與正常的響應(yīng)時間對比,如果兩者差值的波動很大,就能說明網(wǎng)絡(luò)設(shè)備存在故障。
3. 網(wǎng)絡(luò)利用率
網(wǎng)絡(luò)利用率是指網(wǎng)絡(luò)被使用的時間占總時間(即被使用的時間+空閑的時間)的比例。比如,Ethernet 雖然是共享的,但同時卻只能有一個報文在傳輸。因此在任一時刻,Ethernet 或者是 100% 的利用率,或者是 0% 的利用率。
計算一個網(wǎng)段的網(wǎng)絡(luò)利用率相對比較容易,但是確定一個網(wǎng)絡(luò)的利用率就比較復(fù)雜。因此,網(wǎng)絡(luò)測試工具一般使用網(wǎng)絡(luò)吞吐量和網(wǎng)絡(luò)帶寬容量來確定網(wǎng)絡(luò)中兩個節(jié)點之間的性能。
4. 網(wǎng)絡(luò)吞吐量
網(wǎng)絡(luò)吞吐量是指在某個時刻,在網(wǎng)絡(luò)中的兩個節(jié)點之間,提供給網(wǎng)絡(luò)應(yīng)用的剩余帶寬。
網(wǎng)絡(luò)吞吐量可以幫組尋找網(wǎng)絡(luò)路徑中的瓶頸。比如,即使 client 和 server 都被分別連接到各自的 100M Ethernet上,但是如果這兩個 100M 的Ethernet 被 10M 的 Ethernet 連接起來,那么 10M 的 Ethernet就是網(wǎng)絡(luò)的瓶頸。
網(wǎng)絡(luò)吞吐量非常依賴于當(dāng)前的網(wǎng)絡(luò)負(fù)載情況。因此,為了得到正確的網(wǎng)絡(luò)吞吐量,最好在不同時間(一天中的不同時刻,或者一周中不同的天)分別進(jìn)行測試,只有這樣才能得到對網(wǎng)絡(luò)吞吐量的全面認(rèn)識。
有些網(wǎng)絡(luò)應(yīng)用程序在開發(fā)過程的測試中能夠正常運行,但是到實際的網(wǎng)絡(luò)環(huán)境中卻無法正常工作(由于沒有足夠的網(wǎng)絡(luò)吞吐量)。這是因為測試只是在空閑的網(wǎng)絡(luò)環(huán)境中,沒有考慮到實際的網(wǎng)絡(luò)環(huán)境中還存在著其它的各種網(wǎng)絡(luò)流量。所以,網(wǎng)絡(luò)吞吐量定義為剩余帶寬是有實際意義的。
5. 網(wǎng)絡(luò)帶寬容量
與網(wǎng)絡(luò)吞吐量不同,網(wǎng)絡(luò)帶寬容量指的是在網(wǎng)絡(luò)的兩個節(jié)點之間的最大可用帶寬。這是由組成網(wǎng)絡(luò)的設(shè)備的能力所決定的。
測試網(wǎng)絡(luò)帶寬容量有兩個困難之處:在網(wǎng)絡(luò)存在其它網(wǎng)絡(luò)流量的時候,如何得知網(wǎng)絡(luò)的最大可用帶寬;在測試過程中,如何對現(xiàn)有的網(wǎng)絡(luò)流量不造成影響。網(wǎng)絡(luò)測試工具一般采用 packet pairs 和 packet trains 技術(shù)來克服這樣的困難。
當(dāng)確定了網(wǎng)絡(luò)性能的測試指標(biāo)以后,就需要使用網(wǎng)絡(luò)測試工具收集相應(yīng)的性能數(shù)據(jù),分別有三種從網(wǎng)絡(luò)獲取數(shù)據(jù)的方式:
1. 通過snmp協(xié)議直接到網(wǎng)絡(luò)設(shè)備中獲取,如net-snmp工具
2. 偵聽相關(guān)的網(wǎng)絡(luò)性能數(shù)據(jù),典型的工具是tcpdump
3. 自行產(chǎn)生相應(yīng)的測試數(shù)據(jù),如本文中使用的netperf工具
Netperf是一種網(wǎng)絡(luò)性能的測量工具,主要針對基于TCP或UDP的傳輸。Netperf根據(jù)應(yīng)用的不同,可以進(jìn)行不同模式的網(wǎng)絡(luò)性能測試,即批量數(shù)據(jù)傳輸(bulk datatransfer)模式和請求/應(yīng)答(request/reponse)模式。Netperf測試結(jié)果所反映的是一個系統(tǒng)能夠以多快的速度向另外一個系統(tǒng)發(fā)送數(shù)據(jù),以及另外一個系統(tǒng)能夠以多塊的速度接收數(shù)據(jù)。
Netperf工具以client/server方式工作。server端是netserver,用來偵聽來自client端的連接,client端是netperf,用來向server發(fā)起網(wǎng)絡(luò)測試。在client與server之間,首先建立一個控制連接,傳遞有關(guān)測試配置的信息,以及測試的結(jié)果;在控制連接建立并傳遞了測試配置信息以后,client與server之間會再建立一個測試連接,用來來回傳遞著特殊的流量模式,以測試網(wǎng)絡(luò)的性能。
由于TCP協(xié)議能夠提供端到端的可靠傳輸,因此被大量的網(wǎng)絡(luò)應(yīng)用程序使用。但是,可靠性的建立是要付出代價的。TCP協(xié)議保證可靠性的措施,如建立并維護(hù)連接、控制數(shù)據(jù)有序的傳遞等都會消耗一定的網(wǎng)絡(luò)帶寬。
Netperf可以模擬三種不同的TCP流量模式:
1) 單個TCP連接,批量(bulk)傳輸大量數(shù)據(jù)
2) 單個TCP連接,client請求/server應(yīng)答的交易(transaction)方式
3) 多個TCP連接,每個連接中一對請求/應(yīng)答的交易方式
UDP沒有建立連接的負(fù)擔(dān),但是UDP不能保證傳輸?shù)目煽啃?,所以使用UDP的應(yīng)用程序需要自行跟蹤每個發(fā)出的分組,并重發(fā)丟失的分組。
Netperf可以模擬兩種UDP的流量模式:
1) 從client到server的單向批量傳輸
2) 請求/應(yīng)答的交易方式
由于UDP傳輸?shù)牟豢煽啃裕谑褂胣etperf時要確保發(fā)送的緩沖區(qū)大小不大于接收緩沖區(qū)大小,否則數(shù)據(jù)會丟失,netperf將給出錯誤的結(jié)果。因此,對于接收到分組的統(tǒng)計不一定準(zhǔn)確,需要結(jié)合發(fā)送分組的統(tǒng)計綜合得出結(jié)論。
在unix系統(tǒng)中,可以直接運行可執(zhí)行程序來啟動netserver,也可以讓inetd或xinetd來自動啟動netserver。
當(dāng)netserver在server端啟動以后,就可以在client端運行netperf來測試網(wǎng)絡(luò)的性能。netperf通過命令行參數(shù)來控制測試的類型和具體的測試選項。根據(jù)作用范圍的不同,netperf的命令行參數(shù)可以分為兩大類:全局命令行參數(shù)、測試相關(guān)的局部參數(shù),兩者之間使用--分隔:
netperf [global options]-- [test-specific options]
這里我們只解釋那些常用的命令行參數(shù),其它的參數(shù)讀者可以查詢netperf的man手冊。
-H host :指定遠(yuǎn)端運行netserver的server IP地址。
-l testlen:指定測試的時間長度(秒)
-t testname:指定進(jìn)行的測試類型,包括TCP_STREAM,UDP_STREAM,TCP_RR,TCP_CRR,UDP_RR,在下文中分別對它們說明。
在后面的測試中,netserver運行在192.168.0.28,server與client通過局域網(wǎng)連接(100M Hub)。 字串3
測試批量(bulk)網(wǎng)絡(luò)流量的性能
批量數(shù)據(jù)傳輸?shù)湫偷睦佑衒tp和其它類似的網(wǎng)絡(luò)應(yīng)用(即一次傳輸整個文件)。根據(jù)使用傳輸協(xié)議的不同,批量數(shù)據(jù)傳輸又分為TCP批量傳輸和UDP批量傳輸。
1. TCP_STREAM
Netperf缺省情況下進(jìn)行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的結(jié)果輸出中,我們可以知道以下的一些信息:
1) 遠(yuǎn)端系統(tǒng)(即server)使用大小為87380字節(jié)的socket接收緩沖
2) 本地系統(tǒng)(即client)使用大小為16384字節(jié)的socket發(fā)送緩沖
3) 向遠(yuǎn)端系統(tǒng)發(fā)送的測試分組大小為16384字節(jié)
4) 測試經(jīng)歷的時間為60秒
5) 吞吐量的測試結(jié)果為88Mbits/秒
在缺省情況下,netperf向發(fā)送的測試分組大小設(shè)置為本地系統(tǒng)所使用的socket發(fā)送緩沖大小。
TCP_STREAM方式下與測試相關(guān)的局部參數(shù)如下表所示:
參數(shù) | 說明 |
-s size | 設(shè)置本地系統(tǒng)的socket發(fā)送與接收緩沖大小 |
-S size | 設(shè)置遠(yuǎn)端系統(tǒng)的socket發(fā)送與接收緩沖大小 |
-m size | 設(shè)置本地系統(tǒng)發(fā)送測試分組的大小 |
-M size | 設(shè)置遠(yuǎn)端系統(tǒng)接收測試分組的大小 |
-D | 對本地與遠(yuǎn)端系統(tǒng)的socket設(shè)置TCP_NODELAY選項 |
另一類常見的網(wǎng)絡(luò)流量類型是應(yīng)用在client/server結(jié)構(gòu)中的request/response模式。在每次交易(transaction)中,client向server發(fā)出小的查詢分組,server接收到請求,經(jīng)處理后返回大的結(jié)果數(shù)據(jù)。
1. TCP_RR TCP_RR方式的測試對象是多次TCP request和response的交易過程,但是它們發(fā)生在同一個TCP連接中,這種模式常常出現(xiàn)在數(shù)據(jù)庫應(yīng)用中。數(shù)據(jù)庫的client程序與server程序建立一個TCP連接以后,就在這個連接中傳送數(shù)據(jù)庫的多次交易過程。 Netperf輸出的結(jié)果也是由兩行組成。第一行顯示本地系統(tǒng)的情況,第二行顯示的是遠(yuǎn)端系統(tǒng)的信息。平均的交易率(transactionrate)為9502.73次/秒。注意到這里每次交易中的request和response分組的大小都為1個字節(jié),不具有很大的實際意義。用戶可以通過測試相關(guān)的參數(shù)來改變request和response分組的大小,TCP_RR方式下的參數(shù)如下表所示: 參數(shù) 說明 -r req,resp 設(shè)置request和reponse分組的大小 -s size 設(shè)置本地系統(tǒng)的socket發(fā)送與接收緩沖大小 -S size 設(shè)置遠(yuǎn)端系統(tǒng)的socket發(fā)送與接收緩沖大小 -D 對本地與遠(yuǎn)端系統(tǒng)的socket設(shè)置TCP_NODELAY選項 通過使用-r參數(shù),我們可以進(jìn)行更有實際意義的測試: 從結(jié)果中可以看出,由于request/reponse分組的大小增加了,導(dǎo)致了交易率明顯的下降。注:相對于實際的系統(tǒng),這里交易率的計算沒有充分考慮到交易過程中的應(yīng)用程序處理時延,因此結(jié)果往往會高于實際情況。 2. TCP_CRR 與TCP_RR不同,TCP_CRR為每次交易建立一個新的TCP連接。最典型的應(yīng)用就是HTTP,每次HTTP交易是在一條單獨的TCP連接中進(jìn)行的。因此,由于需要不停地建立新的TCP連接,并且在交易結(jié)束后拆除TCP連接,交易率一定會受到很大的影響。 即使是使用一個字節(jié)的request/response分組,交易率也明顯的降低了,只有2662.20次/秒。TCP_CRR使用與TCP_RR相同的局部參數(shù)。 3. UDP_RR UDP_RR方式使用UDP分組進(jìn)行request/response的交易過程。由于沒有TCP連接所帶來的負(fù)擔(dān),所以我們推測交易率一定會有相應(yīng)的提升。 結(jié)束語 參考資料 Network Performance Open Source Toolkit, Richard Blum, Wiley Publishing, Inc.
./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 -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
./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
./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
結(jié)果證實了我們的推測,交易率為10141.16次/秒,高過TCP_RR的數(shù)值。不過,如果出現(xiàn)了相反的結(jié)果,即交易率反而降低了,也不需要擔(dān)心,因為這說明了在網(wǎng)絡(luò)中,路由器或其它的網(wǎng)絡(luò)設(shè)備對UDP采用了與TCP不同的緩沖區(qū)空間和處理技術(shù)。
除了netperf以外,還有很多其它的網(wǎng)絡(luò)性能測試工具,如dbs, iperf, pathrate, nettest, netlogger,tcptrace,ntop等。這些工具有其各自的特色和不同的側(cè)重點,我們可以根據(jù)具體的應(yīng)用環(huán)境,有選擇的使用它們,這樣就可以使這些工具發(fā)揮出最大的功效。雖然都是開放源代碼的軟件,但是這些工具的功能與商業(yè)的網(wǎng)絡(luò)測試工具同樣強(qiáng)大,而且也得到了廣泛的應(yīng)用,熟悉這些工具對我們的實際工作一定會有很大的幫助。
netperf website,http://www.netperf.org