網絡性能測試工具iperf


參考網站:https://www.cnblogs.com/yingsong/p/5682080.html

https://docs.azure.cn/zh-cn/articles/azure-operations-guide/virtual-network/aog-virtual-network-iperf-bandwidth-test     (微軟雲測試帶寬工具iperf)

工具下載地址:

https://iperf.fr/iperf-download.php

 

iPerf 簡介

網絡帶寬是衡量兩個網絡節點之間通信性能的重要的指標之一。在評估雲服務的時候,要充分考慮網絡帶寬對所承載的網路服務的影響。若已經部署的網絡服務出現了故障,有時候可以考慮從網絡實時帶寬的角度來進行故障排查。

網絡帶寬測試的工具有很多,測試方法也多種多樣。針對 Azure 的虛擬機和雲服務,我們推薦使用 iPerf 來進行網絡帶寬測試。iPerf 是專業的網絡測試工具,它基於 TCP/IP 和 UDP/IP 協議,用以測量兩個網絡節點之間 TCP 和 UDP 端口的網絡帶寬,還能提供網絡延遲、丟包率等統計信息。

iPerf 常用的版本有 iPerf2 和 iPerf3。 iPerf3 在 iPerf2 的基礎上新增了一些功能,例如發送方/接收方角色互換,以 JSON 格式輸出結果,零拷貝方式傳輸數據等等。也去掉了 iPerf2 中所支持少許功能,例如雙向測試,以逗號為分隔符輸出結果等。iPerf3 和 iPerf2 所執行的命令名字也不一樣,iPerf3 為 iperf3,iPerf2 為 iperf。大家可以根據實際需要來選擇安裝的版本。下文中的測試都以 iPerf3 為例。

iPerf 在工作時,測試的兩端一方作為 Server,另一方為 Client。程序啟動的命令相同,通過不同的參數來區別以哪種工作方式運行。通常情況下先啟動 Server 端,使 iPerf 監聽在某個固定端口。然后在 Client 端執行相應的命令開始測試。

iPerf 下載和安裝

iPerf 支持大多數主流的操作系統,例如 Windows,Ubuntu,Fedora,openSUSE 和 Mac OS 等等。甚至在 Android 和 iPhone/iPad 的應用商店中,也有一款名為 HE.NET Network Tools 的 App 集成了 iPerf 工具。iPerf 下載網址。這個網頁上列出了所有支持的操作系統的 iPerf 下載鏈接。最新的版本為 iPerf 3.1.3(不同操作系統所支持的最高版本可能不同)。如果要使用 iPerf2,可以下載 2.0.X 的版本。

Windows 版的 iPerf 下載、解壓后可以直接在命令提示符下運行。Windows 版的 iPerf 還有 UWP 版本,可以從 Microsoft Store 的 Windows App 中下載。針對不同發行版本的 Linux,iPerf 提供了 RPM 、DEB 等格式的安裝包,直接用 rpm、dpkg 等命令安裝即可。

當然,在沒有找到合適的安裝包時,大家也可以選擇源碼包編譯安裝。以下是在 SuSE12.1 中使用源碼包安裝 iPerf3 的安裝步驟,供參考。

  1. 確保 gcc 和 make 已安裝。

    #zypper in gcc
    #zypper in make
    
  2. 下載並解壓 iperf 源碼包

    #cd /tmp
    #wget http://downloads.es.net/pub/iperf/iperf-3-current.tar.gz
    #tar zxvf iperf-3-current.tar.gz
    
  3. 安裝 iperf

    #cd iperf-3.1.2/
    #./configure
    #make
    #make install
    

完成后,iperf3 被安裝至/usr/local/bin/下,在系統的任意路徑都可以執行。

若 iperf 運行報以下錯誤:

iperf3: error while loading shared libraries: libiperf.so.0: cannot open shared object file: No such file or directory

通常運行 ldconfig 命令可以解決此問題。

iPerf 工作模式和參數

