Линукс западает в ядро ​​на всех ядрах?

Что происходит на многоядерном компьютере под управлением Linux 2.6.x, когда поток выполняет системный вызов? Он попадает в ядро ​​​​только на ядре, на котором работает поток, или он попадает в ядро ​​​​на всех ядрах (извините, если это вопрос новичка).

Является ли это поведение (в зависимости от того, что является правильным) одинаковым при получении прерываний в целом? Если нет, то каковы различия?


person user249060    schedule 12.01.2010    source источник


Ответы (2)


Только поток, выполняющий системный вызов, входит в ядро. Все планирование в Linux осуществляется на основе детализации потоков. Что касается прерываний - они маршрутизируются на одно ядро, т.е. на каждое заданное аппаратное событие прерывается только один процессор. Затем прерывания можно было вручную назначать конкретным ядрам. Это делается с помощью маски в /proc/irq/IRQ-NUMBER/smp_affinity. Вы можете увидеть, какие процессоры получают какие аппаратные прерывания в /proc/interrupts.

person Nikolai Fetissov    schedule 12.01.2010

Одно ядро ​​обрабатывает системный вызов, и только одно ядро ​​обрабатывает прерывание.

У меня нет никаких ссылок на то, как именно маршрутизируются прерывания - возможно, Руководство по системному программированию Intel был бы полезен здесь.

Но представьте, если бы все ядра прерывались каждым системным вызовом или прерыванием. Linux предназначен для масштабирования до многих ядер. Это убило бы эту масштабируемость — на массивном сервере каждый дисковый ввод-вывод, прерывание таймера и т. д. фактически останавливали бы каждое ядро ​​в системе, не позволяя им выполнять полезную работу.

person Michael    schedule 12.01.2010