作为我们在Linux机器上运行以优化应用程序性能的实验的一部分,我们试图将所有networking中断分配给单个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
没有…
有没有人有一个想法,为什么这可能发生? 谷歌search没有给出任何明显的解决scheme/提示…
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
系统中可能有一些禁用的设备利用了CPU1的中断向量空间,尤其是在设备未启用的情况下,其中断号不会出现在/ proc / interrupts中。 irq到cpu的向量分配是在内核的APIC中完成的。
请尝试,如果它适合你: