Přerušení signalizace zprávy - Message Signaled Interrupts - Wikipedia

Přerušení signalizace zprávy (MSI) jsou alternativou v pásmu způsob signalizace a přerušit, používající speciální zprávy uvnitř pásma jako náhradu tradičních mimo pásmo uplatnění vyhrazených přerušovacích linek. I když je složitější implementovat v zařízení, přerušení signalizovaná zprávou mají některé významné výhody oproti mimopásmové signalizaci přerušení založené na pinech.

Přerušení signalizovaná zprávou jsou podporována v PCI sběrnici od verze 2.2 a později k dispozici PCI Express autobus. Některé architektury jiné než PCI také používají přerušení signalizovaná zprávou.

Přehled

Zařízení má tradičně linku přerušení (pin), kterou ohlásí, když chce signalizovat přerušení do prostředí zpracování hostitele. Tato tradiční forma signalizace přerušení je mimopásmovou formou řídicí signalizace, protože k zasílání těchto řídicích informací používá vyhrazenou cestu, odděleně od hlavní datové cesty. MSI nahrazuje tyto vyhrazené přerušovací linky signalizací v pásmu výměnou speciálních zpráv, které indikují přerušení hlavní datovou cestou. MSI zejména umožňuje zařízení zapsat malé množství dat popisujících přerušení do speciálu paměťově mapované I / O adresu a čipová sada poté doručí příslušné přerušení do procesoru.[1][2][3]

Běžná mylná představa s MSI je, že umožňuje zařízení odesílat data do procesoru jako součást přerušení. Data, která se odesílají jako součást transakce zápisu do paměti, používá čipová sada k určení, které přerušení se má spustit na kterém procesoru; tato data nejsou k dispozici, aby zařízení mohlo komunikovat další informace s obsluhou přerušení.[1][2][3]

Například PCI Express vůbec nemá samostatné piny pro přerušení; místo toho používá speciální zprávy v pásmu, aby bylo možné emulovat tvrzení nebo odhlášení z pinů. Některé architektury jiné než PCI také používají MSI; jako další příklad, HP GSC zařízení nemají piny přerušení a mohou generovat přerušení pouze zápisem přímo do registru přerušení procesoru v paměťovém prostoru.[Citace je zapotřebí ] The HyperTransport protokol také podporuje MSI.[4]

Výhody

I když je složitější implementovat v zařízení, přerušení signalizovaná zprávou mají některé významné výhody oproti mimopásmové signalizaci přerušení založené na pinech. Po mechanické stránce méně kolíků umožňuje jednodušší, levnější a spolehlivější konektor. I když to není výhoda standardního konektoru PCI, PCI Express tyto úspory využívá.

MSI zvyšuje počet možných přerušení. Zatímco konvenční PCI byla omezena na čtyři přerušení na kartu (a protože byla sdílena mezi všemi kartami, většina používá pouze jednu), přerušení signalizovaná zprávou umožňují desítky přerušení na kartu, pokud je to užitečné.[1]

K dispozici je také nepatrná výkonnostní výhoda. V softwaru by mohlo přerušení založené na pinech závod s zveřejnil zápis do paměti. To znamená, že zařízení PCI zapíše data do paměti a poté pošle přerušení, které indikuje DMA zápis byl dokončen. Most PCI nebo řadič paměti však může ukládat do vyrovnávací paměti zápis, aby nerušil použití jiné paměti. Přerušení mohlo dorazit dříve, než byl dokončen zápis DMA, a procesor mohl číst zastaralá data z paměti.[5] Aby se tomuto závodu předešlo, museli zpracovatelé přerušení číst ze zařízení, aby bylo zajištěno, že zápis DMA skončil. Toto čtení mělo mírný výkonnostní trest. Zápis MSI nemůže projít zápisem DMA, takže závod je vyloučen.[6]

Typy MSI

PCI definuje dvě volitelná rozšíření pro podporu přerušených zpráv, MSI a MSI-X. PCI Express definuje svůj vlastní mechanismus založený na zprávách pro emulaci starších přerušení PCI.

MSI

MSI (poprvé definováno v PCI 2.2) umožňuje zařízení přidělit 1, 2, 4, 8, 16 nebo 32 přerušení. Zařízení je naprogramováno s adresou, na kterou se má zapisovat (obvykle řídicí registr v řadič přerušení ) a 16bitové datové slovo k jeho identifikaci. K datovému slovu se přidá číslo přerušení k identifikaci přerušení.[1] Některé platformy, jako je Windows, nepoužívají všech 32 přerušení, ale používají pouze až 16 přerušení.[7]

MSI-X

MSI-X (poprvé definováno v PCI 3.0) umožňuje zařízení přidělit až 2048 přerušení. Bylo zjištěno, že jediná adresa používaná původním MSI je pro některé architektury omezující. Zejména bylo obtížné zacílit jednotlivá přerušení na různé procesory, což je užitečné u některých vysokorychlostních síťových aplikací. MSI-X umožňuje větší počet přerušení a dává každému z nich samostatnou cílovou adresu a datové slovo. Zařízení s MSI-X nemusí nutně podporovat 2048 přerušení.[3][8][9][10]

U MSI-X jsou povinné také volitelné funkce v MSI (64bitové adresování a maskování přerušení).

Emulace staršího rozhraní PCI Express

PCI Express nemá fyzické přerušovací linky, ale emuluje 4 fyzické linky PCI prostřednictvím vyhrazených zpráv PCI Express, jako je Assert_INTA a Deassert_INTC. Vzhledem k tomu, že tento mechanismus je založen na zprávách (na vrstvě PCI Express), poskytuje některé, ale ne všechny výhody mechanismu MSI vrstvy PCI: 4 virtuální linky na zařízení již nejsou sdíleny na sběrnici (ačkoli řadiče PCI Express mohou stále interně kombinuje starší přerušení) a změny přerušení již neodmítají přirozeně závodní podmínky.

