MACsec速率无法突破2Gbps的原因分析及优化配置咨询
MACsec速率无法突破2Gbps的原因分析及优化配置咨询
兄弟,你遇到的这个问题太典型了——10G网卡跑MACsec却卡在2G以下,还伴随着ksoftirqd占满CPU,核心原因十有八九是MACsec默认走了软件加密路径,没用到你的BCM57416网卡的硬件加速能力。我给你梳理下具体的排查和优化步骤:
先搞懂问题根源
MACsec的加密解密操作如果靠CPU软中断处理,10G带宽的运算量会直接把单核CPU打满(你看到的ksoftirqd就是处理软中断的内核线程)。而你的BCM57416属于Broadcom NetXtreme-E系列,本身是支持MACsec硬件加速的,但大概率是内核配置或网卡设置没开启这个特性,导致只能用软件兜底,自然跑不满10G带宽。
一步步优化配置
1. 确认网卡硬件加速支持状态
先检查你的网卡是否已经加载了MACsec硬件加速相关的功能:
- 用
ethtool -k <你的网卡名>查看输出,找hw-macsec选项,如果显示off,说明硬件加速没开; - 再看
macsec模块的参数:cat /sys/module/macsec/parameters/hw_accel,如果输出是N,说明模块默认没启用硬件加速。
2. 开启MACsec硬件加速
这是解决问题的核心步骤:
- 先卸载再重新加载
macsec模块,强制启用硬件加速:rmmod macsec modprobe macsec hw_accel=Y - 然后用ethtool开启网卡的硬件MACsec支持:
如果提示不支持这个选项,大概率是网卡固件版本太低,需要去Broadcom官网下载BCM57416的最新固件更新(注意备份原有固件,按官方步骤操作)。ethtool -K <你的网卡名> hw-macsec on
3. 调整中断亲和性(硬件加速临时不可用时的兜底方案)
如果暂时没法启用硬件加速,把网卡的中断绑定到独立的CPU核心,避免和其他进程抢资源:
- 用
cat /proc/interrupts找到你的网卡对应的中断号(比如开头是<网卡名>-rx-0的那行); - 把中断绑定到空闲的CPU核心,比如绑定到CPU2和CPU3:
这样可以让软中断的负载分散到多核,提升处理能力。echo 2-3 > /proc/irq/<中断号>/smp_affinity_list
4. 优化MACsec配置细节
- 调整加密算法:有些硬件加速只支持特定的加密套件,试试换成
gcm-aes-256(两端必须一致),配置命令示例:ip macsec add dev <网卡名> tx sa 0 pn 1000 cipher gcm-aes-256 key 00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff - 关闭ESN(扩展序列号):如果你的场景不需要防重放的长序列,关闭ESN可以减少一点开销,配置时加
no-esn参数:ip macsec add dev <网卡名> rx port 1 address <对端MAC> no-esn
5. 内核网络参数调优
针对高带宽网络场景调整内核参数,提升数据包处理能力:
# 增大网络设备接收队列的最大长度 sysctl -w net.core.netdev_max_backlog=10000 # 启用接收端缩放(RPS),把数据包分发到多个CPU核心 sysctl -w net.core.rps_sock_flow_entries=32768 # 允许网卡的接收队列使用CPU0-3(根据你的CPU核心数调整) echo f > /sys/class/net/<网卡名>/queues/rx-0/rps_cpus
可以把这些参数写入/etc/sysctl.conf,重启后自动生效。
验证优化效果
配置完成后,用ethtool -S <网卡名>查看MACsec相关统计,比如hw_macsec_tx_packets和hw_macsec_rx_packets,如果这些数值在iperf3测试时持续增长,说明硬件加速已经生效。此时再跑iperf3,应该能看到速率大幅提升,同时ksoftirqd的CPU占用会明显下降。
备注:内容来源于stack exchange,提问作者RandomUser8888
相关产品推荐
相关产品推荐

