stringtranslate.com

Прерывания, сигнализируемые сообщениями

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

Прерывания, сигнализируемые сообщениями, поддерживаются в шине PCI , начиная с версии 2.2, а также в более поздней доступной шине PCI Express . Некоторые архитектуры, отличные от PCI, также используют прерывания, сигнализируемые сообщениями.

Обзор

Традиционно устройство имеет линию прерывания (контакт), которую оно устанавливает, когда хочет подать сигнал о прерывании в среду обработки хоста. Эта традиционная форма сигнализации прерывания является внеполосной формой сигнализации управления, поскольку она использует выделенный путь для отправки такой управляющей информации отдельно от основного пути данных. MSI заменяет эти выделенные линии прерываний внутриполосной сигнализацией путем обмена специальными сообщениями, указывающими на прерывания по основному пути данных. В частности, MSI позволяет устройству записывать небольшой объем данных, описывающих прерывания, в специальный адрес ввода-вывода, отображенный в памяти , а затем набор микросхем доставляет соответствующее прерывание процессору. [1] [2] [3]

Распространенным заблуждением относительно MSI является то, что он позволяет устройству отправлять данные процессору как часть прерывания. Данные, отправляемые как часть транзакции записи в память, используются набором микросхем для определения того, какое прерывание на каком процессоре запускать; эти данные недоступны устройству для передачи дополнительной информации обработчику прерываний. [1] [2] [3]

Например, PCI Express вообще не имеет отдельных выводов прерывания; вместо этого он использует специальные внутриполосные сообщения, позволяющие эмулировать подтверждение или отмену подтверждения контакта. Некоторые архитектуры, отличные от PCI, также используют MSI; Другой пример: устройства HP GSC не имеют выводов прерываний и могут генерировать прерывания только путем записи непосредственно в регистр прерываний процессора в пространстве памяти. [ нужна цитация ] Протокол HyperTransport также поддерживает MSI. [4]

Преимущества

Несмотря на то, что прерывания, сигнализируемые сообщениями, сложнее реализовать в устройстве, они имеют некоторые существенные преимущества по сравнению с сигнализацией внеполосных прерываний на основе выводов. С механической стороны меньшее количество контактов делает разъем более простым, дешевым и надежным. Хотя это не дает преимуществ стандартному разъему PCI, PCI Express использует эту экономию.

MSI увеличивает количество возможных прерываний. В то время как обычный PCI был ограничен четырьмя прерываниями на карту (и, поскольку они были общими для всех карт, большинство из них используют только одно), прерывания, сигнализируемые сообщениями, допускают десятки прерываний на карту, когда это полезно. [1]

Также есть небольшое преимущество в производительности. В программном обеспечении прерывание на основе вывода может соревноваться с опубликованной записью в память. То есть устройство PCI записывает данные в память, а затем отправляет прерывание, указывающее, что запись DMA завершена. Однако мост PCI или контроллер памяти могут буферизовать запись, чтобы не мешать другому использованию памяти. Прерывание может произойти до завершения записи DMA, и процессор сможет прочитать устаревшие данные из памяти. [5] Чтобы предотвратить эту гонку, обработчики прерываний должны были читать данные с устройства, чтобы гарантировать завершение записи DMA. Это чтение имело умеренное снижение производительности. Запись MSI не может пройти запись DMA, поэтому гонка исключается. [6]

Типы MSI

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

МСИ

MSI (впервые определенный в PCI 2.2) позволяет устройству выделять 1, 2, 4, 8, 16 или 32 прерывания. Устройство запрограммировано с адресом для записи (обычно этот адрес представляет собой управляющий регистр в контроллере прерываний ) и 16-битным словом данных для его идентификации. Номер прерывания добавляется к слову данных для идентификации прерывания. [1] Некоторые платформы, такие как Windows, не используют все 32 прерывания, а используют только до 16 прерываний. [7]

MSI-X

MSI-X (впервые определенный в PCI 3.0) позволяет устройству выделять до 2048 прерываний. Один адрес, используемый исходным MSI, оказался ограничительным для некоторых архитектур. В частности, стало сложнее направлять отдельные прерывания на разные процессоры, что полезно в некоторых высокоскоростных сетевых приложениях. MSI-X допускает большее количество прерываний и дает каждому отдельный целевой адрес и слово данных. Устройства с MSI-X не обязательно поддерживают прерывания 2048. [3] [8] [9] [10]

Дополнительные функции MSI (64-битная адресация и маскирование прерываний) также являются обязательными для MSI-X.

Эмуляция устаревших прерываний PCI Express

PCI Express не имеет контактов физического прерывания, но эмулирует 4 контакта физического прерывания PCI через специальные сообщения PCI Express, такие как Assert_INTA и Deassert_INTC . Будучи основанным на сообщениях (на уровне PCI Express), этот механизм обеспечивает некоторые, но не все, преимущества механизма MSI уровня PCI: 4 виртуальных контакта на устройство больше не используются совместно на шине (хотя контроллеры PCI Express могут по-прежнему объединяют устаревшие прерывания внутри), а изменения прерываний больше не страдают от условий гонки.

PCI Express позволяет устройствам использовать эти устаревшие сообщения о прерываниях, сохраняя совместимость программного обеспечения с драйверами PCI, но они также должны поддерживать MSI или MSI-X на уровне PCI.

системы x86

