Цитата(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().
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть.
© Lewis Carroll. Alice's adventures in wonderland.