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

Разница между SoftIRQ и Tasklets

Во время изучения обработки прерываний Linux я обнаружил, что Tasklets и SoftIRQ - это два разных метода выполнения "нижней половины" (работа с меньшим приоритетом). Я понимаю это (совершенно настоящая потребность).

Различие заключается в том, что SoftIRQ являются re-entarant, в то время как Tasklet НЕ. Тот же самый SoftIRQ может работать на разных CPU, в то время как это не относится к Tasklets.

Хотя я понимаю это с поверхности, но я не понимаю требования двух функций. В каких случаях мы можем использовать эти средства? Как распознать, что теперь я должен использовать Tasklets и SoftIRQ.

И что мы подразумеваем под Tasklets, сделаны на SoftIRQ? В одной из книг, которые я читал в LKML, были дебаты по удалению Tasklets. Я совершенно смутился, почему можно было принести такую ​​особенность? Некоторая близорукость (не означает преступления)?

Любые указатели на этом помогут много.

4b9b3361

Ответ 1

include/linux/interrupt.h

/* PLEASE, avoid to allocate new softirqs, if you need not _really_ high
   frequency threaded job scheduling. For almost all the purposes
   tasklets are more than enough. F.e. all serial device BHs et
   al. should be converted to tasklets, not to softirqs.
 */

enum
{
        HI_SOFTIRQ=0,    /* High Priority */
        TIMER_SOFTIRQ,
        NET_TX_SOFTIRQ,
        NET_RX_SOFTIRQ,
        BLOCK_SOFTIRQ,
        BLOCK_IOPOLL_SOFTIRQ,
        TASKLET_SOFTIRQ,
        SCHED_SOFTIRQ,
        HRTIMER_SOFTIRQ,
        RCU_SOFTIRQ,    /* Preferable RCU should always be the last softirq */

        NR_SOFTIRQS
};

Ключевыми отличиями между softirq и tasklet являются:

Распределение

  • Softirqs статически распределяются во время компиляции. В отличие от талисманов вы не можете динамически регистрировать и уничтожать softirqs.
  • Задачи могут быть статически распределены с помощью DECLARE_TASKLET(name, func, data), а также могут быть распределены динамически и инициализированы во время выполнения с помощью tasklet_init(name, func, data)

Concurrency

  • Softirq могут работать одновременно на нескольких процессорах, даже если они одного типа, потому что softirqs являются reentrant функциями и должны явно защищать свои структуры данных с помощью шпиндельных закладок.
  • Задачи non-reentrant, и таски однотипного типа всегда сериализуются: другими словами, один и тот же тип таблеток не может выполняться одновременно двумя CPU. Тем не менее, задачи разных типов могут выполняться одновременно на нескольких процессорах.

Обработка

  • Softirqs активируются с помощью raise_softirq(). Ожидающие softirqs обрабатываются do_softirq() и ksoftirqd потоком ядра после активации с помощью local_bh_enable() или spin_unlock_bh()
  • Задачи - это механизм нижней половины, построенный на вершине softirqs, т.е. талисманы представлены двумя softirqs: HI_SOFTIRQ и TASKLET_SOFTIRQ. Задачи фактически запускаются из softirq. Единственное реальное различие в этих типах состоит в том, что талисманы HI_SOFTIRQ выполняются до цепей TASKLET_SOFTIRQ. Итак, tasklet_schedule() в основном вызывает raise_softirq(TASKLET_SOFTIRQ)
  • Обратите внимание, что softirqs (и, следовательно, тасклеты и таймеры) запускаются при возврате из аппаратных прерываний или при возврате из системного вызова. Также, как только поток, который поднял конец softirq, запускается, что один softirq (и на другой) запускается, чтобы свести к минимуму softirq latency.

Ответ 2

Sofirqs являются повторителями, то есть различные процессоры могут использовать один и тот же softirq и выполнять его, в то время как Tasklets сериализуются, это тот же самый CPU, который запускает Tasklet, имеет право его завершить, ни один другой процессор не может его принять (в случае планирования). обратитесь к отличной статье.

Также вы можете включить/отключить обработку отсрочки, используя local_bh_enable() в локальном ЦП, что фактически делает _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

Также читайте эту книгу (бесплатно можно загрузить) Страница № 131 - в которой объясняется различие, а также объяснение с использованием примера кода с подделкой/фиктивное устройство - ролик.

Ответ 3

Softirqs статически выделяются во время компиляции. В отличие от тасков, вы не можете динамически регистрировать и уничтожать softirqs.Tasklets похожи на softirqs (работает), однако они имеют более простой интерфейс. Softirqs требуются только для очень высокочастотных и многопоточных применений, в то время как талицы прекрасно подходят в любом другом случае.

Ответ 4

Задачи реализуются поверх softirq, поэтому они являются softirq. они представлены двумя критериями "HI_SOFTIRQ и TASKLET_SOFTIRQ" - приоритет. Несмотря на то, что они реализованы поверх softirq, они отличаются:

  • Задачи могут быть созданы/уничтожены статически или динамически, но softirq - только статическим способом.

  • Две разные задачи могут работать одновременно на одном процессоре. Но два одинаковых типа талисманов не могут работать на одном процессоре. В то время как softirq находятся в другом ключе.

Softirq зарезервированы для большей части времени критической и важной обработки нижней половины в системе.