В системах Intel LAPIC должен быть включен для работы PCI (и PCI Express) MSI/MSI-X даже в однопроцессорных (одноядерных) системах. [11] [12] В этих системах MSI обрабатываются путем записи вектора прерывания непосредственно в LAPIC процессора/ядра, который должен обслуживать прерывание. Intel LAPIC 2009 года поддерживали до 224 прерываний на основе MSI. [12] Согласно тесту Intel 2009 года с использованием Linux , использование MSI сократило задержку прерываний почти в три раза по сравнению с доставкой APIC ввода-вывода. [13]

Поддержка операционной системы

В семействе операционных систем Microsoft Windows Vista и более поздние версии поддерживают как MSI, так и MSI-X. Поддержка была добавлена ​​в цикле разработки Longhorn примерно в 2004 году. [14] MSI не поддерживается в более ранних версиях, таких как Windows XP или Windows Server 2003 . [15]

В Solaris Express 6/05, выпущенном в 2005 году, добавлена ​​поддержка MSI и MSI-X как часть новой структуры прерываний интерфейса драйвера устройства (DDI). [16]

В FreeBSD 6.3 и 7.0, выпущенных в 2008 году, добавлена ​​поддержка MSI и MSI-X. [17]

В OpenBSD 5.0, выпущенную в 2011 году, добавлена ​​поддержка MSI. [18] В версии 6.0 добавлена ​​поддержка MSI-X. [19]

Linux получил поддержку MSI и MSI-X примерно в 2003 году. [20] Известно, что версии ядра Linux до 2.6.20 содержат серьезные ошибки и ограничения в реализации MSI/MSI-X. [21]

Haiku получила поддержку MSI примерно в 2010 году. [22] Поддержка MSI-X была добавлена ​​позже, в 2013 году. [23]

В NetBSD 8.0, выпущенном в 2018 году, добавлена ​​поддержка MSI и MSI-X.

VxWorks 7 поддерживает MSI и MSI-X.

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

Рекомендации

  1. ^ abcd Спецификация локальной шины PCI, версия 2.2 . PCI-SIG. Декабрь 1998 года. {{cite book}}: |work=игнорируется ( помощь )
  2. ^ ab Спецификация локальной шины PCI, версия 2.3 . PCI-SIG. 2002. {{cite book}}: |work=игнорируется ( помощь )
  3. ^ abc Спецификация локальной шины PCI, версия 3.0 . PCI-SIG. Август 2002. {{cite book}}: |work=игнорируется ( помощь )
  4. ^ Дон Андерсон; Джей Тродден (2003). Архитектура гипертранспортной системы. Аддисон-Уэсли Профессионал. п. 200. ИСБН 978-0-321-16845-0.
  5. ^ Коулман, Джеймс (2009). «Обзор методов доставки прерываний, устаревшие прерывания XT-PIC, ограничения XT-PIC». Уменьшение задержки прерывания за счет использования прерываний, сигнализируемых сообщениями (PDF) . Корпорация Интел. п. 10.
  6. ^ Корбет, Джонатан; Рубини, Алессандро; Кроа-Хартман, Грег (2009). «Глава 15: Отображение памяти и DMA». Драйверы устройств Linux (3-е изд.). О'Рейли Медиа . Проверено 20 апреля 2019 г.
  7. ^ Майкрософт. «Включение прерываний, сигнализируемых сообщениями, в реестре». Корпорация Майкрософт . Проверено 12 апреля 2013 г.
  8. ^ «Раздел 6.1: MSI и MSI-X» . Базовая спецификация PCI Express, версия 1.0a . PCI-SIG . Апрель 2003 года.
  9. ^ «Раздел 6.1: MSI и MSI-X» . Базовая спецификация PCI Express, версия 1.1 . PCI-SIG . Март 2005 года.
  10. ^ «Уведомление о технических изменениях MSI-X» . Спецификация локальной шины PCI, версия 2.3 (PDF) . PCI-SIG .
  11. ^ Подсистемы прерываний на основе APIC на однопроцессорных ПК
  12. ^ Аб Коулман, Джеймс (2009). Уменьшение задержки прерывания за счет использования прерываний, сигнализируемых сообщениями (PDF) . Корпорация Интел. стр. 10, 11.
  13. ^ Коулман, Джеймс (2009). «Результаты, платформа класса рабочих станций». Уменьшение задержки прерывания за счет использования прерываний, сигнализируемых сообщениями (PDF) . Корпорация Интел. п. 19.
  14. ^ Улучшения архитектуры прерываний в Microsoft Windows Vista, 11 августа 2004 г.
  15. ^ PCI, PCI-X и PCI Express: часто задаваемые вопросы, 18 ноября 2005 г., стр. 4
  16. ^ Джон Стернс, Говинда Татти, Эдвард Джиллетт и Аниш Гупта (27 марта 2006 г.) Изменения, внесенные для поддержки MSI в расширенных обработчиках прерываний Solaris Express в ОС Solaris Express 6/05.
  17. ^ Джон Х. Болдуин, «Прерывания PCI для машин x86 под FreeBSD», раздел «доступность»
  18. ^ Марк Кеттенис, (май 2011 г.) Прерывания MSI для многих устройств на тех архитектурах, которые их поддерживают (пока только amd64, i386, sparc64)
  19. ^ Марк Кеттенис, (май 2016 г.) Добавлена ​​первоначальная поддержка MSI-X.
  20. ^ MSI-HOWTO.txt первая версия
  21. ^ Могу ли я использовать прерывания MSI-X с Myri10GE в Linux 2.6.18 и более ранних версиях?
  22. ^ [1] Haiku обязуется добавить поддержку MSI.
  23. ^ [2] Haiku обязуется добавить поддержку MSI-X.

Внешние ссылки