Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Обработка прерываний в Linux
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > Linux
GMavr
Имеется плата с ADM5120. На ней работает Linux (OpenWrt KAMIKAZE). Ядро 2.6.23.14.

Измеряю время с момента выставления сигнала запроса на прерывание до входа в обработчик прерывания. Обычно оно составляет десятки микросекунд (20...30мкс). Однако, периодически - раз в ~200 секунд, случаются выбросы до 180 мкс. Причем несколько прерываний обрабатываются с большой задержкой, а далее опять задержка маленькая.

Такое ощущение, что есть некий процесс, запрещающий прерывания на значительное время, активизирующийся раз в 200 секунд. Что это может быть? Можно ли его (процесс) выключить?

Очень хочется, чтобы обработчик прерывания делал свое дело через равные промежутки времени.
amw
Цитата(GMavr @ Jul 22 2008, 19:26) *
Имеется плата с ADM5120. На ней работает Linux (OpenWrt KAMIKAZE). Ядро 2.6.23.14.

Измеряю время с момента выставления сигнала запроса на прерывание до входа в обработчик прерывания. Обычно оно составляет десятки микросекунд (20...30мкс). Однако, периодически - раз в ~200 секунд, случаются выбросы до 180 мкс. Причем несколько прерываний обрабатываются с большой задержкой, а далее опять задержка маленькая.

Такое ощущение, что есть некий процесс, запрещающий прерывания на значительное время, активизирующийся раз в 200 секунд. Что это может быть? Можно ли его (процесс) выключить?

Очень хочется, чтобы обработчик прерывания делал свое дело через равные промежутки времени.

Ничего удивительного и необычного.
1. Linux не реалтайм ОС.
2. Подавляющее большинство драйверов, использующих прерывания (последовательный порт например) используют конструкцию
Код
spin_lock_irqsave(lock, flags);
выполнение действий.
spin_lock_irqrestore(lock, flags);

И именно для запрета прерываний.
3. Есть еще lock_kernel().
GMavr
Это все мне известно. Но правилом хорошего тона является запрет прерываний на короткий промежуток времени. А 180 мкс, мне кажется, уже много.

Кроме того удивляет хорошая периодичность и редкость этого явления - раз в 200 секунд (+/- несколько секунд). Чего это Linux делает с таким периодом?
amw
Цитата(GMavr @ Jul 22 2008, 20:18) *
Это все мне известно. Но правилом хорошего тона является запрет прерываний на короткий промежуток времени. А 180 мкс, мне кажется, уже много.

А приоритетность прерываний? А что будет если, если одновремеено с вашим прерыванием в очереди окажутся еще и другие, с более высоким приоритетом? А короткий это сколько? В общем вопросов больше чем ответов.
Цитата
Кроме того удивляет хорошая периодичность и редкость этого явления - раз в 200 секунд (+/- несколько секунд). Чего это Linux делает с таким периодом?

А если понизить частоту процесора период изменится? Период большой, потому сложно сказать. На сколько я помню таких периодов в ядре нет. 3 секунды - обработка дисковых кешей. Есть ли больше - не знаю.
GMavr
Все оказалось просто.

Период таймерного прерывания был кратен периоду интересующего меня прерывания. Причем эти периоды задавались разными кварцами. Соответственно, с некоторой периодичностью, они ничинали накладываться.

Значит, обработчик таймера держит прерывания запрещенными в течении 180мкс (для моей конфигурации).
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.