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 сократило задержку прерываний почти в три раза по сравнению с доставкой I/O 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. ^ Спецификация локальной шины PCI abc, редакция 3.0 . PCI-SIG. Август 2002 г. {{cite book}}: |work=проигнорировано ( помощь )
  4. ^ Дон Андерсон; Джей Тродден (2003). Архитектура системы HyperTransport. Addison-Wesley Professional. стр. 200. ISBN 978-0-321-16845-0.
  5. ^ Коулман, Джеймс (2009). «Обзор методов доставки прерываний, устаревшие прерывания XT-PIC, ограничения XT-PIC». Сокращение задержки прерываний с помощью прерываний с сигналом сообщения (PDF) . Корпорация Intel. стр. 10.
  6. ^ Корбет, Джонатан; Рубини, Алессандро; Кроа-Хартман, Грег (2009). "Глава 15: Отображение памяти и DMA". Драйверы устройств Linux (3-е изд.). O'Reilly Media . Получено 20 апреля 2019 г.
  7. ^ Microsoft. «Включение прерываний, сигнализируемых сообщениями, в реестре». Корпорация Microsoft . Получено 12 апреля 2013 г.
  8. ^ "Раздел 6.1: MSI и MSI-X". PCI Express Base Specification Revision 1.0a . PCI-SIG . Апрель 2003 г.
  9. ^ "Раздел 6.1: MSI и MSI-X". PCI Express Base Specification Revision 1.1 . PCI-SIG . Март 2005.
  10. ^ "Уведомление об изменении в конструкции MSI-X". Спецификация локальной шины PCI, редакция 2.3 (PDF) . PCI-SIG .
  11. ^ Подсистемы прерываний на базе APIC на однопроцессорных ПК
  12. ^ ab Coleman, James (2009). Сокращение задержки прерывания с помощью прерываний, сигнализируемых сообщениями (PDF) . Корпорация Intel. стр. 10, 11.
  13. ^ Коулман, Джеймс (2009). "Результаты, платформа класса рабочей станции". Сокращение задержки прерывания с помощью прерываний, сигнализируемых сообщениями (PDF) . Корпорация Intel. стр. 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 в Linux 2.6.18 и более ранних версиях с Myri10GE?
  22. ^ [1] Добавление поддержки MSI в Haiku
  23. ^ [2] Коммит Haiku добавляет поддержку MSI-X

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