加载eBPF程序导致ixgbe驱动的IRQ亲和性被修改,如何禁用该行为?
加载eBPF程序导致ixgbe驱动的IRQ亲和性被修改,如何禁用该行为?
这个问题其实是ixgbe驱动在加载XDP(eBPF的一种)程序时的默认优化行为,属于预期情况,但确实会干扰你手动配置的IRQ亲和性规则,下面给你拆解原因和解决办法:
为什么会发生这种情况?
当你用native模式加载XDP程序时,ixgbe驱动会触发一次网卡队列相关的初始化调整——从你提供的dmesg日志里的removed PHC/registered PHC也能看出来,驱动在重新初始化时间同步组件的同时,会自动调整IRQ的CPU亲和性,目的是为XDP程序优化CPU调度(比如对齐NUMA节点、避免跨核资源竞争)。这种自动调整会直接覆盖你之前手动设置的/proc/irq/X/smp_affinity配置。
解决办法
方法一:禁用ixgbe驱动的自动IRQ亲和性调整
ixgbe驱动提供了模块参数可以关闭这个自动优化逻辑,具体操作如下:
临时生效(重启后失效):
先卸载ixgbe模块,再重新加载并指定参数:sudo rmmod ixgbe sudo modprobe ixgbe irq_affinity_policy=0这里
irq_affinity_policy=0表示驱动不会自动设置IRQ亲和性,会完全保留你手动配置的结果。永久生效:
把参数写入驱动配置文件,让系统每次加载ixgbe时都应用这个设置:echo "options ixgbe irq_affinity_policy=0" | sudo tee /etc/modprobe.d/ixgbe.conf之后重启系统或者重新加载驱动即可。
方法二:加载XDP后重新应用手动配置
如果不想修改驱动参数,也可以在加载XDP程序之后,立刻运行你的IRQ亲和性配置脚本,覆盖驱动自动调整的结果。比如写一个简单的批量执行脚本:
#!/bin/bash # 加载XDP程序 xdp-loader load -m native int0 test.o # 重新设置IRQ亲和性 python3 your_irq_config_script.py
这样每次加载XDP后都会自动恢复你的手动映射规则。
额外验证
修改完配置后,你可以再次加载XDP程序,然后运行python3 show_ints.py检查队列->核心的映射,应该会保持你手动设置的结果,不会再出现先偶数后奇数的重排了。
备注:内容来源于stack exchange,提问作者Strags
相关产品推荐
相关产品推荐

