Message Signaled Interrupts

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

Message Signaled Interrupts (MSI, Прерывания, инициируемые сообщениями) — альтернативная форма прерываний, доступная в PCI версии 2.2 и более поздних, PCI-X, а также обязательная в PCI Express любых версий. Вместо присваивания фиксированного номера запроса на прерывание, устройству разрешается записывать сообщение по определённому адресу системной памяти, на деле отображенному на аппаратуру локального контроллера прерываний (local APIC) процессора. Для записи сообщения используется тот же механизм захвата шины (bus mastering), что и для DMA.

Описание[править | править код]

Для записи сообщений каждое устройство, использующее MSI, может иметь от одной до тридцати двух уникальных областей памяти.

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

Достоинства MSI:

  • возможность полного отказа от проводников INT# от устройств и разъемов PCI до главного контроллера прерываний (IO APIC), а также от самого главного контроллера прерываний, что упрощает материнскую плату.
  • в многопроцессорных и многоядерных системах устройства, использующие несколько областей MSI, получают возможность самостоятельно выбирать процессор/ядро для обработки конкретного прерывания, причем делать это полностью на уровне аппаратуры без исполнения программного кода. Это позволяет оптимизировать работу путём размещения большей части структур драйвера устройства и связанного с ним программного обеспечения (сетевых протоколов и т. д.) в кэше конкретного процессора или же в его «ближней» NUMA-памяти.

MSI поддерживается в операционных системах Microsoft Windows Vista и более поздних, в ОС FreeBSD с версии 6.3, в ОС OpenBSD с версии 5.0[1], а также в ядре Linux начиная с версии 2.6.8[2]

MSI-X[править | править код]

MSI-X — расширенный вариант MSI, позволяющий определять до нескольких тысяч прерываний.

Текущая реализация[править | править код]

Несмотря на появление MSI и MSI-X сравнительно давно, реальное повсеместное использование так и не присутствует до сих пор, если даже установлена самая последняя версия Windows 10. Например, nVidia в целях совместимости с очень старым железом, так и не активирует поддержку MSI прерываний по умолчанию в своих драйверах. А так же и большинство драйверов установленных в Windows не обеспечивают поддержку MSI изначально, что требует включения самостоятельно и для чего есть соответствующие утилиты.[1] Отсутствие включенного MSI в работающей системе приводит к повышению DPC latency[3], так как в Line-based режиме драйвера требуют больше внимания со стороны процессора. И самое ошибочное решение в такой ситуации является отключение HPET, что на самом деле еще больше увеличивает нагрузку на процессор из-за активации программных алгоритмов обработки таймеров вместо использования аппаратного таймера в южном мосте материнской платы.

Примечания[править | править код]

  1. OpenBSD 5.0 Changelog (недоступная ссылка). Архивировано 3 мая 2016 года.
  2. Сводная информация о параметре конфигурирования ядра Linux, CONFIG_PCI_MSI (недоступная ссылка). Архивировано 4 июня 2012 года.
  3. Windows: Line-Based vs. Message Signaled-Based Interrupts. MSI tool. (англ.). guru3D Forums. Дата обращения: 5 апреля 2021.

Литература[править | править код]

Ссылки[править | править код]