PCI Express umožňuje zařízením používat tyto starší zprávy o přerušení, přičemž si zachovává softwarovou kompatibilitu s ovladači PCI, ale vyžaduje se také podpora MSI nebo MSI-X ve vrstvě PCI.

systémy x86

V systémech Intel LAPIC musí být povoleno, aby PCI (a PCI Express) MSI / MSI-X fungovaly, a to i na jednoprocesorových (jednojádrových) systémech.[11][12] V těchto systémech jsou MSI zpracovávány zápisem vektoru přerušení přímo do LAPIC procesoru / jádra, které potřebuje přerušení obsluhovat. Intel LAPIC z roku 2009 podporoval až 224 přerušení založených na MSI.[12] Podle srovnávacího testu Intel z roku 2009 Linux, pomocí MSI se snížila latence přerušení o faktor téměř tři ve srovnání s dodávkou I / O APIC.[13]

Podpora operačního systému

V rodině operačních systémů Microsoft Windows Vista a novější verze mají podporu pro MSI i MSI-X. Podpora byla přidána do Longhorn vývojový cyklus kolem roku 2004.[14] MSI není podporováno v dřívějších verzích jako Windows XP nebo Windows Server 2003.[15]

Solaris Express vydání 6/05 přidalo podporu pro MSI a MSI-X jako součást jejich nového rozhraní ovladače zařízení (DDI) rámec přerušení.[16]

FreeBSD 6.3 a 7.0 přidána podpora pro MSI a MSI-X.[17]

OpenBSD 5.0 přidaná podpora pro MSI.[18] 6.0 přidaná podpora pro MSI-X.[19]

Linux podporu pro MSI a MSI-X získal kolem roku 2003.[20] Linuxové jádro o verzích před 2.6.20 je známo, že mají závažné chyby a omezení při implementaci MSI / MSI-X.[21]

Haiku získala podporu pro MSI kolem roku 2010.[22] Podpora MSI-X byla přidána později, v roce 2013.[23]

NetBSD 8.0 přidána podpora pro MSI a MSI-X.

VxWorks 7 podporuje MSI a MSI-X

Reference

  1. ^ A b C d Specifikace PCI místní sběrnice revize 2.2. Oddíl 6.8 (MSI). PCI-SIG. Prosince 1998.
  2. ^ A b Specifikace PCI místní sběrnice revize 2.3. Oddíl 6.8 (MSI). PCI-SIG. 2002.
  3. ^ A b C PCI Local Bus Specification Revision 3.0. Oddíl 6.8 (MSI a MSI-X). PCI-SIG. Srpna 2002.
  4. ^ Don Anderson; Jay Trodden (2003). Architektura systému HyperTransport. Addison-Wesley Professional. str. 200. ISBN  978-0-321-16845-0.
  5. ^ Coleman, James (2009). "Přehled metod přerušení dodávky, starší přerušení XT-PIC, omezení XT-PIC". Snížení latence přerušení pomocí přerušení signalizovaných zprávou (PDF). Intel Corporation. str. 10.
  6. ^ Corbet, Jonathan; Rubini, Alessandro; Kroah-Hartman, Greg (2009). "Kapitola 15: Mapování paměti a DMA". Ovladače zařízení pro Linux (3. vyd.). O'Reilly Media. Citováno 2019-04-20.
  7. ^ Microsoft. „Povolení přerušení zpráv signalizovaných v registru“. společnost Microsoft. Citováno 12. dubna 2013.
  8. ^ „Oddíl 6.1: MSI a MSI-X“. PCI Express Base Specification Revision 1.0a. PCI-SIG. Dubna 2003.
  9. ^ „Oddíl 6.1: MSI a MSI-X“. PCI Express Base Specification Revision 1.1. PCI-SIG. Březen 2005.
  10. ^ „Oznámení o technické změně MSI-X“. Specifikace PCI místní sběrnice revize 2.3 (PDF). PCI-SIG.
  11. ^ Přerušovací subsystémy založené na APIC na jednoprocesorových počítačích
  12. ^ A b Coleman, James (2009). Snížení latence přerušení pomocí přerušení signalizovaných zprávou (PDF). Intel Corporation. 10, 11.
  13. ^ Coleman, James (2009). "Výsledky, platforma třídy pracovní stanice". Snížení latence přerušení pomocí přerušení signalizovaných zprávou (PDF). Intel Corporation. str. 19.
  14. ^ Přerušení vylepšení architektury v systému Microsoft Windows Vista, 11. srpna 2004
  15. ^ PCI, PCI-X a PCI Express: Často kladené otázky, 18. listopadu 2005, strana 4
  16. ^ John Stearns, Govinda Tatti, Edward Gillett a Anish Gupta (27. března 2006) Změny provedené pro podporu MSI v Solaris Express Advanced Interrupt Handlers v systému Solaris Express 6/05 OS
  17. ^ John H. Baldwin, „Přerušení PCI pro stroje x86 v rámci FreeBSD“, sekce „dostupnost“
  18. ^ Mark Kettenis, (květen 2011) Přerušení MSI pro mnoho zařízení na těch architekturách, které je mohou podporovat (zatím jen amd64, i386, sparc64)
  19. ^ Mark Kettenis, (květen 2016) Byla přidána počáteční podpora pro MSI-X
  20. ^ MSI-HOWTO.txt první verze
  21. ^ Mohu s Myri10GE používat přerušení MSI-X na Linuxu 2.6.18 a starším?
  22. ^ [1] Haiku zavázat přidání podpory MSI
  23. ^ [2] Haiku se zavazuje přidat podporu MSI-X

externí odkazy