Подтвердить что ты не робот

Когда использовать ядровые потоки vs workqueues в ядре linux

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

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

Каковы другие факторы при выборе того или иного механизма для нас в драйвере?

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

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

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

Ответ 3

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