Прервать шторм
Эта статья нуждается в дополнительных цитатах для проверки . ( февраль 2013 г. ) |
В операционных системах шторм прерываний — это событие, во время которого процессор получает чрезмерное количество прерываний , которые занимают большую часть времени процессора. Штормы прерываний обычно вызываются аппаратными устройствами, которые не поддерживают ограничение частоты прерываний.
Фон
[ редактировать ]Поскольку обработка прерываний обычно не является вытесняемой задачей в с разделением времени операционных системах , шторм прерываний приведет к замедлению реакции на ввод пользователя или даже к полной зависании системы. Это состояние широко известно как активная блокировка . В таком состоянии система тратит большую часть своих ресурсов на обработку прерываний вместо выполнения другой работы. Для конечного пользователя создается впечатление, что он вообще ничего не обрабатывает, поскольку зачастую выходные данные отсутствуют. Шторм прерываний иногда ошибочно принимают за тряску , поскольку они оба имеют схожие симптомы (отсутствие реакции или вялая реакция на ввод пользователя, небольшой вывод или его полное отсутствие).
К частым причинам относятся: неправильно настроенное или неисправное оборудование, неисправные драйверы устройств, ошибки в операционной системе или метастабильность одного или нескольких компонентов. Последнее условие редко возникает за пределами прототипа или любительского оборудования.
Большинство современных аппаратных средств и операционных систем имеют методы смягчения последствий шторма прерываний. Например, большинство контроллеров Ethernet реализуют «ограничение скорости прерываний», которое заставляет контроллер ждать программируемый промежуток времени между каждым генерируемым им прерыванием. Если подобные функции отсутствуют в устройстве, они обычно записываются в драйвер устройства и/или саму операционную систему.
Наиболее распространенной причиной является ситуация, когда устройство «позади» другого сигнализирует о прерывании APIC (усовершенствованному программируемому контроллеру прерываний). Большинство компьютерных периферийных устройств генерируют прерывания через APIC, поскольку количество прерываний почти всегда меньше (обычно 15 для современного ПК), чем количество устройств. Затем ОС должна запросить каждый драйвер, зарегистрированный для этого прерывания, чтобы узнать, возникло ли прерывание от его оборудования. Неисправные драйверы всегда могут утверждать «да», в результате чего ОС не запрашивает другие драйверы, зарегистрированные для этого прерывания (одновременно может обрабатываться только одно прерывание). Таким образом, устройство, которое первоначально запросило прерывание, не получает обслуживания своего прерывания, поэтому генерируется новое прерывание (или оно не очищается), и процессор оказывается перегружен непрерывными сигналами прерывания. Любая операционная система может блокироваться при шторме прерываний, вызванном такой ошибкой. Отладчик ядра обычно может остановить бурю , выгрузив неисправный драйвер, позволяя драйверу «под» неисправным драйвером очистить прерывание, если пользовательский ввод все еще возможен.
Это произошло в более старой версии FreeBSD , где карты PCI , настроенные для работы в режиме совместимости с ISA, не могли должным образом взаимодействовать с маршрутизацией прерываний ISA. Это либо приведет к тому, что прерывания никогда не будут обнаружены операционной системой, либо операционная система никогда не сможет их очистить, что приведет к шторму прерываний. [1]
Поскольку драйверы чаще всего реализуются сторонними производителями, большинство операционных систем также имеют режим опроса , который запрашивает ожидающие прерывания через фиксированные интервалы или в циклическом порядке. Этот режим можно установить глобально, для каждого драйвера, для каждого прерывания или динамически, если ОС обнаруживает состояние неисправности или чрезмерную генерацию прерываний. Режим опроса может быть включен динамически, когда количество прерываний или использование ресурсов, вызванное прерыванием, превышает определенные пороговые значения. Когда эти пороговые значения больше не превышаются, ОС может изменить драйвер прерывания, прерывание или обработку прерывания глобально, из режима прерывания в режим опроса. Аппаратное ограничение частоты прерываний обычно сводит на нет использование режима опроса, но все же может произойти во время нормальной работы во время интенсивного ввода-вывода, если процессор не может переключать контексты достаточно быстро, чтобы не отставать.
История
[ редактировать ]Возможно, первый шторм-прерывание произошел во время спуска «Аполлона-11» на Луну в 1969 году. [2]
Соображения
[ редактировать ]Для достижения оптимальных результатов ограничение частоты прерываний должно быть тщательно настроено. Например, контроллер Ethernet с ограничением частоты прерываний будет буферизовать пакеты , которые он получает из сети, между каждым прерыванием. Если скорость установлена слишком низкой, буфер контроллера переполнится, и пакеты будут отброшены. Скорость должна учитывать, насколько быстро может заполняться буфер между прерываниями, а также задержку прерывания между прерыванием и передачей буфера в систему.
Смягчение прерываний
[ редактировать ]Существуют аппаратные и программные подходы к решению проблемы. Например, FreeBSD обнаруживает штормы прерываний и в ответ на некоторое время маскирует проблемные прерывания. [ нужна ссылка ]
Система, используемая NAPI, является примером аппаратного подхода: система (драйвер) запускается в состоянии разрешения прерывания, а обработчик прерываний затем отключает прерывание и позволяет потоку/задаче обрабатывать события, а затем опрашивает задачу. устройство, обрабатывающее некоторое количество событий и разрешающее прерывание.
Еще один интересный подход с использованием аппаратной поддержки — это тот, в котором устройство генерирует прерывание, когда состояние очереди событий меняется с «пустого» на «не пустое». Затем, если в хвосте RX FIFO нет свободных дескрипторов DMA, устройство отбрасывает событие. Затем событие добавляется в хвост, и запись FIFO помечается как занятая. Если в этот момент запись (хвост-1) свободна (очищена), будет сгенерировано прерывание (прерывание уровня), и указатель хвоста будет увеличен. Если аппаратное обеспечение требует подтверждения прерывания, ЦП (обработчик прерывания) сделает это, обработает действительные дескрипторы DMA в заголовке и вернется из прерывания.
См. также
[ редактировать ]- Трансляционный шторм
- Межпроцессорное прерывание (IPI)
- Немаскируемое прерывание (NMI)
- Программируемый контроллер прерываний (PIC)
Ссылки
[ редактировать ]- ^ «Проблемы с обновлением карточной системы FreeBSD с ISA на PCI» . www.usenix.org . Проверено 7 мая 2024 г.
- ^ Мюррей, Чарльз (1989). Аполлон: Гонка на Луну . Саймон и Шустер. стр. 345–355.