Не могу обновить smp_affinity
В рамках экспериментов, которые мы проводим для оптимизации производительности приложений на нашем компьютере с 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
Нет...
У кого-нибудь есть идея, почему это может происходить? Поиск в Google не дал никаких очевидных решений / подсказок...
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 для процессора выполняется в APIC ядра.
Пожалуйста, попробуйте, если это работает для вас:
- Определите любые устройства, которые не подключены, но еще не были включены,
- включить их, например: ifup (для интерфейсов)
- Их номер int должен отображаться в / proc / interrupts
- Попробуйте назначить все процессоры, кроме 1, всем прерываниям.
- Затем попробуйте назначить CPU1 прерываниям по своему вкусу. Но имейте в виду, что это ограничение векторного пространства на процессор, поэтому их должно быть максимальное количество прерываний, которые могут обслуживаться конкретным процессором.