GMavr 0 22 июля, 2008 Опубликовано 22 июля, 2008 · Жалоба Имеется плата с ADM5120. На ней работает Linux (OpenWrt KAMIKAZE). Ядро 2.6.23.14. Измеряю время с момента выставления сигнала запроса на прерывание до входа в обработчик прерывания. Обычно оно составляет десятки микросекунд (20...30мкс). Однако, периодически - раз в ~200 секунд, случаются выбросы до 180 мкс. Причем несколько прерываний обрабатываются с большой задержкой, а далее опять задержка маленькая. Такое ощущение, что есть некий процесс, запрещающий прерывания на значительное время, активизирующийся раз в 200 секунд. Что это может быть? Можно ли его (процесс) выключить? Очень хочется, чтобы обработчик прерывания делал свое дело через равные промежутки времени. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
amw 0 22 июля, 2008 Опубликовано 22 июля, 2008 · Жалоба Имеется плата с 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 0 22 июля, 2008 Опубликовано 22 июля, 2008 · Жалоба Это все мне известно. Но правилом хорошего тона является запрет прерываний на короткий промежуток времени. А 180 мкс, мне кажется, уже много. Кроме того удивляет хорошая периодичность и редкость этого явления - раз в 200 секунд (+/- несколько секунд). Чего это Linux делает с таким периодом? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
amw 0 22 июля, 2008 Опубликовано 22 июля, 2008 · Жалоба Это все мне известно. Но правилом хорошего тона является запрет прерываний на короткий промежуток времени. А 180 мкс, мне кажется, уже много. А приоритетность прерываний? А что будет если, если одновремеено с вашим прерыванием в очереди окажутся еще и другие, с более высоким приоритетом? А короткий это сколько? В общем вопросов больше чем ответов. Кроме того удивляет хорошая периодичность и редкость этого явления - раз в 200 секунд (+/- несколько секунд). Чего это Linux делает с таким периодом? А если понизить частоту процесора период изменится? Период большой, потому сложно сказать. На сколько я помню таких периодов в ядре нет. 3 секунды - обработка дисковых кешей. Есть ли больше - не знаю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GMavr 0 29 августа, 2008 Опубликовано 29 августа, 2008 · Жалоба Все оказалось просто. Период таймерного прерывания был кратен периоду интересующего меня прерывания. Причем эти периоды задавались разными кварцами. Соответственно, с некоторой периодичностью, они ничинали накладываться. Значит, обработчик таймера держит прерывания запрещенными в течении 180мкс (для моей конфигурации). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться