Network performance utilities
檢視網路效能的工具有區分軟體類的以及硬體類的.
Software based
- Iperf – https://benjr.tw/462
- IxChariot – https://benjr.tw/470
IXIA 專業級的網路效能測試工具,相關系列 IxAutomate , IxExplorer , IxLoad - Netperf
- NTttcp – https://benjr.tw/94564
Hardware based
- Spirent Smartbits 1G , Test center 10G
smartbits – https://benjr.tw/638 / TestCenter – https://benjr.tw/633 ,是一套專門用來檢視網路設備的硬體檢測裝置,是由 SPIRENT 這一家公司所提供主要可以用來檢視網卡或是 switch 等網路裝置. - Ixia – IxNetwork
Impacted Network Performance
系統裡面哪些會影響到 Network 網路的效能?
- System: OS, CPU , Memory , BIOSe setting, PCI-E
在 Linux 下要如何得知 PCI-E Bus 使用的是 Gen(Generation) 1 還是 Gen2 還是新一代的 Gen 3 .請參考 https://benjr.tw/10842
簡單的來說 如果是 10G x1 (port 埠) 就要使用 PCI-E Gen2 x4(16Gb/s) 以上的, 10G x2 (port 埠) 就要使用 PCI-E Gen2 x8(32Gb/s) 以上的,但如果是 40Gx1 (port 埠) 就要使用 PCI-E Gen3x8(63Gb/s) 以上的. - Ethernet : NVM image , Driver version , Driver configuration
- Switch
- Traffic Generator : Software traffic generator , HW traffic generator
Performance Tuning
如何調整系統讓 Network 的效能會更好.
- Disable irqbalance
# Killall irqbalance
或是
# /etc/init.d/irqbalance stop
IRQ (Interrupt request) 是當週邊裝置需要資料的傳輸時會產生一個中斷請求給 CPU ,並請 CPU 停止工作並幫忙處理處理週邊資料的傳輸,不過現在的系統都是多處理器或是多核心的處理器(CPU),所以作業系統透過 irqbalance 這個服務定期強制中斷應用程式(但 CPU 在切換不同的中斷時需要額外的時間處理 新資料的寫入和暫存指令快取),讓每個應用程式能更公平的方式分享 CPU 的資源,但在 realtime 即時環境下,應用程序通常是專用的,並綁定到特定的 CPU,所以不需要 irqbalance 這個服務守護.
所以啦!! 你也可以直接停掉服務試試看效能會不會比較好.
關於中斷 irqbalance 請參考 https://benjr.tw/93539
- To turn off ITR
# ethtool -C ethX rx-usecs 0 tx-usecs 0 adaptive-rx off adaptive-tx off
ITR (Interrupt Throttle Rate) 不知道是幹嘛的,不過這邊使用了兩個參數 x-usecs , tx-usecs 與 adaptive-rx , adaptive-tx
我們先來看看什麼是 adaptive-rx , adaptive-tx, 查了一下參數資料 MTNIC_for_XEN_Readme.txt 相信還是看不懂.
x-usecs , tx-usecs : Above an upper limit of packet rate, adaptive moderation will set the moderation time to its highest value. Below a lower limit of packet rate, the moderation time will be set to its lowest value.
adaptive-rx , adaptive-tx : By default, the driver uses adaptive interrupt moderation for the receive path, which adjusts the moderation time to the traffic pattern不過在 Intel 的 gbe-controllers-interrupt-moderation-appl-note.pdf 文件有提到關於 ITR (Interrupt Throttle Rate)
其實概念很簡單 Intel 的網路卡有針對 ITR (Interrupt Throttle Rate) 做限制,也就是我們可以透過設定針對 Ethernet 網卡對系統處理器發出的 interrupt 的頻率.一共有 4 種演算法個針對不同的 I/O 狀況而定的.
- Bulk/Intermediate – 適用於大量的一般封包的網路傳輸.
- Low Latency – 流量不大 而且 小的數據封包明顯是多數時
- Lowest Latency – 小流量而且大多是小數據封包
除了可以透過 ethtool 來設定,在 Linux 下可以在載入模組時就先設定好.
- insmod e1000.ko InterruptThrottleRate=1 (Mode 1)
- insmod e1000.ko InterruptThrottleRate=0 (ITR off)
- insmod e1000.ko InterruptThrottleRate=8000 (Fixed value for all I/O patterns)
多個網路裝置時,可以一起設定.
- insmod e1000.ko InterruptThrottleRate=1,1,1,1
在 Linux 下 Interrupt Throttle Rate 與 Interrupt Rates ,Latency ,CPU Utilization 的數值如下
Mode/Value Interrupt Rates Latency Throughput CPU Utilization 3 4,000 to 20,000 High to Low High Low to High 1 4,000 to 70,000 High to Low High Low to High 0 No Limit Lowest Varies Highest Fixed Value 100 to 100,000 High to Low Varies Low to High 接下來討論 rx-usecs 與 tx-usecs ,通常封包資料從收到,到處理完然後再處理下一個封包資料的時間被稱為延遲 (latency) 時間.如果延遲時間太短則 cpu overhead (消耗 CPU)就會高.所以通常 kernels 2.6.15 以前的版本是 25us,之後的版本是 75us (單位為 us 10的負6次方,0.000001 秒).
- Run IRQ affinity
# set_irq_affinity ethX
IRQ (Interrupt request) 是當週邊裝置需要資料的傳輸時會產生一個中斷請求給 CPU ,並請 CPU 停止工作並幫忙處理處理週邊資料的傳輸,但 CPU 在切換不同的中斷時需要額外的時間處理 新資料的寫入和暫存指令快取),所以為了幫助平衡被中斷所產生的 CPU 負載,irq affinity 可以將特定 irq 的中斷隔離到單一個 CPU,使負載都是在這同一個處理器來處理.
關於 irq affinity 請參考 https://benjr.tw/99353 - To set ring size
ring size (或是 ring buffer) 是網路卡所需要的一塊記憶體空間,藉由增加網路介面接收信號緩衝區( ring size , ring buffer ) 的容量有助於抑制行程切換次數的增加,我們可透過 ethtool -g ethX 顯示數值,或是透過 ethtool -G ethx 來設定,不過這最大值在編譯驅動程式時就已經決定.# ethtool -G ethX rx 4096 tx 4096
- To turn off general receive offload
GRO (generic receive offload) 他是 LRO(Large Receive Offload) 的增強版,主要是針對TCP的機制,LRO 與 GRO 它將多個 TCP 封包集合在一個大封包才交給上層的其他網絡協議,這樣可以減少上層協議處理的數量.但如果在測試效能時,還是關閉這樣功能,避免效能的降低.我們可透過 ethtool -k ethX 顯示數值,或是透過 ethtool -K ethx 來設定
# ethtool -K ethX gro off
- Disable CPU C stat
ACPI 定義了 C-State 也就是 CPU 的省電模式,其中包含了 C0(CPU 的 Working State)以及 Cx (x >= 1 CPU的睡眠模式). - Disable ASPM
ASPM (Active State Power Management)主動式電源的管理機制是針對 PCI-E 的省電模式管理的新模式. - Check PCIe max_payload_size
最大的資料承載量大小(Max Payload Size) 也就是 PCI-E 重送緩衝器的大小. - Hardware Traffice Generator – run with multiple source IP addesses
iPerf或NetPerf所使用的buffer size在測高速(10G, 40G, 100G)或多端口(Many-Port)時會有一定程度的影響。
TDP 測試常受限 CPU 的 Computing power而有throughput降低,UDP packet被drop (注意: 通常不是LAN/NIC missed 掉 packet) 的現象。這點在使用 iPerf, NetPerf, NetPipe甚至 Sprient TestCenter都常碰到。
鼓勵再延伸到 “Thread” 與 “Core” 能力的影響。Core-Thread-Memory-FIFO-Buffer-Queue的affinity是絕對值的延伸的課題。