載入 eBPF 程式會導致 IRQ 關聯性被修改 -(ixgbe 驅動程式)

載入 eBPF 程式會導致 IRQ 關聯性被修改 -(ixgbe 驅動程式)

我正在使用 ixgbe 驅動程式開發在具有 Intel 10G X550T NIC 的伺服器上運行的 eBPF/XDP 應用程式。

我需要精確控制工作在內核之間的分配方式,因此我禁用 irqbalance 並手動設定 IRQ 關聯性。我編寫了一個簡短的 python 腳本來讀取 /proc/interrupts 和 /proc/irq/X/smp_affinity 以顯示哪些 CPU 核心應該處理每個佇列的中斷:

int0 網路卡配置了 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]

這本身並不是一個問題——只是核心的重新洗牌——但是這台機器中有多個網卡,每次我嘗試直接分配特定的核心來處理特定網卡上的特定隊列時,eBPF 負載都會把事情弄亂這總是會導致多個網卡訪問相同的核心(我不希望這樣!)。

這是預期的行為嗎?有辦法禁用它嗎?

編輯(附加資訊):

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

相關內容