close

使用Iperf測試網路效能

文/楊啟倫 (記者) 2009-05-15

測試傳輸效能及穩定度其實很容易,我們將教會你如何透過免費工具來做到這件事。

 
在企業評估網路設備的流程中,實際測試佔了非常重要的一環(愈大型的產品更是如此),目的是為了找出符合需求的設備,避免IT投資的浪費。一般來說,網路 設備的測試有兩種常見的做法,一種是將設備直接部署上線,觀察它在真實流量下的運作情況,至於另外一種方式則是利用工具取得數據。

雖然透過工具測試網路設備,經常會與實際環境下的結果有所落差,不過對於測試時間有限的企業來說,仍然是可行的做法,而我們所要介紹的Iperf,正是一套常用的免費流量產生工具,可以幫助企業測試網路設備的傳輸效能,或者找出實際環境當中的效能瓶頸。

能在Windows等多種平臺環境下運作
我們此次使用的Windows版本Iperf主程式執行檔,可以在http://www.noc.ucf.edu/Tools/Iperf /iperf.exe下載,它支援Windows、Linux等多種平臺環境。除了該工具之外,網路上常見的類似測試工具還包括了Netperf。

就我們這次使用的Windows版本來說,程式不需要安裝就能直接使用。只要將Iperf.exe的主程式放置到適當路徑(例如C:\),之後就可以在命令提示字元的環境下,以指令方式運行Iperf的各項功能模式。

既然是以流量方式測試效能,因此執行Iperf的電腦需有兩臺,分別以伺服器及用戶端的模式開啟,其中前者負責接收用戶端電腦傳送而來的流量,並產生效能數據。

就一般最常見的應用來說,只需要在Iperf主程式所在的目錄下,執行「iperf.exe -s」指令,就能讓電腦進入Iperf的伺服器模式。

用戶端的操作指令就相對複雜一些,除了輸入「-c」參數啟用Iperf的用戶端模式之外,至少需要指定Iperf伺服器所在的IP位址,才能傳送流量到伺服器做測試。

為了免去使用者理解參數功能的不便,因此後來也出現所謂的Jperf,也就是在原有的Iperf主程式之上,加上一個以Java編寫而成的圖形化介面,只要電腦本身有安裝JVM軟體,直接點選Jperf.bat這個批次檔,就能開啟圖形介面,操作Iperf的各項測試。

功能以流量測試為主
Iperf最常見的應用之一,是用來測試網路設備的NAT效能,以居易的Vigor2110路由器為例,我們將兩臺電腦分別接在這臺設備的WAN 及LAN埠,做為伺服器及用戶端電腦,經由傳輸流量所得的NAT效能為76.9Mbps,意味該款設備能夠介接的總頻寬(上傳+下載)大小約在 76~77Mbps左右。

不過隨著設備啟用的功能愈來愈多,對於NAT轉送流量的能力也會有所影響(以企業端的UTM為例,影響最大的是閘道防毒、IPS及VPN等三項功 能,個人端設備的瓶頸則多半在於QoS),而以網路設備本身的設計來說,一般影響NAT效能表現的因素,由大至小,分別是處理器/記憶體、韌體及網路介面 等三項。

當流量透過網路介面送入設備之後,會經由處理器的運算,根據封包表頭所提供的資訊而決定流向,而在開啟多項功能使得硬體資源消耗過多時,用來解析封包的硬體資源就會相對減少,使得效能下降。

至於網路設備的韌體,就如同電腦的作業系統,當韌體撰寫得太過肥大,佔用太多的系統資源時,也同樣會影響效能表現。

網路介面對於NAT效能的影響比較不明顯,多數網路設備內建的交換器晶片在等級上並沒有明顯的差異,不過也有少數設定不良的晶片會在網路封包密集傳送的情況下,出現比較明顯的效能波動。

傳送流量之餘,也能測試設備運作是否穩定
Iperf預設的測試時間是10秒,也就是說需以每10秒為一個段落進行傳輸測試。不過我們一般都會將測試時間拉長,同時增加傳輸次數,藉此瞭解流量傳輸的起伏,判斷穩定與否,這時可利用「-t」參數,設定用戶端傳輸流量的秒數。

