天天看點

Linux環境下網絡性能測試

1、可用性

測試網絡性能的第一步是确定網絡是否正常工作,最簡單的方法就是使用<code>ping</code>指令,通過向遠端的機器發送ICMP請求,并等待接收ICMP回應,來判斷遠端的機器是否連通,網絡是否正常工作。

2、響應時間

<code>ping</code>指令的ICMP封包響應一次往返所花費時間就是響應時間,有很多因素會影響到響應時間,如網段的負荷,網絡主機的負荷,廣播風暴,工作不正常的網絡裝置等等。

3、網絡使用率

網絡使用率是指網絡被使用的時間占總時間(即被使用的時間+空閑的時間)的比例。例如,Ethernet雖然是共享的,但同時卻隻能有一個封包在傳輸,是以在任一時刻,Ethernet或者是100%的使用率,或者是0%的使用率。計算一個網段的網絡使用率相對比較容易,但是确定一個網絡的使用率就比較複雜。是以,網絡測試工具一般使用網絡吞吐量和網絡帶寬容量來确定網絡中兩個節點之間的性能。

4、網絡吞吐量

網絡吞吐量是指在某個時刻,在網絡中的兩個節點之間,提供給網絡應用的剩餘帶寬,通過網絡吞吐量可以尋找出網絡瓶頸。比如,即使<code>client</code>和<code>server</code>都被分别連接配接到各自的<code>100M</code>以太網卡上,但是如果這兩個<code>100M</code>的以太網卡被<code>10M</code>的交換機連接配接起來,那麼<code>10M</code>的交換機就是網絡的瓶頸。

5、網絡帶寬容量

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

配置與安裝:

<code>[root@rh tool]# tar -zxvf iperf-2.0.2.tar.gz</code>

<code>[root@rh tool]# cd iperf-2.0.2</code>

<code>[root@rh iperf-2.0.2]# ./configure --prefix=/usr/netperf</code>

<code>[root@rh iperf-2.0.2]# make</code>

<code>[root@rh iperf-2.0.2]# make install</code>

<code>[root@rh iperf-2.0.2]# ls /usr/netperf</code>

啟動server端:

<code>[root@rh iperf-2.0.2]# cd /usr/iperf/bin</code>

<code>[root@rh bin]# ./iperf -s</code>

還可以設定這些參數:

伺服器端選項

環境變量選項

說明

-s, --server

$IPERF_SERVER

在伺服器端運作 iperf;

-D

.

以背景方式運作 iperf 服務模式;

-R

如果 iperf 正在運作,則将其終止運作;

啟動client端:

用TCP的方式測試本機到<code>192.168.0.138</code>主機<code>(-c 192.168.0.138)</code>的網絡性能,時長為<code>60</code>秒<code>(-t 60)</code>,緩沖區的大小為<code>8KB</code> <code>(-l 8k)</code>,每<code>10</code>秒<code>(-i 10)</code>列印一次測試結果。

<code>[root@rh bin]# ./iperf -c 192.168.0.138 -t 60 -l 8k -i 10</code>

<code>------------------------------------------------------------</code>

<code>Client connecting to 192.168.0.138, TCP port 5001</code>

<code>TCP window size: 23.2 KByte (default)</code>

<code>[ 3] local 192.168.0.137 port 42812 connected with 192.168.0.138 port 5001</code>

<code>[ ID] Interval Transfer Bandwidth</code>

<code>[ 3] 0.0-10.0 sec 1.64 GBytes 1.41 Gbits/sec</code>

<code>[ 3] 10.0-20.0 sec 5.26 GBytes 4.52 Gbits/sec</code>

<code>[ 3] 20.0-30.0 sec 5.26 GBytes 4.52 Gbits/sec</code>

<code>[ 3] 30.0-40.0 sec 5.27 GBytes 4.53 Gbits/sec</code>

<code>[ 3] 40.0-50.0 sec 5.26 GBytes 4.51 Gbits/sec</code>

<code>[ 3] 50.0-60.0 sec 5.26 GBytes 4.52 Gbits/sec</code>

<code>[ 3] 0.0-60.0 sec 27.9 GBytes 4.00 Gbits/sec</code>

用戶端選項

-b, --bandwidth

$IPERF_BANDWIDTH

指定用戶端通過 UDP 協定發送資訊的帶寬,預設值為 1Mbps;

單個TCP連接配接,批量(bulk)傳輸大量資料;

