#linux-kernel #interrupt #softirq
#linux-ядро #прерывание #softirq
Вопрос:
Предположим, у меня правильно настроены RSS и привязка к прерываниям.
Гарантируется ли ядром Linux, что a softirq
выполняется на том же процессоре / ядре, на котором был запущен аппаратный обработчик прерываний? Я понимаю, что обработчик прерываний запланировал softirq
бы выполнение, и фактическое выполнение может произойти позже.
Комментарии:
1. По крайней мере, для тасклетов , если тасклет еще не запланирован для запуска на каком-либо другом процессоре, тогда он будет запланирован для запуска на запрашивающем процессоре.
2. @IanAbbott, есть ли способ принудительно выполнить выполнение
softirq
на том же ядре (когда это возможно), где был выполнен жесткий IRQ? Или, учитывая характер реализации softirq в Linux, это невозможно / эффективно?3. Я не уверен, какой softirq вы имеете в виду, но для тасклетов, если вы убедитесь, что он всегда запланирован только определенным процессором (тем, который связан с hardirq), он всегда будет выполняться на этом процессоре.
4. @IanAbbott, я имел в виду, например
NET_RX_SOFTIRQ
.5.Я не очень хорошо знаком с сетевым кодом, но, похоже
napi_schedule()
, запланирует запуск функции опроса (отstruct napi_struct
poll
участника) на том же текущем процессоре, если это уже не запланировано, так что немного похоже на тасклеты. Однако это также может быть запланировано с помощью таймера, установленного как частьstruct napi_struct
, и я думаю, что процедура таймера может выполняться на другом процессоре.