Спать в рабочей очереди Linux

Я просто читаю о нижних половинах обработчика прерываний ядра Linux и пытаюсь понять, как использовать рабочую очередь для отложенной работы.

Из того, что я понимаю, преимущество рабочей очереди перед программными пакетами или тасклетами состоит в том, что работа выполняется в контексте процесса, поэтому она может спать. Но по умолчанию эта работа просто выполняется последовательно на одном из потоков событий /X? Так что, если, скажем, какая-то работа запущена над событиями /0, которые затем долгое время спят в ожидании некоторого ввода-вывода, на этом процессоре больше нельзя обрабатывать элементы рабочей очереди, что выглядит довольно ужасно для производительности.

Так лежит ли на всех разработчиках обработчиков прерываний обязанность не использовать поток событий по умолчанию /X, если работа может долго спать? Или я что-то не так понял?

1 ответ

Но по умолчанию эта работа просто выполняется последовательно на одном из потоков событий /X? Так что, если, скажем, какая-то работа запущена над событиями /0, которые затем долгое время спят в ожидании некоторого ввода-вывода, на этом процессоре больше нельзя обрабатывать элементы рабочей очереди, что выглядит довольно ужасно для производительности.

Это не точно; API workqueue позволяет выполнять как однопоточные, так и многопоточные задачи. для первого вызывается функция create_singlethread_workqueue().

Так лежит ли на всех разработчиках обработчиков прерываний обязанность не использовать поток событий по умолчанию /X, если работа может долго спать? Или я что-то не так понял?

В softirq (т. Е. Тасклете) вы вообще не можете спать, поэтому, в основном, преимущество workqueue в том, что вы можете спать... на самом деле - это ответственность разработчика - не вызывать голодание других kthreads в случае однопоточной очереди работы.

Также имейте в виду, что API Workqueue предоставляет больше, чем просто постановка / удаление задач, но также предоставляет функции для постановки отложенной работы в очередь, синхронизации между работами, очистки рабочих очередей, отмены отложенных работ и т. Д. Этот API также является преимуществом перед другими библиотеки на основе softirq, даже для использования без возможности сна.

Другие вопросы по тегам