В целом, это зависит от функциональности, предлагаемой многоядерным процессором и ОС. При использовании многоядерных процессоров вам может потребоваться настроить близость прерывания в соответствии с вашим требованием.
В случае linux
файловая система /proc
имеет возможность показывать/настраивать сродство прерываний.
1) Файл smp_affinity
для соответствующего IRQ имеет битовую маску, которая может использоваться для конфигурирования IRQ, которые будут обслуживаться соответствующей сердцевины в многоядерной системе:
/Proc/IRQ/'irq_number'
/smp_affinity
echo 2 > /proc/irq/12/smp_affinity -> Configures the affinity of IRQ 12 to CPU 1
echo 4 > /proc/irq/14/smp_affinity -> Configures the affinity of IRQ 14 to CPU 2
2) файл smp_affinity_list
помогает в настройке диапазона CPU для конкретного IRQ, избегая метод битовой маски для настройки ядра:
/Proc/IRQ/'irq_number'
/smp_affinity_list
cat /proc/irq/12/smp_affinity_list -> Configures the affinity of IRQ 12 to CPU cores 0 to 3
3) Кроме того, Linux предлагает прерывание балансировки нагрузки демона, называемого irqbalance
, который может помочь в распределении прерываний по процессорным ядрам для оптимизации производительности. Этот демона может быть включен по умолчанию в определенной системе, и, следовательно, это должно быть отключено, если вы хотите, чтобы вручную настраивать сродство прерывания, иначе это может переопределить настроенное сродство после каждого сброса.
AFAIK mainline Linux поддерживает только SMP, симметричное многопроцессорное оборудование, что означает, что любой процессор может обслуживать прерывания. Я видел, что UNIX портирован на асимметричное оборудование, т. Е. Есть процессор, предназначенный для ввода-вывода и прерываний. BTW процессор не выполняет «прерывание» *. Он может * обслуживать * прерывание, то есть выполнять процедуру обслуживания прерываний, ISR. – sawdust
Подождите, UP также поддерживается. – 0andriy