在傳送流量的同時,也能透過Iperf對於網路設備實施壓力測試,利用「-P」參數,同時模擬多臺電腦傳輸流量的行為,測試設備在開啟大量連線數 的情況下,能否持續正常運作,不過我們建議,如果要開啟大量的連線數,最好是使用Linux、FreeBSD版本的Iperf執行這項測試。

也能用於無線網路的效能測試
不只是有線網路的環境,Iperf也很適合用來測試無線網路,尤其是支援802.11n草案的無線網路設備。

相較之下,Ixia的IxChariot及Qcheck是經常用來測試無線網路的兩套代表性軟體,但使用上都有一些限制,IxChariot的功 能雖然強大,然而使用上必須付費,同時使用者也必須瞭解如何設定測試的範本,形成一定的使用門檻;至於免費版本的Qcheck最多僅能傳送1MB大小的測 試檔案,在802.11n的環境下,往往未達效能傳輸的頂點,測試即告結束,因此僅能在802.11a/b/g的環境下測試無線網路的效能。

由於可以長時間傳送大量流量,因此很多人也以Iperf測試無線網路,這裡我們使用了SMC的SMCWBR14S-N2無線路由器,搭配同廠牌 USB介面的SMCWUSBS-N網卡,在40GHz頻寬的802.11n模式下,透過Iperf測得的速度最快為79.4Mbps,與透過 IxChariot 5.4試用版測試所得的數據相差不多。文⊙楊啟倫

使用Iperf測試網路設備效能

我們將示範4個步驟,透過Iperf測試網路設備效能,使用居易的Vigor2110及支援802.11n無線網路標準的SMC SMCWBR14S-N2兩款消費端的路由器設備做為Iperf的測試平臺,在設備還原為出廠預設值的情況下,執行效能的傳輸測試。


 我們在連接居易Vigor 2110路由器WAN埠的電腦上輸入了iperf.exe–s指令,將該臺電腦設定為Iperf的伺服器。


在另外一臺連接LAN埠的電腦上輸入指令,傳送流量到伺服器端測試效能,測試完畢後,在兩端的命令提示字元視窗皆會顯示測試結果。

 


為了方便示範,這裡我們僅開啟了5個Session測試Vigor 2110同時傳輸封包,對於有意實施壓力測試的人來說,可以加大同時傳輸的Session數量。


就無線網路的測試來說,在搭配同廠牌USB 介面的SMCWUSBS-N網卡,我們透過perf測得79.4Mbps的效能數據,大致符合802.11n的效能要求。

 

iperf-1.7.0的移植(Porting iperf-1.7.0 to arm linux platform)

1.cd 進入 iperf-1.7.0 目錄;
2.make config (會生成config.h config.log config.status Makefile.rules);
3.修改Makefile.rules, 將其中的CC C++ LD AR RANLIB 改為你的cross compile 工具;
4.make (會生成 iperf);
5.copy iperf 到你的嵌入式平台中;
6.在你的嵌入式平台中執行iperf, 會提示缺少兩個庫文件, 於是將這兩個庫文件copy 到你的嵌入式平台上(你平台的RAM要夠大或帶有硬盤也可,別忘了為你兩個庫文件在/lib/目錄下創建聯接);
7.執行iperf, OK!

註:當然,如果在CFLAGS 中加入-static 的話,第6步就不需要了。

 

網路效能測試工具 「iperf」

       Iperf是一個TCP/IP和UDP/IP的性能測量工具,能夠提供網路吞吐量訊息,以及震動、封包丟失、最大段和最大傳輸單元大小等統計信息;從而能夠幫助我們測試網路性能,定位網路瓶頸.perf 支援大多數的作業系統,如: Windows,Linux,FreeBSD,MACOSX,Solaris等等,使用上非常簡單,在你的網路環境中準備兩台電腦,各架設於兩端點間,如 core switch到RD switch之間,一邊設定為iperf server,另一邊設定成iperf client,這麼一來你就可以知道core switch與RD switch之間的throughput能達到多少!

Step 1.下載程式
Step 2.安裝 iperf(Server端)
Step 3.安裝 iperf(client端)
Step 4.看 iperf 結果
Step 5.iperf 參數
Step 6.jperf 圖形(GUI) 介面的 iperf

 

