通信模組性能調優
- 1 背景
- 2 高通平臺軟硬加速
-
- 2.1 NSS
- 2.2 SFE
- 2.3 PPE
- 3 CPU 負載均衡設置
-
- 3.1 啟用內核 RPS&RFS 功能
- 3.2 網卡隊列修改建議
- 3.3 調整負載前后的 CPU 使用對比
- 3.4 網卡中斷均衡
-
- 3.4.1 netdev_max_backlog
- 3.4.2 中斷綁核
- 3.5 CPU性能模式
- 3.6 熱管理
- 3.7 調整接收發送緩存
- 4 示例
-
- 4.1 現狀
- 4.2 調整措施
1 背景
通信模組會與Host搭配組成CPE/ODU/IDU等整機形態使用。在整機吞吐率測試中,經常會各種原因導致的速率不達標問題,下面是一些速率優化建議。
2 高通平臺軟硬加速
高通IPQ系列上位機,支持NSS\SFE\PPE等加速。不同型號支持的加速方式也是不同的,下面是幾種加速方式的介紹。
2.1 NSS
高通NSS(Networking Subsystem)是高通路由器平臺中用于網絡加速和數據處理的子系統,主要功能包括報文分類和硬件加速。
通過分類器(classifiers)判斷哪些報文需要加速,符合條件的報文直接在NSS中以L2轉發到目的端口,繞過Linux協議棧,降低CPU負載并提升傳輸效率。
通過NPU(Network Processing Unit)實現硬件級加速,與Linux協議棧并行處理數據包,顯著提升網絡吞吐量。 ?
目前在IPQ807x、IPQ60XX和IPQ50xx上支持。
2.2 SFE
SFE(Shortcut Forwarding Engine)是高通推出的網絡加速技術,通過優化數據轉發路徑減少延遲并提升傳輸效率。早期版本與多線、流控等功能存在兼容性問題,后續通過代碼優化實現了與高恪固件的適配,支持多撥、智能流控等特性。開啟SFE后,設備性能可提升2-3倍(如K2P機型可達600Mbps),但部分功能(如無線限速、固定流控)可能受限。 ?
目前在IPQ95xx和IPQ50xx上支持。
2.3 PPE
PPE(Packet Processing Engine)是一個用于轉發流量的硬件加速塊。
目前在IPQ95xx和IPQ53xx上支持。
3 CPU 負載均衡設置
3.1 啟用內核 RPS&RFS 功能
RPS 全稱是 Receive Packet Steering,在 2.6.35 進入 Linux 內核。這個 patch 采用軟件模擬的方式,實現了多隊列網卡所提供的功能,分散了在多 CPU 系統上數據接收時的負載,把軟中斷分到各個 CPU 處理,而不需要硬件支持,大大提高了網絡性能。
RFS 全稱是 Receive Flow Steering,它是用來配合 RPS 補丁使用的,是 RPS 補丁的擴展補丁,它把接收的數據包送達應用所在的 CPU 上,提高 cache 的命中率。
使用以下命令使能此功能,把 2 個網卡的負載分別調到 CPU3 和 CPU2 上:拆分 QMAP 包成單個IP 包 跑在 CPU3 上;提交 IP 包到內核協議棧 跑在 CPU2 上。PCIe 中斷保持不變,承載在 CPU0 上。
echo 32768 > /proc/sys/net/core/rps_sock_flow_entries
echo 8 > /sys/class/net/pcie_mhi0/queues/rx-0/rps_cpus
echo 4096 > /sys/class/net/pcie_mhi0/queues/rx-0/rps_flow_cnt
echo 4 > /sys/class/net/pcie_mhi0.1/queues/rx-0/rps_cpus
echo 4096 > /sys/class/net/pcie_mhi0.1/queues/rx-0/rps_flow_cnt
3.2 網卡隊列修改建議
如果PHY 支持多隊列處理,建議將每個網卡平均分布到各核心,以便減小最終用戶實際使用中的 CPU 負載情況。
如從圖中可以看出當前只使用了 eth3、pcie_mhi0、pcie_mhi0.1 三個網卡。
eth3 RX 隊列負載平衡調整
echo 0 > /sys/class/net/eth3/queues/rx-0/rps_cpus
echo 4096 > /sys/class/net/eth3/queues/rx-0/rps_flow_cnt
echo 2 > /sys/class/net/eth3/queues/rx-1/rps_cpus
echo 4096 > /sys/class/net/eth3/queues/rx-1/rps_flow_cnt
echo 4 > /sys/class/net/eth3/queues/rx-2/rps_cpus
echo 4096 > /sys/class/net/eth3/queues/rx-3/rps_flow_cnt
echo 8 > /sys/class/net/eth3/queues/rx-3/rps_cpus
eth3 TX 隊列負載平衡調整