我试图通过更改 smp_affinity 中的值来设置 linux 上的 irq 亲和力。当我将新值回显到文件中时,没有收到任何错误,但当我读回它时,该值保持不变。我没有启用 irqbalance,所以我不确定还有什么可能阻止我更改它。
例如:
> cat /proc/irq/51/smp_affinity
f
> echo 1 > /proc/irq/51/smp_affinity
> cat /proc/irq/51/smp_affinity
f
答案1
IRQ 51 上的设备可能不支持 IO-APIC。您可以通过运行以下命令来检查:
cat /proc/interrupts
我在下面提供了一些(编辑过的)示例输出:
CPU0 CPU1 CPU2 CPU3
0: 31 0 0 0 IO-APIC-edge timer
6: 0 0 0 2 IO-APIC-edge floppy
51: 0 0 0 0 PCI-MSI-edge PCIe PME, pciehp
在示例系统上,我可以更改 IRQ 6 的 smp_affinity,但不能更改 IRQ 51。(虽然 IRQ 0 列出了 IO-APIC-edge,但我无法为该 IRQ 设置 smp_affinity。我不确定为什么。 )
如果没有 IO-APIC,来自硬件的中断将仅传递到启动操作系统的 CPU(通常为 CPU#0)。
另一个有用的参考是SMP IRQ 亲和性。