stringtranslate.com

Прерывание шторма

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

Фон

Поскольку обработка прерываний обычно является невытесняемой задачей в операционных системах с разделением времени , шторм прерываний вызовет вялый ответ на пользовательский ввод или даже полное замораживание системы. Это состояние обычно известно как блокировка в реальном времени . В таком состоянии система тратит большую часть своих ресурсов на обработку прерываний вместо того, чтобы выполнять другую работу. Конечному пользователю кажется, что она вообще ничего не обрабатывает, поскольку часто нет выходных данных. Шторм прерываний иногда ошибочно принимают за пробуксовку , поскольку у них обоих схожие симптомы (неотзывчивый или вялый ответ на пользовательский ввод, небольшой или нулевой выходной сигнал).

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

Большинство современных аппаратных средств и операционных систем имеют методы смягчения эффекта шторма прерываний. Например, большинство контроллеров Ethernet реализуют «ограничение скорости» прерываний, что заставляет контроллер ждать программируемое количество времени между каждым генерируемым им прерыванием. Если аналогичная функциональность отсутствует в устройстве, она обычно прописывается в драйвере устройства и/или в самой операционной системе.

Наиболее распространенной причиной является то, что устройство «позади» другого устройства подает сигнал прерывания на APIC (Advanced Programmable Interrupt Controller). Большинство периферийных устройств компьютера генерируют прерывания через APIC, поскольку количество прерываний почти всегда меньше (обычно 15 для современных ПК), чем количество устройств. Затем ОС должна запросить каждый драйвер, зарегистрированный для этого прерывания, чтобы узнать, произошло ли прерывание от его оборудования. Неисправные драйверы могут всегда отвечать «да», из-за чего ОС не будет запрашивать другие драйверы, зарегистрированные для этого прерывания (за раз может обрабатываться только одно прерывание). Таким образом, устройство, изначально запросившее прерывание, не получает обслуживания своего прерывания, поэтому генерируется новое прерывание (или не очищается), и процессор оказывается заваленным непрерывными сигналами прерываний. Любая операционная система может заблокироваться в режиме реального времени при шторме прерываний, вызванном такой ошибкой. Отладчик ядра обычно может прервать шторм, выгрузив неисправный драйвер, позволяя драйверу «ниже» неисправного очистить прерывание, если пользовательский ввод все еще возможен.

Это произошло в старой версии FreeBSD , где карты PCI , настроенные для работы в режиме совместимости с ISA , не могли правильно взаимодействовать с маршрутизацией прерываний ISA. Это приводило к тому, что прерывания либо никогда не обнаруживались операционной системой, либо операционная система никогда не могла их очистить, что приводило к шторму прерываний. [1]

Поскольку драйверы чаще всего реализуются третьей стороной, большинство операционных систем также имеют режим опроса , который запрашивает ожидающие прерывания через фиксированные интервалы или в циклическом режиме. Этот режим может быть установлен глобально, на основе драйвера, прерывания или динамически, если ОС обнаруживает состояние сбоя или избыточную генерацию прерываний. Режим опроса может быть включен динамически, когда количество прерываний или использование ресурсов, вызванное прерыванием, превышает определенные пороговые значения. Когда эти пороговые значения больше не превышаются, ОС может затем изменить прерывающий драйвер, прерывание или обработку прерываний глобально, с режима прерывания на режим опроса. Ограничение частоты прерываний в оборудовании обычно сводит на нет использование режима опроса, но все еще может происходить во время нормальной работы во время интенсивного ввода-вывода, если процессор не может переключать контексты достаточно быстро, чтобы успевать.

История

Возможно, первый прерывистый шторм произошел во время спуска Аполлона-11 на Луну в 1969 году. [2]

Соображения

Ограничение частоты прерываний должно быть тщательно настроено для достижения оптимальных результатов. Например, контроллер Ethernet с ограничением частоты прерываний будет буферизировать пакеты , которые он получает из сети между каждым прерыванием. Если частота установлена ​​слишком низкой, буфер контроллера переполнится, и пакеты будут отбрасываться. Частота должна учитывать, насколько быстро буфер может заполняться между прерываниями, а также задержку прерывания между прерыванием и передачей буфера в систему.

Смягчение прерываний

Существуют аппаратные и программные подходы к решению проблемы. Например, FreeBSD обнаруживает штормы прерываний и маскирует проблемные прерывания на некоторое время в ответ. [ необходима цитата ]

Система, используемая NAPI, является примером подхода на основе аппаратного обеспечения: система (драйвер) запускается в состоянии разрешенных прерываний, а затем обработчик прерываний отключает прерывание и позволяет потоку/задаче обрабатывать события, после чего задача опрашивает устройство, обрабатывая некоторое количество событий и разрешая прерывание.

Другой интересный подход с использованием аппаратной поддержки заключается в том, что устройство генерирует прерывание, когда состояние очереди событий меняется с «пусто» на «не пусто». Затем, если в хвосте RX FIFO нет свободных дескрипторов DMA, устройство сбрасывает событие. Затем событие добавляется в хвост, а запись FIFO помечается как занятая. Если в этот момент запись (хвост-1) свободна (очищена), будет сгенерировано прерывание (прерывание уровня) и указатель хвоста будет увеличен. Если оборудование требует подтверждения прерывания, это сделает ЦП (обработчик прерываний), обработает допустимые дескрипторы DMA в начале и вернется из прерывания.

Смотрите также

Ссылки

  1. ^ "Проблемы при обновлении системы карт FreeBSD с ISA на PCI". www.usenix.org . Получено 2024-05-07 .
  2. ^ Мюррей, Чарльз (1989). Аполлон: Гонка на Луну . Саймон и Шустер. С. 345–355.