В чем разница между задачей и работой

Я новичок в драйвере устройства Linux и хочу знать точные различия между tasklet и workqueue. Кроме того, у меня также есть следующие сомнения:

  • Какой стек ядра выполняет прерывания, использование tasklet и workqueue при работе в контексте прерывания/процесса?
  • В каком приоритете будет выполняться tasklet и workqueue и можем ли мы изменить его приоритет?
  • Если я реализую свой собственный список рабочих очередей, могу ли я планировать/приоритизировать его самостоятельно?

Ответ 1

Тасклеты

  • являются старыми (около 2,3, я считаю)
  • имеют простой, простой API
  • предназначены для низкой задержки
  • не может спать (запускается атомарно в мягком контексте IRQ и гарантированно никогда не будет работать на более чем одном процессоре данного процессора для данной задачи)

Рабочие очереди:

  • более поздние (введены в 2.5)
  • имеет гибкий API (поддерживается больше опций/флагов)
  • предназначены для более высокой задержки
  • может спать

В нижней строке: используйте талисманы для высокоприоритетных задач с малой задержкой, которые все равно должны выполняться вне жесткого контекста IRQ.

Вы можете управлять некоторым уровнем приоритета с помощью талисманов, используя tasklet_hi_enable/tasklet_hi_schedule (вместо их соответствующих версий no- _hi). От этой страницы IBM:

Расписание нормального приоритета выполняется с помощью softirq уровня TASKLET_SOFTIRQ, где высокий приоритет осуществляется с помощью softirq уровня уровня HI_SOFTIRQ.

...

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

С рабочими очередями при его создании вы будете использовать alloc_workqueue (create_workqueue устарел), а может передать флаг, чтобы задать более высокий приоритет:

WQ_HIGHPRI:

Рабочие элементы highpri wq помещаются в очередь в пул потоков highpri целевой gcwq. Файловые пулы Highpri обслуживаются рабочими потоками с повышенным приятным уровнем.

Обратите внимание, что обычные и highpri потоковые пулы не взаимодействуют с каждым Другие. Каждый из них поддерживает отдельный пул работников и реализует Менеджмент concurrency среди своих работников.

Я не могу ответить на все ваши вопросы, но я надеюсь, что это все равно поможет.