x86 virtualisering
x86-virtualisering är användningen av hårdvaruassisterad virtualiseringskapacitet på en x86/x86-64-processor.
I slutet av 1990-talet uppnåddes x86-virtualisering genom komplexa mjukvarutekniker, nödvändiga för att kompensera för processorns brist på hårdvaruassisterad virtualiseringskapacitet samtidigt som den uppnådde rimliga prestanda. Under 2005 och 2006 introducerade både Intel ( VT-x ) och AMD ( AMD-V ) begränsat stöd för hårdvaruvirtualisering som möjliggjorde enklare virtualiseringsmjukvara men erbjöd mycket få hastighetsfördelar. Större hårdvarustöd, vilket möjliggjorde avsevärda hastighetsförbättringar, kom med senare processormodeller.
Mjukvarubaserad virtualisering
Följande diskussion fokuserar endast på virtualisering av x86-arkitekturskyddat läge .
I skyddat läge körs operativsystemets kärna med högre privilegier som ring 0 och applikationer med lägre privilegier som ring 3. [ citat behövs ] I mjukvarubaserad virtualisering har ett värdoperativsystem direkt tillgång till hårdvara medan gästoperativsystemet har begränsad tillgång till hårdvara, precis som alla andra applikationer i värdoperativsystemet. Ett tillvägagångssätt som används i x86 mjukvarubaserad virtualisering för att övervinna denna begränsning kallas ring deprivileging , vilket innebär att köra gästoperativsystemet vid en ring högre (mindre privilegierad) än 0.
Tre tekniker gjorde virtualisering av skyddat läge möjlig:
- Binär översättning används för att skriva om i termer av ring 3-instruktioner vissa ring 0-instruktioner, såsom POPF , som annars skulle misslyckas tyst eller bete sig annorlunda när de exekveras ovanför ring 0, vilket gör den klassiska trap-and-emulate virtualiseringen omöjlig. För att förbättra prestandan måste de översatta grundläggande blocken cachelagras på ett sammanhängande sätt som upptäcker kodpatchning (används till exempel i VxDs ), återanvändning av sidor av gästoperativsystemet eller till och med självmodifierande kod .
- Ett antal nyckeldatastrukturer som används av en processor måste skuggas . Eftersom de flesta operativsystem använder sökt virtuellt minne och att ge gästoperativsystemet direkt åtkomst till MMU skulle innebära att virtualiseringshanteraren förlorar kontrollen, måste en del av arbetet med x86 MMU dupliceras i mjukvara för gästoperativsystemet med hjälp av en teknik känd som skuggsidtabeller . Detta innebär att man nekar gästoperativsystemet all åtkomst till de faktiska sidtabellsposterna genom att fånga åtkomstförsök och emulera dem istället i programvara. x86-arkitekturen använder hidden state för att lagra segmentbeskrivningar i processorn, så när segmentbeskrivningarna väl har laddats in i processorn kan minnet från vilket de har laddats skrivas över och det finns inget sätt att få tillbaka deskriptorerna från processorn . Skuggdeskriptortabeller måste därför användas för att spåra ändringar som gjorts av deskriptortabellerna av gästoperativsystemet.
- I/O-enhetsemulering: Enheter som inte stöds på gästoperativsystemet måste emuleras av en enhetsemulator som körs i värdoperativsystemet.
Dessa tekniker medför vissa prestandakostnader på grund av brist på MMU-virtualiseringsstöd, jämfört med en virtuell dator som körs på en inbyggd virtualiserbar arkitektur som IBM System/370 .
På traditionella stordatorer var den klassiska typ 1- hypervisorn självstående och var inte beroende av något operativsystem eller körde några användarapplikationer själv. Däremot var de första x86-virtualiseringsprodukterna inriktade på arbetsstationsdatorer och körde ett gäst-OS i ett värd-OS genom att bädda in hypervisorn i en kärnmodul som kördes under värd-OS (typ 2 hypervisor).
Det har varit en del kontroverser om x86-arkitekturen utan hårdvaruhjälp är virtualiserbar enligt beskrivningen av Popek och Goldberg . VMware -forskare påpekade i en ASPLOS- artikel från 2006 att ovanstående tekniker gjorde x86-plattformen virtualiserbar i betydelsen att uppfylla de tre kriterierna för Popek och Goldberg, om än inte med den klassiska trap-and-emulate-tekniken.
En annan väg togs av andra system som Denali , L4 och Xen , känd som paravirtualisering , som innebär portering av operativsystem för att köras på den resulterande virtuella maskinen, som inte implementerar de delar av den faktiska x86-instruktionsuppsättningen som är svåra att virtualisera . Den paravirtualiserade I/O har betydande prestandafördelar som visas i originalet SOSP '03 Xen.
Den ursprungliga versionen av x86-64 ( AMD64 ) tillät inte en fullständig virtualisering endast för programvara på grund av bristen på segmenteringsstöd i långt läge , vilket gjorde skyddet av hypervisorns minne omöjligt, i synnerhet skyddet av fällhanteraren som körs i gästkärnans adressutrymme. Revision D och senare 64-bitars AMD-processorer (som en tumregel, de tillverkade i 90 nm eller mindre) lade till grundläggande stöd för segmentering i långt läge, vilket gjorde det möjligt att köra 64-bitars gäster i 64-bitars värdar via binär översättning . Intel lade inte till segmenteringsstöd till sin x86-64-implementering ( Intel 64 ), vilket gjorde 64-bitars virtualisering endast av programvara omöjlig på Intel-processorer, men Intel VT-x-stöd gör 64-bitars hårdvaruassisterad virtualisering möjlig på Intel-plattformen.
På vissa plattformar är det möjligt att köra en 64-bitars gäst på ett 32-bitars värdoperativsystem om den underliggande processorn är 64-bitars och stöder nödvändiga virtualiseringstillägg.
Hårdvaruassisterad virtualisering
Under 2005 och 2006 skapade Intel och AMD (som arbetar oberoende) nya processortillägg till x86-arkitekturen. Den första generationen av x86 hårdvaruvirtualisering tog upp frågan om privilegierade instruktioner. Frågan om låg prestanda för virtualiserat systemminne åtgärdades med MMU- virtualisering som lades till chipsetet senare.
Centrala behandlingsenheten
Virtuellt 8086-läge
Baserat på smärtsamma erfarenheter av det skyddade 80286- läget, som i sig inte var tillräckligt lämpligt för att köra samtidiga DOS- applikationer bra, introducerade Intel det virtuella 8086-läget i sitt 80386 -chip, som erbjöd virtualiserade 8086-processorer på 386 och senare chips. Hårdvarustöd för virtualisering av det skyddade läget i sig blev dock tillgängligt 20 år senare.
AMD-virtualisering (AMD-V)
AMD utvecklade sin första generationens virtualiseringstillägg under kodnamnet "Pacifica", och publicerade dem först som AMD Secure Virtual Machine (SVM), men marknadsförde dem senare under varumärket AMD Virtualization , förkortat AMD - V .
Den 23 maj 2006 släppte AMD Athlon 64 ( "Orleans" ), Athlon 64 X2 ( "Windsor" ) och Athlon 64 FX ( "Windsor" ) som de första AMD-processorerna att stödja denna teknik.
AMD-V-kapacitet finns också på Athlon 64 och Athlon 64 X2 -familjen av processorer med versionerna "F" eller "G" på socket AM2 , Turion 64 X2 och Opteron 2:a generationens och tredje generationens Phenom och Phenom II - processorer. APU Fusion- processorerna stöder AMD-V. AMD-V stöds inte av några Socket 939-processorer. De enda Sempron- processorerna som stöder det är APU:er och Huron , Regor , Sargas stationära processorer.
AMD Opteron-processorer som börjar med Family 0x10 Barcelona-linjen, och Phenom II-processorer, stöder en andra generationens hårdvaruvirtualiseringsteknik som kallas Rapid Virtualization Indexing (tidigare känd som Nested Page Tables under utvecklingen), senare antagen av Intel som Extended Page Tables (EPT) .
Från och med 2019 stöder alla Zen -baserade AMD-processorer AMD-V.
CPU -flaggan för AMD-V är "svm". Detta kan kontrolleras i BSD-derivat via dmesg eller sysctl och i Linux via /proc/ cpuinfo
. Instruktioner i AMD-V inkluderar VMRUN, VMLOAD, VMSAVE, CLGI, VMMCALL, INVLPGA, SKINIT och STGI.
Med vissa moderkort måste användare aktivera AMD SVM-funktionen i BIOS- inställningarna innan applikationer kan använda den.
Intel-virtualisering (VT-x)
Tidigare kodnamnet "Vanderpool", VT-x representerar Intels teknologi för virtualisering på x86-plattformen. Den 13 november 2005 släppte Intel två modeller av Pentium 4 (modell 662 och 672) som de första Intel-processorerna som stöder VT-x. CPU-flaggan för VT-x-kapacitet är "vmx"; i Linux kan detta kontrolleras via /proc/cpuinfo
, eller i macOS via sysctl machdep.cpu.features
.
"VMX" står för Virtual Machine Extensions, vilket lägger till 13 nya instruktioner: VMPTRLD, VMPTRST, VMCLEAR, VMREAD, VMWRITE, VMCALL, VMLAUNCH, VMRESUME, VMXOFF, VMXON, INVEPT, INVVPID och VMFUNC. Dessa instruktioner tillåter att gå in i och lämna ett virtuellt körningsläge där gästoperativsystemet uppfattar sig självt som att det körs med full behörighet (ring 0), men värdoperativsystemet förblir skyddat.
Från och med 2015 stöder nästan alla nyare server-, stationära och mobila Intel-processorer VT-x, med några av Intel Atom- processorerna som det primära undantaget. Med vissa moderkort måste användare aktivera Intels VT-x-funktion i BIOS- inställningarna innan applikationer kan använda den.
Intel började inkludera Extended Page Tables (EPT), en teknik för sidtabellvirtualisering, sedan Nehalem -arkitekturen, som släpptes 2008. 2010 lade Westmere till stöd för att lansera den logiska processorn direkt i verkligt läge – en funktion som kallas "obegränsad gäst ", vilket kräver att EPT fungerar.
Sedan Haswell -mikroarkitekturen (tillkännagiven 2013) började Intel inkludera VMCS-skuggning som en teknik som accelererar kapslad virtualisering av VMM. Den virtuella maskinkontrollstrukturen (VMCS) är en datastruktur i minnet som existerar exakt en gång per virtuell dator, medan den hanteras av VMM. Med varje ändring av exekveringskontexten mellan olika virtuella datorer, återställs VMCS för den aktuella virtuella datorn, vilket definierar tillståndet för den virtuella datorns virtuella processor. Så snart mer än en VMM eller kapslade VMM används, uppstår ett problem på ett sätt som liknar det som krävde hantering av skuggsidtabeller för att uppfinnas, enligt beskrivningen ovan . I sådana fall måste VMCS skuggas flera gånger (vid kapsling) och delvis implementeras i mjukvara om det inte finns något hårdvarustöd av processorn. För att göra shadow VMCS-hanteringen mer effektiv implementerade Intel hårdvarustöd för VMCS-skuggning.
VIA-virtualisering (VIA VT)
VIA Nano 3000 Series-processorer och högre stöder VIA VT-virtualiseringsteknik som är kompatibel med Intel VT-x. EPT finns i Zhaoxin ZX-C, en ättling till VIA QuadCore-E & Eden X4 som liknar Nano C4350AL .
Avbryt virtualisering (AMD AVIC och Intel APICv)
2012 tillkännagav AMD sin Advanced Virtual Interrupt Controller ( AVIC ) som riktar in sig på reduktion av avbrottskostnader i virtualiseringsmiljöer. Denna teknik, som meddelats, stöder inte x2APIC . Under 2016 är AVIC tillgänglig på AMD-familjens 15h-modeller 6Xh (Carrizo)-processorer och nyare.
Även 2012 tillkännagav Intel en liknande teknik för avbrott och APIC- virtualisering, som inte hade något varumärke vid tillkännagivandet. Senare märktes den som APIC-virtualisering ( APICv ) och den blev kommersiellt tillgänglig i Ivy Bridge EP- serien av Intel-processorer, som säljs som Xeon E5-26xx v2 (lanserades i slutet av 2013) och som Xeon E5-46xx v2 (lanserad i början av 2014).
Grafikbehandlingsenhet
Grafikvirtualisering är inte en del av x86-arkitekturen. Intel Graphics Virtualization Technology (GVT) tillhandahåller grafikvirtualisering som en del av nyare Gen-grafikarkitekturer. Även om AMD APU:er implementerar x86-64 -instruktionsuppsättningen, implementerar de AMD:s egna grafikarkitekturer ( TeraScale , GCN och RDNA ) som inte stöder grafikvirtualisering. [ citat behövs ] Larrabee var den enda grafikmikroarkitekturen baserad på x86, men den inkluderade troligen inte stöd för grafikvirtualisering.
Chipset
Minnes- och I/O-virtualisering utförs av chipset . Vanligtvis måste dessa funktioner aktiveras av BIOS, som måste kunna stödja dem och även vara inställda för att använda dem.
I/O MMU-virtualisering (AMD-Vi och Intel VT-d)
En in-/utgångsminneshanteringsenhet (IOMMU) tillåter virtuella gästmaskiner att direkt använda kringutrustning , såsom Ethernet, accelererade grafikkort och hårddiskkontroller, genom DMA och avbrottsomappning . Detta kallas ibland PCI-passthrough .
En IOMMU tillåter också operativsystem att eliminera studsbuffertar som behövs för att tillåta sig själva att kommunicera med kringutrustning vars minnesadressutrymmen är mindre än operativsystemets minnesadressutrymme, genom att använda minnesadressöversättning. Samtidigt tillåter en IOMMU också att operativsystem och hypervisorer förhindrar buggy eller skadlig hårdvara från att äventyra minnessäkerheten .
Både AMD och Intel har släppt sina IOMMU-specifikationer:
- AMD:s I/O-virtualiseringsteknik, "AMD-Vi", ursprungligen kallad "IOMMU"
- Intels "Virtualization Technology for Directed I/O" (VT-d), inkluderad i de flesta avancerade (men inte alla) nyare Intel-processorer sedan Core 2-arkitekturen.
Utöver CPU-stödet måste både moderkortskretsuppsättning och systemfirmware ( BIOS eller UEFI ) stödja IOMMU I/O-virtualiseringsfunktionaliteten för att den ska vara användbar . Endast PCI- eller PCI Express- enheter som stöder funktionsnivååterställning (FLR) kan virtualiseras på detta sätt, eftersom det krävs för att omfördela olika enhetsfunktioner mellan virtuella maskiner. Om en enhet som ska tilldelas inte stöder Message Signaled Interrupts (MSI) får den inte dela avbrottslinjer med andra enheter för att tilldelningen ska vara möjlig. Alla konventionella PCI- enheter som dirigeras bakom en PCI/ PCI-X -till-PCI Express-brygga kan bara tilldelas en virtuell gästdator på en gång; PCI Express-enheter har inga sådana begränsningar.
Nätverksvirtualisering (VT-c)
- Intels "Virtualization Technology for Connectivity" (VT-c).
PCI-SIG Single Root I/O Virtualization (SR-IOV)
PCI-SIG Single Root I/O Virtualization (SR-IOV) tillhandahåller en uppsättning allmänna (icke-x86-specifika) I/O-virtualiseringsmetoder baserade på PCI Express (PCIe) inbyggd hårdvara, som standardiserats av PCI-SIG:
- Adressöversättningstjänster (ATS) stöder inbyggd IOV över PCI Express via adressöversättning. Det kräver stöd för nya transaktioner för att konfigurera sådana översättningar.
- Enkelrots IOV (SR-IOV eller SRIOV) stöder inbyggd IOV i befintliga komplexa PCI Express-topologier med en rot. Det kräver stöd för nya enhetsfunktioner för att konfigurera flera virtualiserade konfigurationsutrymmen.
- Multi-root IOV (MR-IOV) stöder inbyggd IOV i nya topologier (till exempel bladservrar) genom att bygga på SR-IOV för att tillhandahålla flera rotkomplex som delar en gemensam PCI Express-hierarki.
I SR-IOV, den vanligaste av dessa, konfigurerar en värd-VMM enheter som stöds för att skapa och allokera virtuella "skuggor" av sina konfigurationsutrymmen så att gäster för virtuella datorer direkt kan konfigurera och komma åt sådana "skugg"-enhetsresurser. Med SR-IOV aktiverat är virtualiserade nätverksgränssnitt direkt tillgängliga för gästerna, vilket undviker inblandning av VMM och resulterar i hög övergripande prestanda; till exempel uppnår SR-IOV över 95 % av i ren metall i NASA :s virtualiserade datacenter och i Amazon Public Cloud .
Se även
- Jämförelse av programvara för applikationsvirtualisering
- Jämförelse av programvara för plattformsvirtualisering
- Hårdvaruassisterad virtualisering
- Hypervisor
- I/O-virtualisering
- Nätverksvirtualisering
- Virtualisering på OS-nivå
- Tidslinje för virtualiseringsutveckling
- Virtuell maskin
- Lista över IOMMU-stödjande hårdvara
- Second Level Address Translation (SLAT)
- Message Signaled Interrupts (MSI)
externa länkar
- Allt du behöver veta om Intels virtualiseringsteknik Arkiverad på ghostarchive.org den 10 maj 2022
- En specialkurs vid University of San Francisco om Intel EM64T och VT Extensions ( 2007)
- 2 dagars öppen källkod och öppen åtkomstklass om att skriva en VT-x VMM