Input-output minneshanteringsenhet
Vid beräkning är en ingångs-utgångsminneshanteringsenhet ( IOMMU ) en minneshanteringsenhet (MMU) som ansluter en I/O -buss med direkt minnesåtkomst (DMA-kompatibel) till huvudminnet . Liksom en traditionell MMU, som översätter CPU -synliga virtuella adresser till fysiska adresser , mappar IOMMU enhetssynliga virtuella adresser (även kallade enhetsadresser eller I/O-adresser i detta sammanhang) till fysiska adresser. Vissa enheter ger också minnesskydd från felaktiga eller skadliga enheter.
Ett exempel på IOMMU är den grafiska adressomappningstabellen (GART) som används av AGP- och PCI Express- grafikkort på Intel Architecture- och AMD-datorer.
På x86-arkitekturen, innan funktionaliteten för northbridge och sydbrygga delades mellan CPU och Platform Controller Hub (PCH), utfördes inte I/O-virtualisering av CPU:n utan istället av chipset .
Fördelar
Fördelarna med att ha en IOMMU, jämfört med direkt fysisk adressering av minnet (DMA), inkluderar [ citat behövs ] :
- Stora minnesområden kan allokeras utan att behöva vara sammanhängande i fysiskt minne – IOMMU mappar sammanhängande virtuella adresser till de underliggande fragmenterade fysiska adresserna. Således kan användningen av vektoriserad I/O ( scatter-insamlingslistor ) ibland undvikas.
- Enheter som inte stöder minnesadresser som är tillräckligt långa för att adressera hela det fysiska minnet kan fortfarande adressera hela minnet via IOMMU, och undvika omkostnader förknippade med kopiering av buffertar till och från kringutrustningens adresserbara minnesutrymme.
- Till exempel kan x86-datorer adressera mer än 4 gigabyte minne med funktionen Physical Address Extension (PAE) i en x86-processor. Ändå kan en vanlig 32-bitars PCI-enhet helt enkelt inte adressera minnet ovanför 4 GiB-gränsen, och därför kan den inte komma åt det direkt. Utan en IOMMU skulle operativsystemet behöva implementera tidskrävande avvisningsbuffertar (även kända som dubbla buffertar).
- Minnet är skyddat från skadliga enheter som försöker DMA-attacker och felaktiga enheter som försöker felaktiga minnesöverföringar eftersom en enhet inte kan läsa eller skriva till ett minne som inte explicit har allokerats (mappats) för den. Minnesskyddet är baserat på det faktum att OS som körs på CPU (se figur) enbart styr både MMU och IOMMU. Enheterna är fysiskt oförmögna att kringgå eller korrupta konfigurerade minneshanteringstabeller.
- I virtualisering kan gästoperativsystem använda hårdvara som inte är speciellt gjord för virtualisering . Hårdvara med högre prestanda som grafikkort använder DMA för att komma åt minnet direkt; i en virtuell miljö mappas alla minnesadresser om av programvaran för den virtuella maskinen, vilket gör att DMA-enheter misslyckas. IOMMU hanterar denna ommappning, vilket gör att de inbyggda drivrutinerna kan användas i ett gästoperativsystem.
- I vissa arkitekturer utför IOMMU också ommappning av hårdvaruavbrott , på ett sätt som liknar standardminnesadressmapping.
- Perifert minnessökning kan stödjas av en IOMMU. En kringutrustning som använder PCI-SIG PCIe Address Translation Services (ATS) Page Request Interface (PRI)-tillägg kan upptäcka och signalera behovet av minneshanterartjänster.
För systemarkitekturer där port I/O är ett distinkt adressutrymme från minnesadressutrymmet, används inte en IOMMU när CPU:n kommunicerar med enheter via I/O-portar . I systemarkitekturer där port I/O och minne mappas till ett lämpligt adressutrymme, kan en IOMMU översätta port I/O-accesser.
Nackdelar
Nackdelarna med att ha en IOMMU, jämfört med direkt fysisk adressering av minnet, inkluderar:
- Viss försämring av prestanda från översättnings- och administrationskostnader (t.ex. sidtabellvandringar).
- Förbrukning av fysiskt minne för de tillagda I/O- sidtabellerna (översättning) . Detta kan mildras om tabellerna kan delas med processorn.
- För att minska sidtabellstorleken är granulariteten för många IOMMU:er lika med minnessökningen (ofta 4096 byte), och därför måste varje liten buffert som behöver skydd mot DMA-attack sidjusteras och nollställas innan den blir synlig för enheten. På grund av OS-minnestilldelningskomplexiteten innebär detta att enhetsdrivrutinen behöver använda studsbuffertar för de känsliga datastrukturerna och därmed minska den totala prestandan.
Virtualisering
När ett operativsystem körs inuti en virtuell maskin , inklusive system som använder paravirtualisering , såsom Xen och KVM , känner det vanligtvis inte till värdfysikaliska adresser för minnet som det kommer åt. Detta gör det svårt att tillhandahålla direkt åtkomst till datorhårdvaran, eftersom om gästoperativsystemet försökte instruera hårdvaran att utföra en direkt minnesåtkomst (DMA) med gästfysiska adresser, skulle det sannolikt förstöra minnet, eftersom hårdvaran inte vet om mappningen mellan gästfysiska och värdfysiska adresser för den givna virtuella maskinen. Korruptionen kan undvikas om hypervisorn eller värdoperativsystemet ingriper i I/O-operationen för att tillämpa översättningarna. Detta tillvägagångssätt medför emellertid en fördröjning i I/O-operationen.
En IOMMU löser detta problem genom att mappa om adresserna som nås av hårdvaran enligt samma (eller en kompatibel) översättningstabell som används för att mappa gäst-fysisk adress till värd-fysiska adresser.
Publicerade specifikationer
- AMD har publicerat en specifikation för IOMMU-teknik, kallad AMD-Vi .
- IBM erbjöd Extended Control Program Support: Virtual Storage Extended (ECPS:VSE) läge på sin 43xx -linje; kanalprogram använde virtuella adresser.
- Intel har publicerat en specifikation för IOMMU-teknik som Virtualization Technology for Directed I/O, förkortat VT-d .
- Information om Sun IOMMU har publicerats i avsnittet Device Virtual Memory Access (DVMA) i Solaris Developer Connection.
- IBM Translation Control Entry (TCE) har beskrivits i ett dokument med titeln Logical Partition Security i IBM eServer pSeries 690 .
- PCI -SIG har relevant arbete under termerna Single Root I/O Virtualization (SR-IOV) och Address Translation Services (ATS). Dessa täcktes tidigare i distinkta specifikationer, men från och med PCI Express 5.0 har de flyttats till PCI Express Base Specification.
- ARM definierar sin version av IOMMU som System Memory Management Unit (SMMU) för att komplettera sin virtualiseringsarkitektur.
Se även
externa länkar
- Bottomley, James (2004-05-01). "Använder DMA" . Linux Journal . Specialiserade systemkonsulter (121). Arkiverad från originalet 2006-07-15 . Hämtad 2006-08-09 .
- Att bemästra DMA- och IOMMU-API:erna , Embedded Linux Conference 2014, San Jose, av Laurent Pinchart