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 (впервые определенный в PCI 3.0) позволяет устройству выделять до 2048 прерываний. Одиночный адрес, используемый оригинальным MSI, оказался недостаточным для некоторых архитектур. В частности, он затруднял адресацию отдельных прерываний на разные процессоры, что полезно в некоторых высокоскоростных сетевых приложениях. MSI-X позволяет использовать большее количество прерываний и назначает каждому из них отдельный адрес и слово данных. Устройства с поддержкой MSI-X не обязательно поддерживают все 2048 прерываний.[3][4][5]

Текущая реализация

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

И самое ошибочное решение в такой ситуации является отключение HPET, что на самом деле ещё больше увеличивает нагрузку на процессор из-за активации программных алгоритмов обработки таймеров вместо использования аппаратного таймера в южном мосте материнской платы.[источник не указан 1086 дней]

Примечания

  1. OpenBSD 5.0 Changelog. Архивировано из оригинала 3 мая 2016 года.
  2. Сводная информация о параметре конфигурирования ядра Linux, CONFIG_PCI_MSI. Архивировано из оригинала 4 июня 2012 года.
  3. PCI Express Base Specification Revision 1.0a. — PCI-SIG, April 2003.
  4. PCI Express Base Specification Revision 1.1. — PCI-SIG, March 2005.
  5. PCI Local Bus Specification Revision 2.3. — PCI-SIG. Архивная копия от 20 июня 2023 на Wayback Machine
  6. Windows: Line-Based vs. Message Signaled-Based Interrupts. MSI tool. (амер. англ.). guru3D Forums. Дата обращения: 5 апреля 2021. Архивировано 13 апреля 2021 года.

Литература

Ссылки

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.