Когда использовать потоки ядра и рабочие очереди в ядре Linux - PullRequest
30 голосов
/ 27 января 2010

Существует множество способов планирования работы в ядре Linux: таймеры, тасклеты, рабочие очереди и потоки ядра. Каковы рекомендации, когда использовать один против другого?

Существуют очевидные факторы: функции таймера и тасклеты не могут спать, поэтому они не могут ожидать мьютексов, переменных условий и т. Д.

Какие еще факторы влияют на выбор механизма для водителя?

Какие механизмы являются предпочтительными?

Ответы [ 3 ]

31 голосов
/ 18 августа 2010
softirqs : deferred work runs in interrupt context
tasklets : deferred work runs in interrupt context
work queues : deferred work runs in process context

softirqs : cannot run simultaneously on different CPU's
tasklets : cannot run simultaneously on different CPU's
work queues : can run simultaneously on different CPU's

softirqs : cannot go to sleep
tasklets : cannot go to sleep
work queues : can go to sleep

softirqs : cannot be preempted/schedule
tasklets : cannot be preempted/schedule
work queues : maybe be preempted/schedule

softirqs : not easy to use
tasklets : easy to use
work queues : easy to use
29 голосов
/ 27 января 2010

Как вы сказали, это зависит от поставленной задачи:

Рабочие очереди откладывают работу в поток ядра - ваша работа всегда будет выполняться в процессе контекст. Они планируются и поэтому могут спать.

Как правило, между рабочими очередями или sotftirqs / тасклетами нет споров; если отложенная работа должна находиться в спящем режиме, используются рабочие очереди, в противном случае используются программные пакеты или тасклеты. Тасклеты также больше подходят для обработки прерываний (им дают определенные гарантии, такие как: тасклет никогда не запускается позже, чем на следующем такте, он всегда сериализуется относительно себя и т. Д.).

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

Надеюсь, это поможет.

1 голос
/ 08 декабря 2010

Потоки ядра образуют основу для рабочих очередей. Это единственные типы вспомогательных подпрограмм ядра, которые выполняются в контексте процесса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...