Mesaj întrerupte semnalizate - Message Signaled Interrupts
Mesajele întrerupte semnalizate ( MSI ) sunt o metodă alternativă în bandă de semnalizare a unei întreruperi , utilizând mesaje speciale în bandă pentru a înlocui afirmația tradițională în afara benzii a liniilor de întrerupere dedicate. Deși sunt mai complexe de implementat într-un dispozitiv, întreruperile semnalizate prin mesaje au unele avantaje semnificative față de semnalizarea de întrerupere în afara benzii pe bază de pin.
Întreruperile semnalizate de mesaje sunt acceptate în magistrala PCI de la versiunea 2.2 și în magistrala PCI Express disponibilă ulterior . Unele arhitecturi non-PCI folosesc, de asemenea, întreruperi semnalate prin mesaj.
Prezentare generală
În mod tradițional, un dispozitiv are o linie de întrerupere (pin) pe care o afirmă atunci când dorește să semnaleze o întrerupere mediului de procesare gazdă. Această formă tradițională de semnalizare de întrerupere este o formă de semnalizare de control în afara benzii, deoarece folosește o cale dedicată pentru a trimite astfel de informații de control, separat de calea principală de date. MSI înlocuiește acele linii de întrerupere dedicate cu semnalizare în bandă, prin schimbul de mesaje speciale care indică întreruperi prin calea principală de date. În special, MSI permite dispozitivului să scrie o cantitate mică de date care descriu întreruperile pe o adresă I / O specială mapată de memorie , iar chipset-ul livrează apoi întreruperea corespunzătoare unui procesor.
O concepție greșită obișnuită cu MSI este că permite dispozitivului să trimită date către un procesor ca parte a întreruperii. Datele care sunt trimise ca parte a tranzacției de scriere în memorie sunt utilizate de chipset pentru a determina ce întrerupere să declanșeze pe ce procesor; datele respective nu sunt disponibile pentru ca dispozitivul să comunice informații suplimentare manipulatorului de întreruperi.
De exemplu, PCI Express nu are deloc pini de întrerupere separați; în schimb, folosește mesaje speciale în bandă pentru a permite emularea afirmării pinului sau a dezasertării. Unele arhitecturi non-PCI folosesc și MSI; ca un alt exemplu, dispozitivele HP GSC nu au pini de întrerupere și pot genera întreruperi numai scriind direct în registrul de întrerupere al procesorului în spațiul de memorie. HyperTransport protocol suportă de asemenea MSI.
Avantaje
Deși sunt mai complexe de implementat într-un dispozitiv, întreruperile semnalizate prin mesaje prezintă unele avantaje semnificative față de semnalizarea de întrerupere în afara benzii pe bază de pin. Pe partea mecanică, mai puțini pini asigură un conector mai simplu, mai ieftin și mai fiabil. Deși acest lucru nu este un avantaj pentru conectorul PCI standard, PCI Express profită de aceste economii.
MSI crește numărul de întreruperi posibile. În timp ce PCI convențional a fost limitat la patru întreruperi pe card (și, pentru că au fost partajate între toate cardurile, majoritatea folosesc doar unul), întreruperile semnalizate prin mesaje permit zeci de întreruperi pe card, atunci când acest lucru este util.
Există, de asemenea, un avantaj ușor de performanță. În software, o întrerupere bazată pe pin ar putea concura cu o scriere postată în memorie. Adică, dispozitivul PCI ar scrie date în memorie și apoi va trimite o întrerupere pentru a indica că scrierea DMA a fost finalizată. Cu toate acestea, o punte PCI sau un controler de memorie ar putea tampona scrierea pentru a nu interfera cu o altă utilizare a memoriei. Întreruperea ar putea sosi înainte ca scrierea DMA să fie completă, iar procesorul să poată citi date vechi din memorie. Pentru a preveni această cursă, manipulatorii de întreruperi au fost obligați să citească de pe dispozitiv pentru a se asigura că scrierea DMA sa terminat. Această citire a avut o penalizare moderată de performanță. O scriere MSI nu poate trece o scriere DMA, deci cursa este eliminată.
Tipuri MSI
PCI definește două extensii opționale pentru a accepta întreruperile semnalizate prin mesaje, MSI și MSI-X. PCI Express își definește propriul mecanism bazat pe mesaje pentru a emula întreruperile PCI vechi.
MSI
MSI (definit pentru prima dată în PCI 2.2) permite unui dispozitiv să aloce 1, 2, 4, 8, 16 sau 32 de întreruperi. Dispozitivul este programat cu o adresă pe care să o scrieți (în general un registru de control într-un controler de întrerupere ) și un cuvânt de date de 16 biți pentru a-l identifica. Numărul de întrerupere este adăugat la cuvântul de date pentru a identifica întreruperea. Unele platforme, cum ar fi Windows, nu utilizează toate cele 32 de întreruperi, ci folosesc doar până la 16 întreruperi.
MSI-X
MSI-X (definit pentru prima dată în PCI 3.0) permite unui dispozitiv să aloce până la 2048 întreruperi. Adresa unică utilizată de MSI original s-a dovedit a fi restrictivă pentru unele arhitecturi. În special, a făcut dificilă direcționarea întreruperilor individuale către diferite procesoare, ceea ce este util în unele aplicații de rețea de mare viteză. MSI-X permite un număr mai mare de întreruperi și oferă fiecăruia o adresă țintă separată și un cuvânt de date. Dispozitivele cu MSI-X nu acceptă neapărat 2048 întreruperi.
Funcțiile opționale din MSI (adresarea pe 64 de biți și mascare de întrerupere) sunt, de asemenea, obligatorii cu MSI-X.
Emulare de întrerupere moștenită PCI Express
PCI Express nu are linii fizice de întrerupere, dar emulează cele 4 linii fizice ale PCI prin mesaje dedicate PCI Express, cum ar fi Assert_INTA și Deassert_INTC . Fiind bazat pe mesaje (la nivelul PCI Express), acest mecanism oferă unele, dar nu toate, avantajele mecanismului MSI strat PCI: cele 4 linii virtuale pe dispozitiv nu mai sunt partajate pe magistrală (deși controlerele PCI Express pot combină în continuare întreruperile vechi), iar schimbările de întrerupere nu mai suferă inerent de condițiile rasei.
PCI Express permite dispozitivelor să utilizeze aceste mesaje de întrerupere vechi, păstrând compatibilitatea software-ului cu driverele PCI, dar acestea sunt necesare pentru a suporta MSI sau MSI-X în stratul PCI.
sisteme x86
Pe sistemele Intel, LAPIC trebuie să fie activat pentru ca MSI / MSI-X PCI (și PCI Express) să funcționeze, chiar și pe sistemele uniprocesor (single core). În aceste sisteme, MSI-urile sunt gestionate prin scrierea vectorului de întrerupere direct în LAPIC a procesorului / nucleului care trebuie să deservească întreruperea. LAPIC-urile Intel din 2009 au acceptat până la 224 întreruperi bazate pe MSI. Potrivit unui benchmark Intel din 2009 care utilizează Linux , utilizarea MSI a redus latența întreruperilor cu un factor de aproape trei în comparație cu livrarea APIC I / O.
Suport sistem de operare
În familia de sisteme de operare Microsoft, Windows Vista și versiunile ulterioare au suport atât pentru MSI, cât și pentru MSI-X. Suportul a fost adăugat în ciclul de dezvoltare Longhorn în jurul anului 2004. MSI nu este acceptat în versiunile anterioare precum Windows XP sau Windows Server 2003 .
Solaris Express versiunea 6/05 a adăugat suport pentru MSI și MSI-X ca parte a noului cadru de întrerupere a interfeței driverului de dispozitiv (DDI).
FreeBSD 6.3 și 7.0 au adăugat suport pentru MSI și MSI-X.
OpenBSD 5.0 a adăugat suport pentru MSI. 6.0 a adăugat suport pentru MSI-X.
Linux a câștigat suport pentru MSI și MSI-X în jurul anului 2003. Versiunile kernel-ului Linux înainte de 2.6.20 sunt cunoscute ca având erori grave și limitări în implementarea lor a MSI / MSI-X.
Haiku a câștigat suport pentru MSI în jurul anului 2010. Suportul MSI-X a fost adăugat mai târziu, în 2013.
NetBSD 8.0 a adăugat suport pentru MSI și MSI-X.
VxWorks 7 acceptă MSI și MSI-X