В чем разница между обработчиком прерываний с потоками и тасклетом?

#linux-kernel #isr #tasklet

Вопрос:

Я нашел интересную тему, обработчик прерываний с потоками, на https://lwn.net/Articles/302043/. Это не совершенно новая идея, и она предназначена для замены тасклета. Но когда я изучил его функциональность, я обнаружил, что нет никакой разницы между обработчиком прерываний с потоками и тасклетом. Оба они откладывают работу и заканчивают проблему, связанную с оборудованием, как можно скорее в жестком irq и откладывают трудоемкую часть. Кто-нибудь может пролить на это немного света?

Комментарии:

1. Тасклеты не могут спать, потому что они выполняются в контексте «softirq», но обработчики потоков прерываний могут спать, потому что они выполняются в контексте «задача». В этом отношении обработчики потоков прерываний больше похожи на рабочие элементы.

2. Да, там действительно упоминалось об этом. Но, похоже, это уменьшило задержку, вызванную тасклетом. Я не понимаю, почему неблокирующий код создает больше задержек, чем блокирующий код. Между тем, если есть рабочая очередь для обработки отложенной работы, зачем нам прерывание потока? Я пропустил какие-нибудь подсказки? Спасибо, Йен Эббот.

3. Я только что прочитал комментарии в нижней части статьи. Похоже, что потоковый irq предназначен для блага всей системы реального времени, а не для отдельного устройства. Это обеспечивает меньшую задержку для устройств, чувствительных к задержке. Спрос в реальном времени может быть вызван высокочастотными прерываниями, вызванными вводом-выводом. Но я чувствую, что это все еще бессрочно. Пожалуйста, поправьте меня, если я ошибаюсь.