无法更新 smp_affinity

无法更新 smp_affinity

作为我们正在运行的优化 Linux 机器上应用程序性能的实验的一部分,我们尝试将所有网络中断分配给单个 CPU 核心。

不幸的是,它似乎没有按应有的方式工作。例如,我们这里有一个中断:

[root@shou18librh05 ~]# cat /proc/interrupts | grep 107
107:          0          0          0          0          0          0              0          0       PCI-MSI-X  eth-mlx4-0

目前在哪里处理?

[root@shou18librh05 ~]# cat /proc/irq/107/smp_affinity
7fffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff

尝试将其移动到第一个核心:

[root@shou18librh05 ~]# echo 1 > /proc/irq/107/smp_affinity

它動了嗎?

[root@shou18librh05 ~]# cat /proc/irq/107/smp_affinity
7fffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff,ffffffff

不...

有人知道为什么会发生这种情况吗?谷歌搜索没有给出任何明显的解决方案/提示...

Linux 是:

[root@shou18librh05 ~]# uname -a
Linux shou18librh05 2.6.18-308.el5 #1 SMP Fri Jan 27 17:17:51 EST 2012 x86_64 x86_64 x86_64 GNU/Linux

答案1

很可能您的系统上有一些已禁用的设备,它们利用了 CPU1 的中断向量空间,特别是由于这些设备尚未启用,它们的中断号未出现在 /proc/interrupts 中。irq 到 CPU 向量的分配是在内核的 APIC 中完成的。

请尝试一下它是否适合您:

  1. 识别任何未连接但尚未启用的设备,
  2. 启用它们,例如:ifup(用于接口)
  3. 它们的 int 号应该显示在 /proc/interrupts 中
  4. 尝试将除 1 之外的所有 CPU 分配给所有中断。
  5. 然后尝试将 CPU1 分配给您喜欢的中断。但请记住每个 CPU 的向量空间都有限制,因此特定 CPU 可以处理的中断数量应该是最大的。

相关内容