?Iperf是一個網絡性能測試工具。可以測試TCP和UDP帶寬質量,可以測量最大TCP帶寬,具有多種參數和UDP特性,可以報告帶寬,延遲抖動和數據包丟失??
???因為產品上確定要要用的PHY是千M的,但模塊接口又定義死了,只能用到100M。所以想測試下割掉幾根線試下100M可行不。在測之前先測下千M模式下到底性能怎么樣,之前別人一直說這我手頭上這顆ARM根本上不了千M,雖然他標稱的是可以支持千M。一準備工作做好了,開始。
我們使用的工具是iperf這個工具我是自己編譯的。現在將我的過程寫下來。iperf下載地址
先編譯PC端工具:
1.解壓源碼:
$ tar xzvf iperf-2.0.5.tar.gz
2.進入源碼目錄
$ cd iperf-2.0.5
3.配置源碼 編譯PC下的不用指定參數,用默認的即可
$? ./configure
4.編譯 后面的-j4不是必須的。
$ make -j4
5.安裝 這里要注意要用管理員權限
# make install
$ iperf -s 就可以啟動服務端。
ARM端:
1.清理源碼(就是剛才編譯過的源碼)
$ make distclean
2.設置環境變量 (就是你的ARM交叉編譯工具鏈,根據自己的實際情況改)
$ export PATH=/home/gavin/ti-sdk-am335x-evm-05.06.00.00/linux-devkit/bin:$PATH
3.配置 指定主機為ARM g++編譯器和gcc 這里根據自己的實際情況改
$ ./configure --host=arm CXX=arm-arago-linux-gnueabi-g++ CC=arm-arago-linux-gnueabi-gcc
4.修改源碼目錄下面的config.h(沒配置之前是沒有這個文件的),注釋掉 #define malloc rpl_malloc
5.編譯
$ make -j4
在iperf-2.0.5/src/下會生成iperf這個文件,這個就是我們需要的。將這個文件拷到ARM的文件系統中去。這樣PC端和ARM端的都有了。
至于iperf的使用,就不多介紹了,直接在網上copy一段下來。
Iperf使用方法與參數說明
?
參數說明
-s 以server模式啟動,eg:iperf -s
-c host以client模式啟動,host是server端地址,eg:iperf -c?10.0.0.2
?
通用參數
-f [kmKM] 分別表示以Kbits, Mbits, KBytes, MBytes顯示報告,默認以Mbits為單位,eg:iperf -c?10.0.0.2?-f K
-i sec 以秒為單位顯示報告間隔,eg:iperf -c?10.0.0.2?-i 2
-l 緩沖區大小,默認是8KB,eg:iperf -c?10.0.0.2?-l 16
-m 顯示tcp最大mtu值
-o 將報告和錯誤信息輸出到文件eg:iperf -c?10.0.0.2?-o ciperflog.txt
-p 指定服務器端使用的端口或客戶端所連接的端口eg:iperf -s -p 9999;iperf -c?10.0.0.2?-p 9999
-u 使用udp協議
-w 指定TCP窗口大小,默認是8KB
-B 綁定一個主機地址或接口(當主機有多個地址或接口時使用該參數)
-C 兼容舊版本(當server端和client端版本不一樣時使用)
-M 設定TCP數據包的最大mtu值
-N 設定TCP不延時
-V 傳輸ipv6數據包
?
server專用參數
-D 以服務方式運行iperf,eg:iperf -s -D
-R 停止iperf服務,針對-D,eg:iperf -s -R
?
client端專用參數
-d 同時進行雙向傳輸測試
-n 指定傳輸的字節數,eg:iperf -c?10.0.0.2?-n 100000
-r 單獨進行雙向傳輸測試
-t 測試時間,默認10秒,eg:iperf -c?10.0.0.2?-t 5
-F 指定需要傳輸的文件
-T 指定ttl值
?
應用實例
使用 iperf -s 命令將 Iperf 啟動為 server 模式,在客戶機上使用 iperf -c啟動client模式。
iperf –s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 8.00 KByte (default)
------------------------------------------------------------
?
iperf -c 10.0.0.2
上面使用服務端和客戶端的默認設置進行測試
?
iperf -s -w 300K
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size:? 300 KByte
------------------------------------------------------------
?
iperf -c?10.0.0.2-f K -i 2 -w 300K
?????? 設定報告間隔為2秒,服務器端和客戶端的TCP窗口都開到300KB
?
iperf -c?10.0.0.2?-f K -i 2 -w 300K –n 1000000
測試傳輸約1MB數據
?
iperf -c?10.0.0.2?-f K -i 2 -w 300K –t 36
測試持續36秒
?
iperf -c?10.0.0.2?-f K -i 2 -w 300K -n 10400000 –d
測試雙向的傳輸
?
iperf -c?10.0.0.2?-f K -i 2 -w 300K –u
UDP測試
?
其中 -i 參數的含義是周期性報告的時間間隔(interval),單位為秒;在上面的例子中,表示每隔2秒報告一次帶寬等信息。
先在PC端啟動$ iperf -s
再在ARM端執行
$ iperf -c 10.0.0.2 -f K -i 2 -w 300K -n 10000000 -t 180
執行完后,在服務器端會打印結果如下:
這能不坑爹嗎,號秒千M,跑出來是270M。
我上面這些測試數據都是通過路由器來測的,我路由器是千M的。