hardirq и softirq работают на одном ядре / процессоре?

#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 , и я думаю, что процедура таймера может выполняться на другом процессоре.