如前文所述,iPerf 的工作時需要指定 Server 模式或 Client 模式,通過不同的參數來區別(-s 和-c)。iPerf3 所支持的功能也都通過設置不同的參數來實現。iPerf 的參數分為 3 類:通用參數,Server 端參數,Client 端參數。通用參數為 Server 端和 Client 端都可以使用的參數。以下是 iPerf 3.1.2 支持的所有參數:

  • 通用參數:
    • -p, --port #,Server 端監聽、Client 端連接的端口號;
    • -f, --format [kmgKMG],報告中所用的數據單位,Kbits, Mbits, KBytes, Mbytes;
    • -i, --interval #,每次報告的間隔,單位為秒;
    • -F, --file name,測試所用文件的文件名。如果使用在 Client 端,發送該文件用作測試;如果使用在 Server 端,則是將數據寫入該文件,而不是丟棄;
    • -A, --affinity n/n,m,設置 CPU 親和力;
    • -B, --bind ,綁定指定的網卡接口;
    • -V, --verbose,運行時輸出更多細節;
    • -J, --json,運行時以 JSON 格式輸出結果;
    • --logfile f,輸出到文件;
    • -d, --debug,以 debug 模式輸出結果;
    • -v, --version,顯示版本信息並退出;
    • -h, --help,顯示幫助信息並退出。
  • Server 端參數:
    • -s, --server,以 Server 模式運行;
    • -D, --daemon,在后台以守護進程運行;
    • -I, --pidfile file,指定 pid 文件;
    • -1, --one-off,只接受 1 次來自 Client 端的測試,然后退出。
  • Client 端參數
    • -c, --client ,以 Client 模式運行,並指定 Server 端的地址;
    • -u, --udp,以 UDP 協議進行測試;
    • -b, --bandwidth #[KMG][/#],限制測試帶寬。UDP 默認為 1Mbit/秒,TCP 默認無限制;
    • -t, --time #,以時間為測試結束條件進行測試,默認為 10 秒;
    • -n, --bytes #[KMG],以數據傳輸大小為測試結束條件進行測試;
    • -k, --blockcount #[KMG],以傳輸數據包數量為測試結束條件進行測試;
    • -l, --len #[KMG],讀寫緩沖區的長度,TCP 默認為 128K,UDP 默認為 8K;
    • --cport ,指定 Client 端運行所使用的 TCP 或 UDP 端口,默認為臨時端口;
    • -P, --parallel #,測試數據流並發數量;
    • -R, --reverse,反向模式運行(Server 端發送,Client 端接收);
    • -w, --window #[KMG],設置套接字緩沖區大小,TCP 模式下為窗口大小;
    • -C, --congestion ,設置 TCP 擁塞控制算法(僅支持 Linux 和 FreeBSD );
    • -M, --set-mss #,設置 TCP/SCTP 最大分段長度(MSS,MTU 減 40 字節);
    • -N, --no-delay,設置 TCP/SCTP no delay,屏蔽 Nagle 算法;
    • -4, --version4,僅使用 IPv4;
    • -6, --version6,僅使用 IPv6;
    • -S, --tos N,設置 IP 服務類型(TOS,Type Of Service);
    • -L, --flowlabel N,設置 IPv6 流標簽(僅支持 Linux);
    • -Z, --zerocopy,使用 “zero copy”(零拷貝)方法發送數據;
    • -O, --omit N,忽略前 n 秒的測試;
    • -T, --title str,設置每行測試結果的前綴;
    • --get-server-output,從 Server 端獲取測試結果;
    • --udp-counters-64bit,在 UDP 測試包中使用 64 位計數器(防止計數器溢出)。

iPerf 功能十分強大,支持的參數特別多。但是在實際使用中,並不需要同時使用這么多參數。使用時,根據實際需求來設置關鍵參數就可以了。

Azure 中使用 iPerf

前期准備

開始測試之前,需要先弄清測試對象所處網絡位置。如果測試對象之間有防火牆阻隔,則需要先設置防火牆規則,使其允許測試兩端的 iPerf 進行通信。通常情況下,測試時我們會指定 iPerf Server 端監聽的端口,比如設為 TCP-5001,那么在防火牆上就需要開啟對應的 TCP-5001 端口的訪問規則。如果 Server 端部署在 Azure 的經典模式下,需要設定對應虛擬機或雲服務的終結點;如果是資源管理器模式下部署的虛擬機,則需要設置 NSG 規則,見下圖。

終結點(Endpoint,經典模式):

網絡安全組(NSG,資源管理器模式):

需要說明的是,iPerf 測試不可避免產生數據流量。如果測試時有進出 Azure 的數據流量,很可能會產生相對應的費用。所以測試前務必做好測試計划,以免不必要的數據流量造成計划外的支出。

開始測試

首先在 Server 端,我們運行以下命令使 iPerf 監聽 5001 端口,每 2 秒輸出一次結果。

#iperf3 -s -p 5001 -i 2

當終端顯示 Server listening on 5001 時,就表示 Server 已經正常運行,等待測試了。 然后在 Client 端,我們並發 4 個數據流,測試總時長為 30 秒,每 2 秒輸出一次結果。以下為測試所使用的命令。

#iperf3 -c 139.219.2XX.XXX -P 4 -t 30 -i 2 -p 5001

當 Client 端的命令執行后,測試就開始了。

終端會每隔 2 秒滾動顯示測試的結果,最后還有整個測試的總結。

測試完成后,再次用以下命令測試並發 8 個數據流的情況,對比結果將在結果解讀中展現。

#iperf3 -c 139.219.2XX.XXX -P 8 -t 30 -i 2 -p 5001

結果解讀

測試時,iPerf 的 Server 端和 Client 端都會輸出測試結果。測試過程中,根據報告間隔時間的參數,終端會不斷地顯示當前時間間隔內測試結果。當測試結束后,iPerf 將測試結果匯總,輸出最終測試結果。

過程輸出

下圖是第一次 4 個數據流測試過程中 Server 端的部分輸出。

可以看到 iPerf 在不同的時間間隔內,都完整的顯示了每個數據流傳送的數據大小以及帶寬。然后在第 5 行顯示當前時間間隔內的傳送的總數據大小和總帶寬。

下圖是第一次 4 個數據流測試過程中 Client 端的部分輸出。

Client 端的數據除了傳輸的數據大小和實時帶寬,還有 TCP 重傳次數(Retr)和窗口大小(Cwnd)。

最終結果

下圖是 Server 端第一次測試的最終結果。

這里可以看到 4 個數據流接收到的數據大小和平均帶寬,還有接收到的總數據和總帶寬。

我們再看一下 8 個數據流並發測試的結果,見下圖。

對比這兩個結果,我們能看出來 4 個數據流並發時,總帶寬是 163Mb/s。8 個數據流並發時,總帶寬達到了 248Mb/s。這說明 4 個數據流並發時,並沒有測試出最大帶寬。所以在實際測試時,可以通過多次調整並發數據流數量,來獲取真實的最大帶寬值。

除了並發數據流數量,TCP 窗口大小、最大分段長度、擁塞算法等等都會影響到應用程序實際能獲取到的網絡帶寬。有經驗的網絡工程師也會通過數據計算,然后設置這些相關的參數進行測試,來獲取到最大網絡帶寬。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM