Я читал, Linux Kernel Development
и есть кое-что, что мне не совсем понятно - когда аппаратное обеспечение запускает прерывание, каков критерий, чтобы выбрать, на каком процессоре запускать логику обработки прерывания?
Я мог бы представить, что это всегда должен быть один и тот же процессор, который вызывал запрос ввода-вывода, но, поскольку поток для всех целей сейчас находится в спящем режиме, на самом деле не будет особого смысла в этом.
С другой стороны, могут быть прерывания по времени (например, для планировщика), которые необходимо вызвать. В системе SMP они всегда поднимаются на одном и том же ядре (скажем, # 0) или они всегда в значительной степени поднимаются на любом ядре?
Как это на самом деле работает?
Спасибо
источник
irqbalance
это не процесс ядра: это автономный двоичный файл,/usr/sbin/irqbalance
который может работать либо в одноразовом режиме (то есть настроить распределение прерываний один раз как часть процесса загрузки и завершиться), либо как демон.irqbalance
он не использовался. Но поскольку многоядерные процессоры стали повсеместными, очевидно, что настройки ядра по умолчанию были обновлены в какой-то момент. kernel.org/doc/Documentation/IRQ-affinity.txt предполагает, что по умолчанию ядро разрешает всем процессорам обрабатывать IRQ.IRQ-affinity.txt
это фактически с 2011 года, поэтому современные ядра могут фактически иметь некоторую полу-умную стратегию по умолчанию, чтобы гарантировать разумные результаты даже при урезанном пользовательском пространстве безirqbalance
.