Step 1.下載程式
通常我們在 Linux 下面可以透過 Iometer 去測試硬碟的效能速度,那網路呢!!要以免費最簡單使用的就算是 iperf 了.Iperf 是由 NLANR( National Laboratory for Applied Network Research)所開發出來的工具,主要 iperf 可以用來量測網路的最大的 TCP / UDP  網路頻寬/效能,但僅僅如此如果你需要更精準的網路效能或是穩定度那建議使用 另外一套專業級的網路效能測試工具 - IxChariot (http://benjr.tw/?q=node/433).不過我們先來看看 iperf 如何使用, iperf 並不是 Linux 系統預設套件,可以從 sourceforge 中下載. http://sourceforge.net/projects/iperf 它支援的作業系統包括了  linux, unix 和 window,採用 Server / Client 模式進行量測.

 

[root@Server ~]#svn co https://iperf.svn.sourceforge.net/svnroot/iperf iperf

測試環境如下:

基本上只要兩台 Linux 機台就可以做網路效能測試,當然兩張網卡速度要一致,並同時將這個程式安裝在 Server 和 Client 上面.


Step 2.安裝 iperf(Server端 IP:192.12.1.2)

[root@Server ~]# tar iperf
[root@Server ~]# cd iperf    
#configure for your machine
[root@Server iperf]# ./configure
#compile Iperf
[root@Server iperf]# make   
#install Iperf, if desired          
[root@Server iperf]# make install    
[root@Server iperf]#
iperf -s           

Server 端的程式要先開,去監看 Client 端的封包!預設使用 TCP port 5001.TCP read/write buffer 預設是 8KB.


Step 3.安裝 iperf(client端 IP:192.12.1.1)

[root@benjr ~]# tar iperf
[root@benjr ~]# cd iperf
#configure for your machine
[root@benjr iperf]# ./configure
#compile Iperf
[root@benjr iperf]# make   
#install Iperf, if desired          
[root@benjr iperf]# make install 
[root@benjr iperf]#
iperf -c 192.12.1.2  -t 60 -i 30   
#-c : server IP
#-t : 測量時間間隔為60秒
#-i : 每隔 x 秒將測量結果顯示出來,最後再算出平均值.


Step 4.看 iperf 結果
(Server端 IP:192.12.1.2)

[root@Server ~]# iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[  4] local 192.12.1.2 port 5001 connected with 192.12.1.1 port 37994
[ ID] Interval       Transfer     Bandwidth
[  4]  0.0-60.0 sec  6.58 GBytes    941 Mbits/sec

顯示結果依序為1.執行時間  2.時間內所傳輸的總資料量. 3.頻寬為  941 Mbits/sec,跟我們實際 1G 頻寬差不多了.

(client端 IP:192.12.1.1)

[root@benjr ~]# iperf -c 192.12.1.2 -t 60 -i 30
------------------------------------------------------------
Client connecting to 192.12.1.2, TCP port 5001
TCP window size: 16.0 KByte (default)
------------------------------------------------------------
[  3] local 192.12.1.1 port 37994 connected with 192.12.1.2 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0- 30.0 sec    3.3 GBytes    941 Mbits/sec
[ ID] Interval       Transfer     Bandwidth
[  3]  30.0-60.0 sec    3.28 GBytes    942 Mbits/sec
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-60.0 sec  6.58 GBytes    942 Mbits/sec


Step 5.iperf 參數
-w n[KM]  指定 TCP window size
-l n[KM] 指定 read/write buffer 大小(預設為 8k)
-Pn (大寫的P) client 端指定同時 (parallel) 跑幾個的 threads

[root@Server ~]# iperf -s -w 2M -l 64k
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size:   256 KByte (WARNING: requested 2.00 MByte)
------------------------------------------------------------
[  4] local 192.7.1.2 port 5001 connected with 192.7.1.1 port 41278
[  5] local 192.7.1.2 port 5001 connected with 192.7.1.1 port 41279
[  6] local 192.7.1.2 port 5001 connected with 192.7.1.1 port 41280
[  7] local 192.7.1.2 port 5001 connected with 192.7.1.1 port 41281
[ ID] Interval       Transfer     Bandwidth
[  5]  0.0-120.0 sec  32.1 GBytes  2.30 Gbits/sec
[ ID] Interval       Transfer     Bandwidth
[  6]  0.0-120.0 sec  33.4 GBytes  2.39 Gbits/sec
[ ID] Interval       Transfer     Bandwidth
[  4]  0.0-120.0 sec  32.2 GBytes  2.31 Gbits/sec
[ ID] Interval       Transfer     Bandwidth
[  7]  0.0-120.0 sec  33.3 GBytes  2.38 Gbits/sec
[SUM]  0.0-120.0 sec    131 GBytes  9.38 Gbits/sec

Server 和 Client 需要用相同的參數才可以跑!

[root@benjr ~]# iperf -c 192.12.1.2  -t 60 -i 5 -w 2M -l 64k -P4


Step 6.jperf 圖形(GUI) 介面的 iperf
xjperf 是有圖形 GUI 介面的 iperf,不過他是架構在 iperf 必須先安裝過 iperf 才可以使用.下載點在 http://code.google.com/p/xjperf/downloads/list 方式也很簡單,先行安裝完 iperf http://benjr.tw/?q=node/369. 再解開 xjperf 即可執行

[root@benjr ~]# unzip jperf2.0.0.zip
Archive:  jperf2.0.0.zip
   creating: bin/
   creating: lib/
  inflating: bin/iperf.exe          
  inflating: jperf.bat              
  inflating: jperf.sh               
  inflating: jperf2.0.0.jar         
  inflating: lib/forms-1.1.0.jar    
  inflating: lib/jcommon-1.0.10.jar 
  inflating: lib/jfreechart-1.0.6.jar 
  inflating: lib/swingx-2008_02_03.jar 
[root@benjr ~]# sh jperf.sh
 
 

相對應的指令參數會顯示在最上面,就如圖我們在使用 iperf 時一樣.不過我在 RHEL5 Update 2 上面使用時這一隻程式倒是常常當掉.

 

Iperf使用說明

Iperf 是一個 TCP/IP 和 UDP/IP 的性能測量工具,能夠提供網路吞吐率信息,以及震動、丟包率、最大段和最大傳輸單元大小等統計信息;從而能夠幫助我們測試網路性能,定位網路瓶頸。

參數說明

-s 以server模式啟動,eg:iperf -s
-c host以client模式啟動,host是server端地址,eg:iperf -c 222.35.11.23

通用參數

-f [k|m|K|M] 分別表示以Kbits, Mbits, KBytes, MBytes顯示報告,預設以Mbits為單位,eg:iperf -c 222.35.11.23 -f K
-i sec 以秒為單位顯示報告間隔,eg:iperf -c 222.35.11.23 -i 2
-l 緩衝區大小,預設是8KB,eg:iperf -c 222.35.11.23 -l 16
-m 顯示tcp最大mtu值
-o 將報告和錯誤信息輸出到檔案eg:iperf -c 222.35.11.23 -o c:\iperflog.txt
-p 指定服務器端使用的端口或客戶端所連接的端口eg:iperf -s -p 9999;iperf -c 222.35.11.23 -p 9999
-u 使用udp協議
-w 指定TCP窗口大小,預設是8KB
-B 綁定一個主機地址或通訊埠(當主機有多個地址或通訊埠時使用該參數)
-C 兼容舊版本(當server端和client端版本不一樣時使用)
-M 設定TCP資料封包的最大mtu值
-N 設定TCP不延時
-V 傳輸ipv6資料封包

server專用參數

-D 以服務方式運行ipserf,eg:iperf -s -D
-R 停止iperf服務,針對-D,eg:iperf -s -R

client端專用參數

-d 同時進行雙向傳輸測試
-n 指定傳輸的位元組數,eg: iperf -c 222.35.11.23 -n 100000
-r 單獨進行雙向傳輸測試
-t 測試時間,預設10秒,eg: iperf -c 222.35.11.23 -t 5
-F 指定需要傳輸的檔案
-T 指定ttl值

 

運作方式:

1.隨意選擇結點A作為Server端,而B作為客戶端,在A上進入命令提示字元執行iperf -s,這樣iperf將以Server端方式啟動,並且通過TCP的5001port監聽.

2.接下來我們到B節點進入命令提示字元,然後執行iperf -c 192.168.0.199 -t 60,這個命令是將B節點以客戶端的方式運行,並且連接IP地址為192.168.0.199的服務端,監視測量數據時間是60秒.

3.執行完畢客戶端將自動開啟1903port連接服務端的5001port,通過發送與接收數據來實現測量頻寬的目的.

4.與此同時我們在Server端上也可以看到有客戶端連接5001port的提示,這表明兩個節點已經建立了相應的連接,數據通訊正常.

5.由於我們之前是設置了測量時間間隔為60秒,所以在60秒過後客戶端節點上就會顯示出測量的具體數據.

6.當然我們還可以通過在客戶端上執行iperf -c 192.168.0.199 -t 60 -i 2,這樣將每隔兩秒自動將測量結果顯示出來,在最後再計算其平均值.

 

當需要測試網路環境中的速度是否為理想狀況時,最普通的是利網路芳鄰、FTP傳軟來達成測試的目地,但如果需要重覆測試取得平均值時,這樣的測法可能比較沒有效率了,所以有iperf這樣的工具對於測試網路傳輸的速度來說就較方便。要使用iperf的話就要有2台電腦,一台為serve端,另一台為client端,此次以windows環境來當做示範,需要windows版本可以到這裡下載取得,其他平台的話,iperf有提供原始碼可以供其他平台重新編譯就可以使用。

以下則開始介紹如何使用iperf,分為Server與Client,要先執行Server程式再執行Client。

 

Server(伺服端):

執行iperf –s


 

Client(客戶端):

iperf –c 192.168.3.58 –w 100M –t 120 –i 10


-c 192.168.3.58   :Server端的IP

-w 100M          :測試的檔案大小

-t  120             :監視測量數據時間為120秒

-i  10              :每隔10秒將數據顯示出來

 

測試完成會如下面的圖總共測試從0.0~121.3秒,傳輸9.28GByte,


 

      所使用的平均速度在657Mbits/sec,對於1Giga來說已經發揮6成的速度,當然這個環境下測試的值並不是理想值,在測試時還有另外在操作網路上的軟體,所以速度並沒有我第一次在測試時平均可以跑到800Mbits/sec,想要知道自已網路環境是否為較合理的值可以使用iperf測試看看,把問題找出來。

      通過簡單的設置和簡單的指令我們輕鬆實現了針對內網兩個節點之間頻寬傳輸速度的測量,當然iperf程序還支援很多參數,具體設定我們可以參考其 HELP,比較常用的有-l 緩衝區大小-m 顯示tcp最大mtu值-p 指定伺服端使用的port或客戶端所連接的port-u 使用udp協議-w 指定TCP窗口大小,預設是8KB-M 設定TCP資料封包的最大mtu值等。另外在客戶端上可以通過-n 指定傳輸的位元組-r 單獨進行雙向傳輸測試,在伺服端則可以通過-D參數以服務方式運行ipserf,以-R來停止iperf服務.

 

Iperf 實做,tcp 與 udp 測速

# wget -c http://ncu.dl.sourceforge.net/project/iperf/iperf/2.0.4%20source/iperf-2.0.4.tar.gz
# mkdir iperfV2
# mv iperf-2.0.4.tar.gz iperfV2
# cd iperfV2
# gzip -d iperf-2.0.4.tar.gz
(解壓縮)
# tar xvf iperf-2.0.4.tar
# cd iperf-2.0.4
# ./configure

# make
# make install-----
到此時已經順利安裝完成
# iperf -s 127.0.0.1 (開啟iperf server端程式,使用tcp通訊協定)
# iperf -s 127.0.0.1 -u (開啟iperf server端程式,使用udp通訊協定)


此時server端的軟體已經啟動.
接下來於client端(windows system)在安裝檔的bin目錄下,並於dos視窗中執行
 

# iperf -c [遠端ip] -w 1M (TCP通訊協定)

或是
 

# iperf -c [遠端ip] -w 1M -u (UDP通訊協定)

 

 

 

arrow
arrow
    全站熱搜

    Bluelove1968 發表在 痞客邦 留言(0) 人氣()