Глава 4. Обработка аппаратных прерываний

Содержание

Глава 4. Обработка аппаратных прерываний
Технические требования
Аппаратные прерывания и как ядро обрабатывает их
Выделение аппаратного IRQ
Выделение вашего обработчика прерывания при помощи request_irq()
Высвобождение линии IRQ
Настройка флагов прерывания
Разбираемся с прерываниями, переключаемыми уровнем и фронтом - краткое замечание
Представление кода 1 - сетевой драйвер IXGB
Реализация подпрограммы обработки прерывания
Руководство по контексту прерывания - что делать, а что нет
Не допускать блокировок - выявление возможных путей блокирования
Маскирование прерываний - значение по умолчанию и их контроль
Оставляйте всё быстрым
Собственно написание подпрограммы обработки прерываний
Представление кода 2 - обработчик прерываний драйвера i8042
Представление кода 3 - обработчик прерываний сетевого драйвера IXGB
Выделение IRQ - современный подход - возможности управляемого прерывания
Работа с моделью потоковых прерываний
Применение модели потоковых прерываний - её API
Применение модели управляемых потоковых прерываний - рекомендуемый способ
Представление кода 4 - потоковый обработчик прерывания микроконтроллера STM32 F7
Внутренняя реализация соответствующего потокового прерывания
Зачем пользоваться потоковыми прерываниями?
Потоковые прерывания - на самом деле выполняют их в реальном масштабе времени
Ограничения при использовании потокового обработчика
Работа с более ранними потоковыми обработчиками hardirq
Включение и запрет IRQ
Не маскируемые прерывания
Просмотр всех выделенных линий прерываний (IRQ)
Разбираемся и с верхними и нижними половинами и применяем их
Определение и применение tasklet
Инициализация tasklet
Исполнение tasklet
Основы механизма ядра softirq
Доступные softirqs и для чего они предназначены
Разбираемся с тем как ядро исполняет softirqs
Исполнение tasklet
Использование потоков ядра ksoftirqd
softirqs и одновременность
Обработчики hardirqs, tasklets и потока - чем и когда пользоваться
Полное понимание установленного контекста
Просмотр контекста - примеры
Как Linux устанавливает приоритеты действий
Несколько ответов на остающиеся вопросы
Балансировка нагрузки прерываний и сродство IRQ
Поддерживает ли ядро обособленные стеки IRQ?
Замеры метрик и задержек
Замер прерываний при помощи [e]BPF
Обслуживание замера времени индивидуальных hardirqs
Обслуживание замера времени индивидуальных softirqs
Применение Ftrace для получения обработчика системных задержек
Обнаружение запрещённых прерываний с наихудшими временными задержками при помощи Ftrace
Прочие инструменты
Выводы
Вопросы
Дальнейшее чтение

Технические требования

Аппаратные прерывания и как ядро обрабатывает их

Выделение аппаратного IRQ

Выделение вашего обработчика прерывания при помощи request_irq()

Высвобождение линии IRQ

Настройка флагов прерывания

Разбираемся с прерываниями, переключаемыми уровнем и фронтом - краткое замечание

Представление кода 1 - сетевой драйвер IXGB

Реализация подпрограммы обработки прерывания

Руководство по контексту прерывания - что делать, а что нет

Не допускать блокировок - выявление возможных путей блокирования

Маскирование прерываний - значение по умолчанию и их контроль

Оставляйте всё быстрым

Собственно написание подпрограммы обработки прерываний

Представление кода 2 - обработчик прерываний драйвера i8042

Представление кода 3 - обработчик прерываний сетевого драйвера IXGB

Выделение IRQ - современный подход - возможности управляемого прерывания

Работа с моделью потоковых прерываний

Применение модели потоковых прерываний - её API

Применение модели управляемых потоковых прерываний - рекомендуемый способ

Представление кода 4 - потоковый обработчик прерывания микроконтроллера STM32 F7

Внутренняя реализация соответствующего потокового прерывания

Зачем пользоваться потоковыми прерываниями?

Потоковые прерывания - на самом деле выполняют их в реальном масштабе времени

Ограничения при использовании потокового обработчика

Работа с более ранними потоковыми обработчиками hardirq

Включение и запрет IRQ

Не маскируемые прерывания

Просмотр всех выделенных линий прерываний (IRQ)

Разбираемся и с верхними и нижними половинами и применяем их

Определение и применение tasklet

Инициализация tasklet

Исполнение tasklet

Основы механизма ядра softirq

Доступные softirqs и для чего они предназначены

Разбираемся с тем как ядро исполняет softirqs

Исполнение tasklet

Использование потоков ядра ksoftirqd

softirqs и одновременность

Обработчики hardirqs, tasklets и потока - чем и когда пользоваться

Полное понимание установленного контекста

Просмотр контекста - примеры

Как Linux устанавливает приоритеты действий

Несколько ответов на остающиеся вопросы

Балансировка нагрузки прерываний и сродство IRQ

Поддерживает ли ядро обособленные стеки IRQ?

Замеры метрик и задержек

Замер прерываний при помощи [e]BPF

Обслуживание замера времени индивидуальных hardirqs

Обслуживание замера времени индивидуальных softirqs

Применение Ftrace для получения обработчика системных задержек

Обнаружение запрещённых прерываний с наихудшими временными задержками при помощи Ftrace

Прочие инструменты

Выводы

Вопросы

Дальнейшее чтение