2020年6月7日 星期日

iperf 密技

iPerf 是網路上最常用的測速工具。由於我們的英國的工作夥伴一直說不信任iperf3,只信任iperf 2,造成我們也半信半疑的。不過查了半天,反而看到有許多人說Iperf2的速度不準之類的說法。總之是末衷一致。

Iperf法國的官網上面說,iperf 3與iperf 2的差異,主要是iperf 3之中,拿掉了Multi-Thread的部份。換言之,原先iperf 2可以用一個Server來服務好幾個Client,Iperf 3就是只能一個Server、一台Client來對接使用。誰比較可靠,這裡就不言而喻。

iPerf 是 Server/Client 來運作,通過不同的參數來區別(-s 和-c)。iPerf3 所支援的參數如下:

通用參數(Client/Server都可以適用):
  • -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 位元數目器(防止計數器溢出)。
我常用的命令如下:

Server端比較簡單:

# iperf3 -s <Enter>

Client端:

# iperf3 -c 192.168.0.1 -u -t 360 -b 100m -S0x80 <Enter>

-u :UDP
-t  360:就是每個測試做360秒,六分鐘。
-b 100m:用100 mbps 的頻寬做UDP測試。
-S0x80:這個就有些複雜。解釋如下:

由於我通常要測 Multicasting Video,所以就設定這個參數為 -S0x80。其實這個參數與各家的Router的設計會有些關係。

-S 的參數是TOS (Type of Service),下面大致整理了一些常用的,但都只用來對於網路設備做特殊測試的時候,才需要使用:


測到目前為止,已經知道的一些問題:

1. Ubuntu 20 在一些舊筆電上面,UDP的速度,到了260Mbps就上不去了。後來改裝 14.04,速度曾回到正常的水準,UDP約可以到達960Mbps。
2. 網路線本身就會造成UDP掉包,就是用兩根線對接(我是用機房等級的CAT6線材,還加了屏障),目前還是看到許多問題,所以也許與PC的等級與網路卡的品質有些關係。這部份還會繼續測試,看能否找到完美的解決方案?
3. Iperf3 與 Iperf 2測出的結果真的不太一樣? 還是要深究,找出哪一個的數字比較準? 不過我想還是先排出PC硬體、驅動程式、作業系統的相關性。





沒有留言:

張貼留言