單個TCP連接配接,client請求/server應答的交易(transaction)方式;

多個TCP連接配接,每個連接配接中一對請求/應答的交易方式

從client到server的單向批量傳輸;

請求/應答的交易方式。

<code>[root@rh tool]# tar -zxvf netperf-2.6.0.tar.gz</code>

<code>[root@rh tool]# cd netperf-2.6.0</code>

<code>[root@rh netperf-2.6.0]# ./configure --prefix /usr/netperf</code>

<code>[root@rh netperf-2.6.0]# make</code>

<code>[root@rh netperf-2.6.0]# make check</code>

<code>[root@rh netperf-2.6.0]# make install</code>

<code>[root@rh netperf-2.6.0]# ls /usr/netperf</code>

<code>[root@rh netperf-2.6.0]# cd /usr/netperf/bin</code>

<code>[root@rh bin]# ./netserver</code>

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

用 <code>TCP 批量傳輸的方式</code> <code>(-t TCP_STREAM)</code>測試本機到 <code>192.168.0.138</code> 主機<code>(-H 192.168.0.138)</code>的網絡性能,時長 <code>60</code> 秒<code>(-l 60)</code>,每次發送本地發送測試分組的大小為<code>2048Bytes</code> <code>(-m 2048)</code>。

<code>[root@rh bin]# ./netperf -t TCP_STREAM -H 192.168.0.138 -l 60 -- -m 2048</code>

<code>MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.0.138 () port 0 AF_INET</code>

<code>Recv Send Send</code>

<code>Socket Socket Message Elapsed</code>

<code>Size Size Size Time Throughput</code>

<code>bytes bytes bytes secs. 10^6bits/sec</code>

<code>87380 16384 2048 60.00 5463.11</code>

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

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

3)向遠端系統發送的測試分組大小為 2048 位元組,通過 -m 2048 設定;

4)測試經曆的時間為 60 秒;

5)吞吐量的測試結果為 5463.11 Mbps;

還可以設定這些局部指令行參數:

變量

-s

$size

設定本地系統的 socket 發送與接收緩沖大小;

-S

設定遠端系統的 socket 發送與接收緩沖大小;

-m

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

-M

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

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

通過修改以上的參數,并觀察測試結果的變化,可以确定是什麼因素影響了連接配接的吞吐量。

例如,如果懷疑路由器由于缺乏足夠的緩沖區空間,使得轉發大的分組時存在問題,就可以改變測試分組的大小<code>(-m)</code>,以觀察吞吐量的變化。如果當測試分組由較大變為較小,而吞吐量出現較大的變化(比如吞吐量變大),說明網絡中路由器确實存在緩沖區不足的問題。

2)<code>UDP_STREAM</code>,進行 UDP 批量傳輸性能測試。

需要注意的是此時測試分組的大小不能大于 socket 發送與接收的緩沖區大小,否則 netperf 會報錯。

<code>UDP_STREAM</code> 方式使用與 <code>TCP_STREAM</code> 方式相同的局部指令行參數。

用 <code>UDP 批量傳輸的方式</code> <code>(-t UDP_STREAM)</code>測試本機到 <code>192.168.0.138</code> 主機<code>(-H 192.168.0.138)</code>的網絡性能,時長 <code>60</code> 秒<code>(-l 60)</code>,每次發送本地發送測試分組的大小為<code>2048Bytes</code> <code>(-m 2048)</code>。

<code>[root@rh bin]# ./netperf -t UDP_STREAM -H 192.168.0.138 -l 60 -- -m 2048</code>

<code>MIGRATED UDP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.0.138 () port 0 AF_INET</code>

<code>Socket Message Elapsed Messages</code>

<code>Size Size Time Okay Errors Throughput</code>

<code>bytes bytes secs # # 10^6bits/sec</code>

<code>229376 2048 60.00 11159606 0 3047.29</code>

<code>229376 60.00 11115165 3035.15</code>

可以看到,最後結果有兩行,第一行資料顯示的是本地系統的發送統計,這裡的吞吐量表示 netperf 向本地 socket 發送分組的能力。但是由于 UDP 是不可靠的傳輸協定,發送出去的分組數量不一定等于接收到的分組數量;第二行資料顯示的就是遠端系統接收的情況,這裡看到接收到的資料小于發送的資料,即存在丢包的情況。遠端系統的接收吞吐量也小于本地發送吞吐量。

