加载 eBPF 程序会导致 IRQ 亲和性被修改 - (ixgbe 驱动程序)

加载 eBPF 程序会导致 IRQ 亲和性被修改 - (ixgbe 驱动程序)

我正在开发一个在具有 Intel 10G X550T NIC 的服务器上运行的 eBPF/XDP 应用程序,使用 ixgbe 驱动程序。

我需要精确控制工作在各个核心之间的分配方式,因此我禁用了 irqbalance 并手动设置 IRQ affinity。我编写了一个简短的 python 脚本来读取 /proc/interrupts 和 /proc/irq/X/smp_affinity,以显示哪些 CPU 核心应该处理每个队列的中断:

int0 NIC 配置了 40 个队列,并且机器有 40 个核心 - 运行我的手动配置后,队列->核心映射如下所示:

# python3 show_ints.py
int0       : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39]

然而,当我在此设备上加载哪怕是最简单的 eBPF 程序时:

int xdp_sock_prog(struct xdp_md *ctx)
{
    return( XDP_PASS );
}
# xdp-loader load -m native int0 test.o

irq 亲和性似乎被修改了:

# python3 show_ints.py
int0       : [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39]

这本身并不是一个问题 - 只是核心的重新调整 - 但这台机器上有多个 NIC,每次我尝试直接分配特定核心来处理特定 NIC 上的特定队列时,eBPF 负载都会把事情搞乱,总是导致多个 NIC 击中相同的核心(我不想要!)。

这是预期的行为吗?有办法禁用它吗?

编辑(附加信息):

IRQ 本身不会改变...

前:

int0       IRQs : [79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181]
int0       CPUs : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39]

后:

int0       IRQs : [79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181]
int0       CPUs : [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39]

因此,只是 smp_affinity 需要进行调整。

抱歉没有包含版本信息 - 这是 Ubuntu 22.04 上的通用版本 5.15.0-79。

进一步编辑:

嗯...当 eBPF 程序加载时,dmesg 显示:

[66216.150088] ixgbe 0000:3b:00.0: removed PHC on int0
[66216.927782] ixgbe 0000:3b:00.0: registered PHC device on int0
[66221.735857] ixgbe 0000:3b:00.0 int0: NIC Link is Up 10 Gbps, Flow Control: None

相关内容