7.2.1 Задержка реакции на прерывание

Предыдущая  Содержание  Следующая V*D*V

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

 

Запрет всех прерываний в течение длительного времени: всякий раз, когда драйверу или другому куску кода ядра необходимо защитить какие-то данные из обработчика прерывания, обычно запрещаются все прерывания с помощью макросов local_irq_disable или local_irq_save. Удерживание спин-блокировки с помощью функций spin_lock_irqsave или spin_lock_irq перед входом в критическую секцию также отключает все прерывания. Всё это увеличивает время реакции системы на прерывание.

Регистрация быстрого обработчика прерываний неправильно написанными драйверами устройств: драйвер устройства может зарегистрировать свой обработчик прерываний в ядре либо как быстрый обработчик прерываний, либо как медленный обработчик прерываний. Все прерывания запрещены, когда выполняется быстрый обработчик прерывания, и разрешены, когда выполняются медленные обработчики прерываний. Задержка прерывания увеличивается, если устройство с низким приоритетом регистрирует свой обработчик прерывания, как быстрый обработчик прерываний, а высокоприоритетное устройство регистрирует своё прерывание как медленное прерывание.

 

Как программист ядра или автор драйвера, вы должны убедиться, что ваш модуль или драйвер не способствует увеличению времени реакции на прерывание. Задержка прерывания может быть измерена с помощью инструмента intlat, написанного Эндрю Мортоном. Он изменялся последний раз в течение выпуска ядер версий 2.3 и 2.4 и был также зависим от архитектуры x86. Возможно, вам придется переносить его на вашу архитектуру. Он может быть загружен с http://www.zipworld.com. Вы также можете написать специальный драйвер для измерения времени реакции на прерывание. Например, для ARM это может быть достигнуто вызовом прерывания от таймера в известный момент времени и последующим сравнением с фактическим временем выполнения вашего обработчика прерывания.

 

Предыдущая  Содержание  Следующая