В рамках экспериментов, которые мы проводим для оптимизации производительности приложений на нашем Linux-сервере, мы пытаемся назначить все сетевые прерывания одному ядру процессора.
К сожалению, это работает не так, как должно. Например. у нас есть прерывание:
[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
Скорее всего, в вашей системе есть отключенные устройства, которые использовали векторное пространство прерываний CPU1, и, в частности, поскольку устройства не были включены, их номера прерываний не отображаются в / proc / interrupts. Назначение вектора irq на процессор выполняется в APIC ядра.
Пожалуйста, попробуйте, если это сработает для вас: