Linux попадает в ядро ​​на всех ядрах? - PullRequest
2 голосов
/ 12 января 2010

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

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

Ответы [ 2 ]

5 голосов
/ 12 января 2010

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

0 голосов
/ 12 января 2010

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

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

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

...