通信模组性能调优
通信模组性能调优
- 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 队列负载平衡调整