В многопроцессорной / многоядерной системе вы можете найти процесс-демон с именемirqbalance
. Его задача - регулировать распределение аппаратных прерываний по процессорам.
Во время загрузки, когда прошивка передает управление системой ядру, изначально работает только одно ядро ЦП. Первое ядро (обычно ядро № 0, иногда называемое «ЦП / ядро монарха») изначально берет на себя все обязанности по обработке прерываний от встроенного программного обеспечения до инициализации системы и запуска других ядер ЦП. Таким образом, если ничего не делается для распределения нагрузки, ядро, которое первоначально запустило систему, выполняет все обязанности по обработке прерываний.
https://www.kernel.org/doc/Documentation/IRQ-affinity.txt предполагает, что в современных ядрах все ядра ЦП по умолчанию могут одинаково обрабатывать IRQ. Но это может быть не оптимальным решением, так как это может привести, например, к неэффективному использованию строк кэша ЦП с частыми источниками IRQ. Это задача irqbalance
исправить это.
irqbalance
это не процесс ядра: это автономный двоичный файл, /usr/sbin/irqbalance
который может работать либо в одноразовом режиме (то есть настроить распределение прерываний один раз как часть процесса загрузки и завершиться), либо как демон. Различные дистрибутивы Linux могут использовать его по-разному или вообще не использовать. Это позволяет легко тестировать и реализовывать произвольно сложные стратегии назначения IRQ процессорам, просто обновляя двоичный файл пользовательского пространства.
Он работает с использованием /proc/irq/%i/smp_affinity
файлов per-IRQ для управления тем, какие IRQ могут обрабатываться каждым процессором. Если вас интересуют подробности, проверьте исходный кодirqbalance
: фактическое назначение настроек IRQ происходит в activate.c
.