3)<code>TCP_RR</code>,在一個 TCP 連接配接中進行多次 request 和 response 的交易過程的性能測試。

這種方式常出現在資料庫應用中,資料庫與用戶端程式建立一個 TCP 連接配接後,就在這個連接配接中傳遞資料庫的多次交易過程。

用 <code>TCP_RR</code> 的方式<code>(-t TCP_RR)</code>測試本機到 <code>192.168.0.138</code> 主機<code>(-H 192.168.0.138)</code>的網絡性能,時長 <code>60</code> 秒<code>(-l 60)</code>,設定 request 分組大小為 <code>64Bytes</code>,response 分組大小<code>1024Bytes</code>。

<code>[root@rh bin]# ./netperf -t TCP_RR -H 192.168.0.138 -l 60 -- -r 64,1024</code>

<code>MIGRATED TCP REQUEST/RESPONSE TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.0.138 () port 0 AF_INET : first burst 0</code>

<code>Local /Remote</code>

<code>Socket Size Request Resp. Elapsed Trans.</code>

<code>Send Recv Size Size Time Rate</code>

<code>bytes Bytes bytes bytes secs. per sec</code>

<code>16384 87380 64 1024 60.00 9194.92</code>

<code>16384 87380</code>

這裡的輸出結果有兩行,第一行資料顯示的是本地系統的資訊,第二行資料顯示的遠端系統的資訊。<code>Trans. Rate per sec</code> 是平均交易率。

通常增加 request/response 分組的大小會使得交易率下降。相對于實際的系統,這裡的交易率的計算沒有充分考慮到交易過程中的應用程式處理時延,是以結果會高于實際情況。

-r

$req,$resp

設定 request 和 reponse 分組的大小;

4)<code>TCP_CRR</code>,與 <code>TCP_RR</code> 的方式不同,<code>TCP_CRR</code> 為每次交易建立一個新的 TCP 連接配接。測試這種情況的網絡性能。

這種方式最典型的應用是 HTTP,每次 HTTP 交易是在一條單獨的 TCP 連接配接中進行的,這個過程需要不停地建立新的 TCP 連接配接,并在交易結束後結束 TCP 連接配接,交易率會受到較大影響。

用 <code>TCP_CRR</code> 的方式<code>(-t TCP_CRR)</code>測試本機到 <code>192.168.0.138</code> 主機<code>(-H 192.168.0.138)</code>的網絡性能,時長 <code>60</code> 秒<code>(-l 60)</code>,設定 request 分組大小為 <code>64Bytes</code>,response 分組大小 <code>1024Bytes</code>。

<code>[root@rh bin]# ./netperf -t TCP_CRR -H 192.168.0.138 -l 60 -- -r 64,1024</code>

<code>MIGRATED TCP Connect/Request/Response TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.0.138 () port 0 AF_INET</code>

<code>16384 87380 64 1024 60.00 2728.00</code>

5)<code>UDP_RR</code>,使用 UDP 分組進行 request 和 response 交易過程的性能測試。

用 <code>UDP_RR</code> 的方式<code>(-t UDP_RR)</code>測試本機到 <code>192.168.0.138</code> 主機<code>(-H 192.168.0.138)</code>的網絡性能,時長 <code>60</code> 秒<code>(-l 60)</code>,設定 request 分組大小為 <code>64Bytes</code>,response 分組大小<code>1024Bytes</code>。

<code>[root@rh bin]# ./netperf -t UDP_RR -H 192.168.0.138 -l 60 -- -r 64,1024</code>

<code>MIGRATED UDP REQUEST/RESPONSE TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.0.138 () port 0 AF_INET : first burst 0</code>

<code>229376 229376 64 1024 60.00 10635.03</code>

<code>229376 229376</code>

<code>UDP_RR</code> 方式使用 UDP 分組進行 request/response 的交易過程。由于沒喲 TCP 連接配接所帶來的負擔,是以交易率相對 <code>TCP_RR</code> 方式一般會有相應的提升。

但是如果出現了相反的結果,即交易率反而降低了,也不用太驚訝,因為這說明在網絡中,路由器或其他網絡裝置對 UDP 采用了與 TCP 不同的緩沖區空間和處理技術。

測試的時候,常常由于防火牆的原因造成網絡不能連接配接,這時候可以設定或關閉防火牆後再測試。關閉和啟動防火牆指令:

<code>service iptables stop/start;</code>