x86-Virtualisierung bezeichnet hardware- und softwarebasierte Mechanismen zur UnterstĂŒtzung der Virtualisierung fĂŒr Prozessoren, die auf der x86-Architektur basieren. Sie erlaubt es unter Verwendung eines Hypervisors, mehrere Betriebssysteme parallel auf einem x86-Prozessor auszufĂŒhren und die Ressourcen isoliert und effizient zwischen den parallel ausgefĂŒhrten Betriebssystemen aufzuteilen. Die (Gast-)Betriebssysteme sollten bei der vollstĂ€ndigen Virtualisierung keinen Unterschied zwischen virtualisiertem (Parallel-)Betrieb und (exklusivem) Betrieb direkt auf der Hardware erkennen können.
Entwicklung der x86-Virtualisierung
[Bearbeiten | Quelltext bearbeiten]Seit Ende der 1990er Jahre wurde Virtualisierung fĂŒr x86-Prozessoren durch komplexe Softwareimplementierungen erreicht, die notwendig waren, da es den damaligen Prozessormodellen an hardwareseitiger UnterstĂŒtzung fĂŒr die Virtualisierung fehlte. Erst 2006 kĂŒndigten AMD (AMD-V), gefolgt von Intel (VT-x) die EinfĂŒhrung von hardwareseitiger UnterstĂŒtzung fĂŒr die Virtualisierung an. Allerdings boten die ersten Versionen der Implementierung nur sehr geringe Geschwindigkeitsvorteile gegenĂŒber den rein softwareseitig implementierten Virtualisierungslösungen.[1] Bessere hardwareseitige VirtualisierungsunterstĂŒtzung wurde erst spĂ€ter mit der Entwicklung neuerer Prozessormodelle erreicht.
Softwarebasierte Virtualisierung
[Bearbeiten | Quelltext bearbeiten]Um Ressourcen exklusiv den parallel laufenden Gastsystemen zuteilen zu können, darf nur dem Hostbetriebssystem bzw. dem Hypervisor direkter Zugriff auf die Prozessor-Hardware gewĂ€hrt werden, wĂ€hrend die Gastsysteme wie alle anderen Applikationen nur eingeschrĂ€nkte Zugriffsrechte auf die Hardware haben dĂŒrfen. So kann insbesondere verhindert werden, dass die Gastsysteme Speicherbereiche sehen bzw. Ă€ndern können, die der Hypervisor zur Verwaltung benötigt.
Mit dem 80286-Prozessor wurde in der x86-Welt der sogenannte Protected Mode eingefĂŒhrt. Mit ihm wurden vier verschiedene als Ringe bezeichnete Schutzebenen bzw. Befugnisstufen (englisch privilege levels) eingefĂŒhrt, die den darauf ablaufenden Codesegmenten unterschiedliche Rechte gewĂ€hren. Erst mit der EinfĂŒhrung dieses Konzeptes war es möglich, Virtualisierung auf Basis der x86-Architektur zu implementieren: Im Protected Mode lĂ€uft der Betriebssystem-Kernel in einem höher privilegierten Modus, der als Ring 0 bezeichnet wird, und Applikationen in einem weniger privilegierten Modus, in der Regel entweder Ring 1 oder Ring 3.
Der Hypervisor bzw. das Hostbetriebssystem werden aufgrund ihrer privilegierten Stellung bei der Ressourcenverwaltung mit Ring-0-Berechtigung ausgefĂŒhrt. Gastsysteme mĂŒssen, um den Schutz der Hypervisor-Ressourcen zu gewĂ€hrleisten, folglich entweder auf Berechtigungslevel Ring 1 (im sogenannten 0/1/3 Modell) oder Ring 3 (im sogenannten 0/3/3 Modell) ausgefĂŒhrt werden.[2]
Deprivilegierung
[Bearbeiten | Quelltext bearbeiten]Da Betriebssysteme fĂŒr die x86-Architektur (die als Gastsystem keinen Unterschied zwischen virtualisiertem Betrieb und Betrieb direkt auf der Hardware sehen dĂŒrfen) so implementiert sind, dass sie von der Ring-0-Berechtigung ausgehen und auch nur dann korrekt funktionieren, muss die Virtualisierungslösung zwei Features implementieren, nĂ€mlich Ring-Deprivilegierung und Ring Aliasing:
- Die Ring-Deprivilegierung sorgt dafĂŒr, dass das Gastsystem alle Befehle so ausfĂŒhren kann, als hĂ€tte es Ring-0-Berechtigungen auf der Hardware, obwohl es durch die Virtualisierung weniger privilegierte Berechtigungen hat.
- Das Ring Aliasing sorgt dafĂŒr, dass das Gastsystem, wenn es eine Aktion ausfĂŒhrt, immer die Antwort erhĂ€lt, die es erhalten wĂŒrde, wenn der Befehl mit Ring-0-Berechtigungen ausgefĂŒhrt worden wĂ€re. Beispielsweise existiert ein Befehl zur Abfrage des Privilegierungslevels, der mit allen Berechtigungsleveln aufgerufen werden darf. WĂŒrde ein Gastsystem diesen Befehl ohne Ring Aliasing aufrufen, wĂŒrde es Ring 1 oder 3 als Antwort erhalten, mit Ring Aliasing erhĂ€lt es Ring 0.[2]
PrimÀr- und Shadowstrukturen
[Bearbeiten | Quelltext bearbeiten]Der Hypervisor benötigt auĂerdem eigene Speicherbereiche, in denen Verwaltungsdaten z. B. zu den ZustĂ€nden der verschiedenen VMs gespeichert werden. Dabei muss sichergestellt werden, dass die zur VM gehörigen Speicherbereiche fĂŒr diese zwar sichtbar und ggf. auch Ă€nderbar sind, jedoch dĂŒrfen die abgelegten Verwaltungsdaten des Hypervisors nicht sichtbar sein oder gar verĂ€ndert werden. Der Speicher muss vielmehr so erscheinen, als wĂŒrde er exklusiv durch die jeweilige VM benutzt. Um das zu gewĂ€hrleisten, werden die entsprechenden Speicherbereiche mehrfach vorgehalten: In der PrimĂ€rstruktur werden die Hypervisor-Daten in den fĂŒr jede VM vorhandenen SekundĂ€r- oder auch Shadowstrukturen genannten Bereichen der VMs gespeichert. FĂŒr Prozessorregister werden die Zugriffe durch den Hypervisor normalerweise abgefangen (trapped) und der Zustand des Prozessors ĂŒber die Shadowstruktur emuliert. Bei jedem Speicherzugriff der VMs muss der Hypervisor kontrollieren, ob es sich um einen solchen besonders geschĂŒtzten Speicherbereich handelt, und ggf. die Daten aus der Shadowstruktur der jeweiligen VM statt aus der PrimĂ€rstruktur zur VerfĂŒgung stellen, jedoch ohne dass die VM aus ihrer Sicht dies feststellen kann. Diese Technik wird auch als Tracing bezeichnet.[3]
Softwarebasierte Vollvirtualisierung fĂŒr die x86-Architektur
[Bearbeiten | Quelltext bearbeiten]Um diese Funktionen zu implementieren, wird normalerweise ein nach der Trap-and-Emulate-Methode funktionierendes Verfahren[4] bereits hardwareseitig im Prozessor bereitgestellt. Es stand in der x86-Architektur bis 2006 (danach siehe hier), aber keine HardwareunterstĂŒtzung fĂŒr die Virtualisierung zur VerfĂŒgung, so dass o. g. Funktionen softwareseitig implementiert werden mussten. Allerdings lĂ€sst sich das Trap-and-Emulate-Verfahren nicht softwareseitig ohne Hardwaresupport im Prozessor umsetzen,[3] sodass man fĂŒr die softwarebasierte Virtualisierung einen anderen Weg gehen musste:
- Die sogenannte BinĂ€rcode-Ăbersetzung wird eingesetzt, um Anweisungen des Gastsystems auf Prozessorinstruktionslevel von Ring-3-/Ring-1-Anweisungen in entsprechende Ring-0-Anweisungen des Host-Systems zu ĂŒbersetzen â und zwar in geeigneter Art und Weise, um Ring-Deprivilegierung und Ring Aliasing umzusetzen.[3]:3[5]
- Eine Reihe von wichtigen Datenstrukturen, die durch den Prozessor benutzt werden, mĂŒssen geshadowed werden. Da die meisten Gastbetriebssysteme paged virtual memory benutzen und direkter Zugriff auf die Speicherbereiche ggf. zum Ăberschreiben von Daten des Hypervisors bzw. anderer VMs fĂŒhren wĂŒrde, muss einiges, was normalerweise durch die Memory Management Unit des Prozessors geleistet wird, softwareseitig im Hypervisor nochmals implementiert werden, um dies zu verhindern.[6]:5[3] Insbesondere ist es eben erforderlich, den direkten Zugriff der Gastsysteme auf die primĂ€ren Seitentabellen zu verhindern, indem alle Zugriffe darauf abgefangen und softwareseitig emuliert werden. Die x86-Architektur setzt auĂerdem hidden states ein (das sind Prozessorzustandsdaten, die nicht in Prozessorregistern, sondern auĂerhalb des Prozessors im Speicher abgelegt sind), um Segment-Deskriptoren des Prozessors zwischenzuspeichern und ggf. wiederherzustellen. Sobald die Speicherbereiche in den Prozessor geladen wurden, um die Segmentdeskriptoren wiederherzustellen, wird der fĂŒr den hidden state ursprĂŒnglich verwendete Speicherbereich freigegeben und kann sofort, z. B. durch Anwendungsprozesse, ĂŒberschrieben werden. Deswegen mĂŒssen auch Shadow Descriptor Tables implementiert werden, um Ănderungen an diesen Speicherbereichen durch die VMs nachvollziehen zu können.[7]
- I/O-GerĂ€te der Gastsysteme, die im Hostbetriebssystem nicht unterstĂŒtzt werden, mĂŒssen durch entsprechende Softwareemulatoren auf dem Hostbetriebssystem emuliert werden.[8]
Um diese komplexen Aufgaben softwareseitig zu implementieren, wurden die ersten Virtualisierungsprodukte als Typ-2-Hypervisoren zum Einsatz auf Workstation-Computern konzipiert. Der Hypervisor wurde auf dem Hostbetriebssystem in einem Kernelmodul ausgefĂŒhrt. Dadurch mussten zumindest keine Treiber fĂŒr die Hosthardware entwickelt werden, da ohnehin schon sehr viel Aufwand zur Implementierung der oben beschriebenen Verfahren notwendig war.[8]
Diese Art der Implementierung des Hypervisors fĂŒhrte zu geringerer relativer Performance der VMs (im Relation zur Performance des Hostprozessors), insbesondere aufgrund der softwareseitig reimplementierten Teile der MMU im Vergleich zur Performance von VMs auf CPU-Architekturen, die bereits hardwareseitig eine Virtualisierung der MMU vorsehen wie z. B. die IBM-System/370-Architektur[3]:10[9]:17 und 21
Es gab auĂerdem eine kontroverse wissenschaftliche Diskussion darĂŒber, ob die x86-Architektur ohne hardwaregestĂŒtzte Virtualisierungsfeatures wie hier beschrieben ĂŒberhaupt die Voraussetzungen zur Virtualisierung gemÀà den von Popek and Goldberg aufgestellten Kriterien erfĂŒllt. VMware-Forscher zeigten 2006 in einem ASPLOS-Aufsatz, dass die oben dargestellten Techniken die x86-Plattform virtualisierbar im Sinne der drei von Popek und Goldberg aufgestellten Kriterien macht, jedoch nicht mit Hilfe der ebenfalls von Popek und Goldberg beschriebenen klassischen âtrap-and-emulateâ-Technik.[3]:2â3
Softwarebasierte Paravirtualisierung fĂŒr die x86-Architektur
[Bearbeiten | Quelltext bearbeiten]Ein anderer Ansatz zur Implementierung der Virtualisierung wurde von Hypervisoren wie Denali, L4 und Xen verfolgt. Um die Implementierung zu vereinfachen, wurde eine grundsĂ€tzliche Forderung nicht umgesetzt, nĂ€mlich die, dass das Gastbetriebssystem unverĂ€ndert sowohl auf einem virtualisierten wie auf einem nicht virtualisierten System lauffĂ€hig sein solle. Es wurden spezielle Versionen der Gastbetriebssysteme entwickelt, die fĂŒr den Betrieb mit dem jeweiligen Hypervisor abgestimmt waren. Diese Hypervisoren virtualisierten dabei besonders schwierig zu implementierende und performancehemmende Aspekte der x86-Architektur nicht, z. B. die I/O-Virtualisierung. Dieser als Paravirtualisierung bezeichnete Ansatz kann signifikante Performancegewinne bringen, wie im SOSP-Xen-Aufsatz von 2003 nachgewiesen wird.[10] Die Paravirtualisierung spielt heute vor allem im Embedded Umfeld noch eine wichtige Rolle.
Softwarebasierte Vollvirtualisierung fĂŒr die x86-64-Architektur
[Bearbeiten | Quelltext bearbeiten]Die erste Version von x86-64 von AMD (AMD64) erlaubte keine ausschlieĂlich softwarebasierte Virtualisierung mehr, da es keinen Support fĂŒr Segmentierung im Long Mode (also fĂŒr die 64-Bit-Adressierung) mehr bot und damit den Schutz des Speichers des rein softwarebasierten Hypervisors nicht erlaubte.[11][12]:11 and 20. Die Revisionen D und alle folgenden 64-Bit-AMD-Prozessoren (grob gesagt alle in 90-nm-Technologie und darunter entworfenen Chips) wurde mit grundlegendem Support fĂŒr Segmentation im Long Mode ausgestattet, womit 64-Bit-Gastsysteme auf 64-Bit-Hostsystemenen ĂŒber BinĂ€rcode-Ăbersetzung virtualisiert werden konnten.
Intel bot ebenfalls keinen Support fĂŒr Segmentierung im Long Mode fĂŒr seine x86-64-Prozessoren an, wodurch wie auch bei AMDs ersten Chips keine softwarebasierte 64-Bit-Virtualisierung möglich war. Im Unterschied zu AMD bot Intel allerdings mit VT-x zu diesem Zeitpunkt bereits hardwareunterstĂŒtzte Virtualisierung fĂŒr seine 64-Bit-Prozessoren an.[13][14]:4
HardwareunterstĂŒtzte Virtualisierung
[Bearbeiten | Quelltext bearbeiten]2005 bzw. 2006 brachten Intel und AMD (unabhĂ€ngig voneinander) Prozessormodelle mit Befehlssatzerweiterungen zur VirtualisierungsunterstĂŒtzung auf den Markt. Die erste Generation dieser Prozessoren adressierte vor allem das Problem der Deprivilegierung. Verbesserungen bezĂŒglich der virtualisierten Systemspeicherverwaltung fĂŒr VMs wurden in spĂ€teren Prozessormodellen hinzugefĂŒgt. Dazu gehört im Besonderen die hardwareseitige Erweiterung bestimmter Speicher-Register, um es virtuellen Maschinen zu ermöglichen, direkt ohne den Umweg ĂŒber den Virtual Machine Manager (VMM) auf diese Ressourcen zuzugreifen. In den folgenden Jahren wurde diese Technik dann unter verschiedenen Bezeichnungen hauptsĂ€chlich auf Server-ChipsĂ€tze und Server-Netzwerkkarten adaptiert.
Prozessoren (CPU)
[Bearbeiten | Quelltext bearbeiten]Virtual 8086 Mode
[Bearbeiten | Quelltext bearbeiten]Aufgrund der groĂen Schwierigkeiten mit dem Protected Mode des 80286, der selbst nur bedingt tauglich war, parallel mehrere MS-DOS-Applikationen zu betreiben, fĂŒhrte Intel mit dem 80386er-Prozessor den Virtual 8086 Mode ein, der eine virtualisierte 8086-Umgebung ermöglichte. HardwareunterstĂŒtzung fĂŒr die Virtualisierung des Protected Mode wurde durch Intel erst gut 20 Jahre spĂ€ter im Prozessorbefehlssatz implementiert.[15]
Der Virtual 8086 Mode lĂ€sst sich softwareseitig allerdings erkennen und erlaubt den Programmen Zugriff auf die Erweiterungen, die mit dem 286er spĂ€teren Prozessorgenerationen eingefĂŒhrt wurden.
AMD-Virtualisierung (AMD-V)
[Bearbeiten | Quelltext bearbeiten]
AMD entwickelte die erste Generation von Befehlssatzerweiterungen fĂŒr die VirtualisierungsunterstĂŒtzung unter dem Namen âPacificaâ und brachte sie schlieĂlich unter dem Namen AMD Secure Virtual Machine (SVM)[16] auf den Markt. SpĂ€ter wurde die Technologie erneut umbenannt und wird bis heute unter dem Namen AMD Virtualization â kurz AMD-V vermarktet.
Am 23. Mai 2006 brachte AMD den Athlon 64, den Athlon 64 X2 und den Athlon 64 FX als erste Prozessoren mit AMD-V-UnterstĂŒtzung auf den Markt.
AMD-V ist auch auf den Prozessorfamilien Athlon 64 und Athlon 64 X2 mit Revisionsnummern âFâ und âGâ, basierend auf dem AM2-Sockel, Turion 64 X2- und Opteron-Prozessoren der 2.[17] und 3. Generation,[18] sowie den Prozessoren Phenom und Phenom II verfĂŒgbar. Auch die Prozessorfamilie AMD Fusion unterstĂŒtzt AMD-V. Die einzigen Sempron-Prozessoren, die AMD-V unterstĂŒtzten, sind die Versionen Huron und Sargas. Nicht unterstĂŒtzt wird AMD-V von allen Prozessoren mit 939-Sockel.
AMD Opteron CPUs ab der 0x10 Barcelona Line und Phenom II CPUs unterstĂŒtzen eine fortgeschrittene Virtualisierungstechnologie, die von AMD âRapid Virtualization Indexingâ genannt wird (wĂ€hrend der Entwicklung wurde sie als âNested Page Tablesâ bezeichnet). Intel fĂŒhrte spĂ€ter eine vergleichbare Technologie ein, Extended Page Tables (EPT) genannt. Die im Allgemeinen als âSecond Level Address Translationâ (kurz SLAT) bezeichnete Technologie unterstĂŒtzt die Page-Table-Virtualisierung, die vor allem das Problem der softwareseitig zu implementierenden Shadow-Struktur-Synchronisation fĂŒr VMs löst.
Notebook-Prozessoren der AMD A4-Serie, wie der A-9120, beinhalten AMD-Virtualisierung.[19]
Intel-Virtualisierungstechnologie (VT-x)
[Bearbeiten | Quelltext bearbeiten]
Zu Beginn noch unter dem Codenamen âVanderpoolâ gefĂŒhrt, stellt die schlieĂlich âVT-xâ genannte Technologie HardwareunterstĂŒtzung fĂŒr die Virtualisierung auf Intel-x86-Prozessoren bereit. Am 13. November 2005 fĂŒhrte Intel mit den Modellen 662 und 672 der Pentium 4-Reihe die ersten beiden Prozessoren mit VT-x UnterstĂŒtzung ein. Gleichzeitig wurde eine vergleichbare Technologie fĂŒr die Itanium-Prozessorfamilie unter der Bezeichnung âVT-iâ vorgestellt.
Eine der wichtigsten Neuerungen durch VT-x ist die EinfĂŒhrung eines weiteren, ausschlieĂlich fĂŒr die Virtualisierung gedachten Berechtigungskonzepts, neben dem Ring-Konzept. Es werden zwei neue Berechtigungslevels âVMX Root Operationâ und âVMX non Root Operationâ eingefĂŒhrt. Der Hypervisor wird im âVMX Root Operationâ ausgefĂŒhrt, VMs dagegen im âVMX non Root Operationâ. In beiden Modi sind Ring-0 bis Ring-3 als Berechtigungen vorhanden â jedoch können Ring-0-Instruktionen, die im âVMX non Root Operationâ durch VMs ausgefĂŒhrt werden, nun durch den Hypervisor im âVMX Root Operationâ gefangen werden â es handelt sich also um eine Implementierung des âtrap-and-emulateâ-Verfahrens.[4] Damit ist das Problem der Deprivilegierung gelöst und muss nicht mehr ĂŒber BinĂ€r-Translation softwareseitig implementiert werden.[2]
Nach wie vor unterstĂŒtzen jedoch nicht alle Intel-Prozessoren VT-x.[20] Ob VT-x unterstĂŒtzt wird oder nicht, kann sogar fĂŒr unterschiedliche Versionen (identifizierbar anhand von Intels sSpec Number) desselben Prozessormodells variieren.[21][22] Selbst im Mai 2011 unterstĂŒtzt der vorwiegend fĂŒr den Laptopeinsatz konzipierte P6100 VT-x nicht.[23] Eine vollstĂ€ndige Liste aller Intel-Prozessoren mit VT-x-UnterstĂŒtzung findet man auf der Intel-eigenen Website.[24]
Bei einigen Mainboards muss Intels VT-x-Feature auĂerdem explizit ĂŒber die BIOS-Einstellungen aktiviert werden.[25]
Mit der Nehalem-Prozessorfamilie fĂŒhrte Intel eine von Intel selbst als Extended Page Tables (EPT)[26] bezeichnete Technologie ein.[27][28] Die im Allgemeinen als âSecond Level Address Translationâ (kurz SLAT) bezeichnete Technologie unterstĂŒtzt die Page-Table-Virtualisierung,[29] die vor allem das Problem der softwareseitig zu implementierenden Shadow-Struktur-Synchronisation fĂŒr VMs löst.
Mit der Westmere-Prozessorreihe ergĂ€nzte Intel ein Feature, welches es erlaubt, logische Prozessoren direkt im âReal Modeâ zu starten. Das Feature wird von Intel âUnrestricted Guestâ genannt und setzt das vorher eingefĂŒhrte EPT-Feature voraus.[30][31]
Eine als VMCS Shadowing bezeichnete Technologie erlaubt seit der EinfĂŒhrung mit Prozessoren der Haswell-Prozessorfamilie hardwareunterstĂŒtzte geschachtelte Virtualisierung:[32] Die sogenannte Virtual Machine Control Structure (VMCS), eine Speicherstruktur, die fĂŒr jede VM genau einmal vorhanden ist, wird durch den VMM verwaltet, das heiĂt bei jedem Wechsel des AusfĂŒhrungskontexts von einer VM zu einer anderen wird die jeweilige VMCS wiederhergestellt und legt den Zustand der Virtuellen Maschine fest.[33] Sobald mehr als ein VMM oder ein VMM in einem VMM geschachtelt ausgefĂŒhrt wird, entsteht ein Ă€hnliches Problem wie bei den Seitentabellenzugriffen (die mit EPT, RVI bzw. Second Level Address Translation gelöst wurden): die VMCS-Struktur muss nun mehrfach geshadowed werden (innerhalb des Gast-VMM, des VMM und nochmals auf den eigentlichen Prozessor bzw. Speicher). Um den Aufwand dafĂŒr zu reduzieren, wurden mit der Haswell-Generation hardwareunterstĂŒtzte Shadow VMCS eingefĂŒhrt.[34]
VIA-Virtualisierung (VIA VT)
[Bearbeiten | Quelltext bearbeiten]Mit den VIA-Nano-3000-Prozessoren[35] und spĂ€teren Prozessoren fĂŒhrte VIA eine als âVIA VTâ bezeichnete HardwareunterstĂŒtzung fĂŒr die Virtualisierung ein, die kompatibel zu Intels VT-x-Erweiterung ist.
Interrupt-Virtualisierung (AMD AVIC, Intel APICv)
[Bearbeiten | Quelltext bearbeiten]2012 kĂŒndigte AMD ihre Advanced Virtual Interrupt Controller (AVIC) genannte Befehlssatzerweiterung an, die darauf abzielt, die Verwaltung und Virtualisierung von Interrupts effizienter durch Hardwaresupport zu implementieren.[36] Es existieren jedoch noch keine AMD-Prozessoren, die diese Erweiterung auch implementieren.[37]
Ebenfalls 2012 kĂŒndigte Intel eine vergleichbare Technologie zur Interrupt-Virtualisierung an, die anfĂ€nglich keine eigene Bezeichnung bekam.[38] SpĂ€ter wurde sie als APIC virtualization (APICv)[39] bezeichnet und erstmals in der Ivy-Bridge-Prozessorfamilie implementiert, die unter der Bezeichnung Xeon E5-26xx v2 (seit Ende 2013 verfĂŒgbar) und Xeon E5-46xx v2 (seit Anfang 2014 verfĂŒgbar) verkauft werden.[40]
Grafikprozessoren (GPU)
[Bearbeiten | Quelltext bearbeiten]Grafikprozessoren-Virtualisierungstechnologie (Intel GVT-d, GVT-g, GVT-s)
[Bearbeiten | Quelltext bearbeiten]Mit der integrierten GPU Intel Iris Pro wurde durch Intel am 1. Januar 2014 eine Technologie (bezeichnet als Intel GVT-d, GVT-g und GVT-s) zur hardwarebasierten UnterstĂŒtzung der Virtualisierung fĂŒr Grafikprozessoren angekĂŒndigt. Intels integrierter Grafikprozessor Iris Pro kann mit Hilfe der Erweiterung GVT-d entweder explizit einer VM zugewiesen werden oder auf Timesharing-Basis zwischen mehreren VMs geteilt werden, wobei der native Grafiktreiber benutzt werden kann (GVT-g), oder zwischen mehreren VMs unter Verwendung eines virtuellen Grafiktreibers geteilt werden (GVT-s).[41]
PC-Chipsatz
[Bearbeiten | Quelltext bearbeiten]Speicher- und I/O-Virtualisierung muss durch den Chipsatz unterstĂŒtzt werden, da dieser auch die entsprechenden Funktionen hardwareseitig fĂŒr den Prozessor zur VerfĂŒgung stellt.[42] Normalerweise muss dieses Feature im BIOS eingeschaltet werden, und das BIOS muss in der Lage sein, diese Funktionen auch zu unterstĂŒtzen und zu nutzen. Das bedeutet auch, das BIOS muss in einer Version vorliegen, die an die Virtualisierungsfunktionen des Chipsatzes angepasst ist.
I/O-MMU-Virtualisierung (AMD-Vi und VT-d)
[Bearbeiten | Quelltext bearbeiten]Eine Input/Output Memory Management Unit (IOMMU) erlaubt Gast-VMs die direkte Benutzung von PeripheriegerÀten, z. B. Netzwerkkarten, Grafikkarten, Festplattenkontrollern durch das Mapping von Speicherzugriffen und Interrupts. Diese Technik wird manchmal auch als PCI Passthrough bezeichnet.[43]
Eine IOMMU erlaubt es Betriebssystemen und VMs auĂerdem, PeripheriegerĂ€te durch Pufferung leichter zu benutzen, deren Speicher oder Verarbeitungsgeschwindigkeit kleiner ist als der der VM oder Betriebssysteme. Die entsprechenden Mechanismen werden durch die IOMMU implementiert und mĂŒssen damit nicht durch die Betriebssysteme bzw. VMs implementiert werden.
Sowohl AMD als auch Intel haben entsprechende Spezifikationen herausgebracht:
- AMDs I/O-Virtualisierungs-Technologie, AMD-Vi, ursprĂŒnglich IOMMU genannt.[44]
- Intels Virtualization Technology for Directed I/O (VT-d),[45] welches durch die meisten high-end (jedoch nicht alle) Nehalem und neuere Intel-Prozessoren unterstĂŒtzt wird.[46]
Neben der UnterstĂŒtzung durch die CPU mĂŒssen sowohl das Mainboard, der Chipsatz als auch das BIOS oder UEFI die IOMMU-Virtualisierungsfunktionen unterstĂŒtzen, um diese auch wirklich nutzbar zu machen.
Netzwerk-Virtualisierung (VT-c)
[Bearbeiten | Quelltext bearbeiten]Intels âVirtualization Technology for Connectivityâ (VT-c).[47] ist ein Oberbegriff fĂŒr mehrere Technologien (insbesondere VDMQ und SR-IOV) zur Vereinfachung des Netzwerkmanagements und Beschleunigung des Netzwerkszugriffs fĂŒr den Hypervisor bzw. die Gast-VMs.[48]
Virtual Machine Device Queues (VMDQ)
[Bearbeiten | Quelltext bearbeiten]Um den Netzwerkverkehr jeweils der richtigen virtuellen Maschine zuordnen zu können, benötigt der Hypervisor eine einem Netzwerkswitch vergleichbare Funktion zur Aufteilung des Netzwerkverkehrs auf die Gast-VMs. Um diese Funktion hardwareseitig zu unterstĂŒtzen, hat Intel mit VMDQ im Intel Ethernet-Controller bereits einen Mechanismus implementiert, der diese Verteilung fĂŒr den Hypervisor ĂŒbernimmt und damit die Handhabung vereinfacht und beschleunigt.[48] Dabei wird jeder VM eine separate Queue fĂŒr âseineâ Netzwerkpakete innerhalb des Netzwerkadapters zugewiesen, wodurch die Quelle- und Zielerkennung fĂŒr Netzwerkpakete vereinfacht und beschleunigt wird. Die Quelle- und Zielerkennung sowie das erforderliche Umkopieren der Netzwerkpakete im Speicher zwischen den Queues und den VMs wird von einem virtuellen Switch innerhalb des Hypervisors erledigt.[49]
PCI-SIG Single Root I/O Virtualization (SR-IOV)
[Bearbeiten | Quelltext bearbeiten]
PCI-SIG Single Root I/O Virtualization (SR-IOV) stellt einen Satz von (nicht fĂŒr x86 spezifisch konzipierten) I/O-Virtualisierungs-Methoden basierend auf PCI Express (PCIe) Hardware bereit, die durch die PCI-SIG standardisiert sind:[50] Die Technologie ermöglicht die parallele Nutzung eines einzelnen Intel-Ethernet-Server-Adapter-Ports durch mehrere virtuelle Funktionen. IT-Administratoren können so bereitgestellte virtuelle Ports nutzen, um mehrere separate Verbindungen zu virtuellen Maschinen herzustellen:[48]
- Address translation services (ATS) unterstĂŒtzt native IOV ĂŒber PCI Express durch Address Translation. Die Benutzung durch Software erfordert die UnterstĂŒtzung einer neuen Art von Transaktion, um die Address Translation einzuschalten.
- Single-root IOV (SR-IOV or SRIOV) unterstĂŒtzt native IOV in existierenden Single-Root-PCI-Express-Topologien. Die Benutzung durch Software erfordert die UnterstĂŒtzung neuer Device-Eigenschaften, um virtualisierte Konfigurationen zu verwalten.
- Multi-root IOV (MR-IOV) unterstĂŒtzt native IOV in neuen Topologien (z. B. Blade Servern)
Die SR-IOV-FunktionalitĂ€t wird in verschiedenen Schichten implementiert, die sich folgendermaĂen einteilen lassen:
- Virtuelle Maschine mit Netzwerkkarte basierend auf virtuellen Funktionen (VM)
- Interface mit der Virtuellen Maschine (VM)
- Management-Applikation (Hypervisor)
- Management Virtual Machine (Hypervisor)
- Hardware-Funktionen (Netzwerkkarte mit aktiviertem SR-IOV-Support)
- Virtuelle Funktionen, aus Hardwarefunktionen abgeleitet (Netzwerkkarte mit aktiviertem SR-IOV-Support)
- Externes Netzwerk
Weblinks
[Bearbeiten | Quelltext bearbeiten]- Die Grundlagen der Intel Virtualisierungs Technologien (Servermeile Technet)
- Everything You Need to Know About the Intel Virtualization Technology
- A special course at the University of San Francisco on Intel EM64T and VT Extensions (2007)
- 2 day open source & open access class on writing a VT-x VMM
Einzelnachweise
[Bearbeiten | Quelltext bearbeiten]- â Keith Adams, Ole Agesen: A Comparison of Software and Hardware Techniques for x86 Virtualization. (PDF; 153 kB) VMware. ASPLOSâ06 October 21â25, 2006, San Jose, California. âSurprisingly, we find that the first-generation hardware support rarely offers performance advantages over existing software techniques. We ascribe this situation to high VMM/guest transition costs and a rigid programming model that leaves little room for software flexibility in managing either the frequency or cost of these transitions.â
- â a b c Intel Virtualization Technology: Hardware Support for Efficient Processor Virtualization. Intel.com, 10. August 2006, abgerufen am 2. Mai 2010.
- â a b c d e f A Comparison of Software and Hardware Techniques for x86 Virtualization. (PDF) VMware, abgerufen am 8. September 2010.
- â a b Gerald J. Popek and Robert P. Goldberg: Formal Requirements for Virtualizable Third Generation Architectures. In: Communications of the ACM. 17. Jahrgang, Nr. 7, 1974, S. 412â421, doi:10.1145/361011.361073.
- â USENIX Technical Program â Abstract â Security Symposium â 2000. Usenix.org, 29. Januar 2002, abgerufen am 2. Mai 2010.
- â Virtualization: architectural considerations and other evaluation criteria. (PDF) VMware, abgerufen am 8. September 2010.
- â Patent US6397242B1: Virtualization system including a virtual machine monitor for a computer with a segmented architecture. Angemeldet am 26. Oktober 1998, veröffentlicht am 28. Mai 2002, Anmelder: VMWare Inc, Erfinder: Scott W. Davine et al.â
- â a b Patent US6496847B1: System and method for virtualizing computer systems. Angemeldet am 10. September 1998, veröffentlicht am 17. Dezember 2002, Anmelder: VMWare Inc, Erfinder: Edouard Bugnion et al.â
- â VMware and Hardware Assist Technology. (PDF) Abgerufen am 8. September 2010.
- â Xen and the Art of Virtualization. (PDF) Abgerufen am 2. September 2014.
- â How retiring segmentation in AMD64 long mode broke VMware. Pagetable.com, 9. November 2006, abgerufen am 2. Mai 2010.
- â VMware and CPU Virtualization Technology. (PDF) VMware, archiviert vom am 17. Juli 2011; abgerufen am 8. September 2010. Info: Der Archivlink wurde automatisch eingesetzt und noch nicht geprĂŒft. Bitte prĂŒfe Original- und Archivlink gemÀà Anleitung und entferne dann diesen Hinweis.
- â VMware KB: Hardware and firmware requirements for 64bit guest operating systems. Kb.vmware.com, abgerufen am 2. Mai 2010.
- â Software and Hardware Techniques for x86 Virtualization. (PDF) Archiviert vom am 5. Januar 2010; abgerufen am 2. Mai 2010.
- â Tom Yager: Sending software to do hardwareâs job | Hardware â InfoWorld. Images.infoworld.com, 5. November 2004, archiviert vom am 14. September 2014; abgerufen am 8. Januar 2014.
- â 33047_SecureVirtualMachineManual_3-0.book. (PDF) Abgerufen am 2. Mai 2010.
- â What are the main differences between Second-Generation AMD Opteron processors and first-generation AMD Opteron processors? publisher=Amd.com. Archiviert vom am 15. April 2009; abgerufen am 4. Februar 2012.
- â What virtualization enhancements do Third-Generation AMD Opteron processors feature? Amd.com, archiviert vom am 16. April 2009; abgerufen am 4. Februar 2012.
- â 9to5tech: Laptops Under 40000. 21. Dezember 2020, abgerufen am 24. Dezember 2020 (englisch).
- â Jon Stokes: Microsoft, Intel goof up Windows 7's âXP Modeâ. Arstechnica.com, 8. Mai 2009, abgerufen am 2. Mai 2010.
- â Processor Spec Finder. Processorfinder.intel.com, abgerufen am 2. Mai 2010.
- â Intel Processor Number Details. In: Intel. Intel, 3. Dezember 2007, abgerufen am 3. Oktober 2008.
- â Intel Pentium P6100 (3M cache, 2.00 GHz). Ark.intel.com, abgerufen am 4. Februar 2012.
- â About Intel Virtualization Technology â abgerufen am 23. August 2014
- â Windows Virtual PC: Configure BIOS. Microsoft, abgerufen am 8. September 2010.
- â Gil Neiger, A. Santoni, F. Leung u. a.: Intel Virtualization Technology: Hardware Support for Efficient Processor Virtualization. In: Intel Technology Journal. 10. Jahrgang, Nr. 3. Intel, S. 167â178, doi:10.1535/itj.1003.01 (download.intel.com ( des vom 17. MĂ€rz 2008 im Internet Archive) [abgerufen am 6. Juli 2008]).
- â First the Tick, Now the Tock: Next Generation Intel Microarchitecture (Nehalem). (PDF) Intel, abgerufen am 6. Juli 2008 (englisch).
- â Technology Brief: Intel Microarchitecture Nehalem Virtualization Technology. (PDF) Intel, 25. MĂ€rz 2009, abgerufen am 3. November 2009.
- â Matt Gillespie: Best Practices for Paravirtualization Enhancements from Intel Virtualization Technology: EPT and VT-d. In: Intel Software Network. Intel, 12. November 2007, abgerufen am 6. Juli 2008.
- â Intel added unrestricted guest mode on Westmere micro-architecture and later Intel CPUs, it uses EPT to translate guest physical address access to host physical address. With this mode, VMEnter without enable paging is allowed.
- â If the âunrestricted guestâ VM-execution control is 1, the âenable EPTâ VM-execution control must also be 1. (PDF).
- â 4th Gen Intel Core vPro Processors with Intel VMCS Shadowing. (PDF) Intel, abgerufen am 17. August 2013 (englisch).
- â Understanding Intel Virtualization Technology (VT). ( vom 8. September 2014 im Internet Archive) (MS PowerPoint) Abgerufen am 1. September 2014.
- â The âwhat, where and whyâ of VMCS shadowing. Abgerufen am 1. September 2014
- â VIA Introduces New VIA Nano 3000 Series Processors. ( vom 22. Januar 2013 im Internet Archive) via.com
- â Wei Huang: Introduction of AMD Advanced Virtual Interrupt Controller. XenSummit 2012
- â Jörg Rödel: Next-generation Interrupt Virtualization for KVM. AMD, August 2012, abgerufen am 12. Juli 2014.
- â Jun Nakajima: Reviewing Unused and New Features for Interrupt/APIC Virtualization. Intel, 13. Dezember 2012, abgerufen am 12. Juli 2014.
- â Khang Nguyen: APIC Virtualization Performance Testing and Iozone. In: software.intel.com. 17. Dezember 2013, abgerufen am 12. Juli 2014.
- â Product Brief Intel Xeon Processor E5-4600 v2 Product Family. Intel, 14. MĂ€rz 2014, abgerufen am 12. Juli 2014.
- â Sunil Jain: Intel Graphics Virtualization Update. Intel, Mai 2014, abgerufen am 11. Mai 2014 (englisch).
- â Intel platform hardware support for I/O virtualization. Intel.com, 10. August 2006, abgerufen am 4. Februar 2012.
- â Linux virtualization and PCI passthrough. IBM, abgerufen am 10. November 2010.
- â AMD I/O Virtualization Technology (IOMMU) Specification Revision 1.26. Abgerufen am 24. Mai 2011.
- â Intel Virtualization Technology for Directed I/O (VT-d) Architecture Specification. (PDF) Abgerufen am 4. Februar 2012.
- â Intel Virtualization Technology for Directed I/O (VT-d) Supported CPU List. Ark.intel.com, abgerufen am 4. Februar 2012.
- â Intel Virtualization Technology for Connectivity (VT-c). Intel.com, abgerufen am 27. Mai 2014.
- â a b c Intel Connectivity-Virtualisierungstechnik. Abgerufen am 1. September 2014
- â Are VMDq and SR-IOV performing the same function?
- â PCI-SIG I/O Virtualization (IOV) Specifications. Pcisig.com, 31. MĂ€rz 2011, abgerufen am 4. Februar 2012.
