ltstudiooo - Fotolia
Hardware-Unterstützung für Virtualisierung verstehen
Moderne Virtualisierung wird erst durch Hardware möglich, die diese Technologie von sich aus aktiv unterstützt. Dies geschieht durch zusätzliche Befehlssätze in den Prozessoren.
Die Chip-Hersteller Intel Corp., Advanced Micro Devices Inc. (AMD) und ARM Ltd. verwenden für ihre Prozessoren Befehlssatz-Erweiterungen, die prozessorseitige Hardwareunterstützung für die Virtualisierung ermöglichen. Wer sich einen ersten Überblick verschaffen möchte, stolpert schnell über einen Wust aus Codes und Abkürzungen.
Die Unterstützung durch Hardware ist schon seit langer Zeit eine nicht mehr wegzudenkende Voraussetzung für eine praxistaugliche Virtualisierung. Sie ermöglicht es dem Hypervisor der Wahl, komplexe Übersetzungen von Befehlsprivilegien zu verarbeiten und virtualisierte Speicherressourcen mit Hardware-Taktgeschwindigkeit zu verwalten.
Befehlssatzerweiterungen sind komplette Ansammlungen zusätzlicher Transistoren auf Prozessoren und anderen Chips, die neue Fähigkeiten mit sich bringen und das direkte Abarbeiten spezifischer neuer Instruktionen ermöglichen. Diese Erweiterungen stellen die Grundlage der Unterstützung einer Virtualisierung durch Hardware dar. Ohne solche Erweiterungen würden solche Funktionen und Aufgaben zur Virtualisierungsunterstützung eine Softwareemulation erfordern, die oftmals zu schwerfällig und ineffizient ist, um wichtige Virtualisierungsaufgaben zu erledigen.
Virtualisierung ist überwiegend eine Rechenaktivität, die eine umfassende Speicherverwaltung und Kontrolle über privilegierten Zugang erfordert. Aus diesem Grund ermöglichen sowohl Intel als auch AMD die Unterstützung der Virtualisierung durch Befehlssatzerweiterungen und verschiedene zusätzliche Funktionen für ihre Prozessoren.
Intel Virtualization Technology (VT)
Die Virtualisierungsunterstützung durch Hardware wurde bei Intel erstmalig im Jahr 2005 mit der Einführung von Intel VT-x bei zwei Modellen des Pentium-4-Prozessors vorgestellt. VT-x erweiterte den Befehlssatz der Prozessoren um 10 zusätzliche Instruktionen für die Erzeugung und Steuerung virtueller Maschinen (VM). Die Virtualisierungssoftware läuft in einem virtuellen Ausführungsmodus, in dem ein Gast-Betriebssystem volle Privilegien genießt, ohne dass das geschützte und isolierte Host-Betriebssystem beeinträchtigt wird.
Weitere Virtualisierungstechnologien wurden auch nach der ursprünglichen Einführung von VT-x vorgestellt. Wenngleich diese keine spezifischen VT-x-Befehle umfassten, boten die zusätzlichen Funktionen weitere Virtualisierungsmöglichkeiten für Intel-Prozessoren.
Im Jahr 2008 führte Intel die Unterstützung von Extended Page Tables (EPT) ein. Dabei handelte es sich um Intels Implementierung einer Second Level Address Translation (SLAT), auch verschachteltes Paging genannt.
Bei der Virtualisierung werden physische Speicheradressen in virtuelle Speicheradressen übersetzt. Ein Problem liegt darin, dass dieser Vorgang gleich zweimal passiert: einmal für die Host-VM und ein weiteres Mal für jede Gast-VM. Dadurch wird der Overhead erhöht und die Leistung verlangsamt. SLAT-Technologien wie EPT verbessern die Speicherverwaltung und steigern die Leistung durch den Abbau dieses Overheads und das gemeinsame Abarbeiten aller Speicherverwaltungsaufgaben am Stück.
Ab dem Jahr 2010 unterstütze Intel uneingeschränkte Gastzugänge, auch IA-32e-Modus genannt, bei dem logische Prozessoren und virtuelle CPUs im Real-Mode auf dem Prozessor arbeiten können. Dadurch lassen sich VM-Gäste mit eigenem EPT im Bare-Metal-Modus betreiben. Einige Softwarepakete, darunter VMware Workstation 14 und Fusion 10, setzen einen Prozessor mit IA-32e-Modus voraus.
Im Jahr 2013 stellte Intel das Virtual Machine Control Structure (VMCS) Shadowing vor. Eine fortwährende Herausforderung der Virtualisierung war die Verschachtelung, also das Ablaufen einer VM innerhalb einer VM. Jede VM nutzt ihre eigenen Datenstrukturen. Läuft eine VM innerhalb einer anderen VM, so müssen diese Datenstrukturen ausgetauscht oder verändert werden.
Vor dem Jahr 2013 kam man diesem Problem bei, indem man ein Caching für jede dieser VMCS-Strukturen vorsah und diese durch Software im Griff behielt. Dieser Vorgang kostete jedoch deutlich zu viel Zeit und minderte die Leistung. Die Erweiterung des Prozessors um VMCS Shadowing erlaubt eine wesentlich effizientere Handhabung und steigert die Leistung der VM.
AMD Virtualization (AMD-V)
Anfangs erweiterte AMD einige seiner Prozessorfamilien um Befehlssatzerweiterungen für die Virtualisierungsunterstützung. Dies war im Jahr 2006 und betraf die Linien Athlon 64, Athlon 64 X2, Athlon 64 FX, Turion 64 X2 und einige Prozesoren der Reihen Opteron, Phenom und Phenom II. Die AMD-V-Befehle ermöglichten es Entwicklern, Software zu programmieren, mit denen VMs mit Hypervisor-Unterstützung angelegt und gesteuert werden konnten.
Später integrierte AMD die Unterstützung für SLAT (verschachteltes Paging) in einige K10- und Phenom-II-Prozessoren. Dies erfolgt durch eine Art Virtualisierungsindizierung (funktional identisch zu Intels EPT-Konzept), durch die Übersetzungen von Speicheradressen von physischen in virtuelle Adressen beschleunigt werden.
ARM-Virtualisierung
Prozessoren mit RISC-Architektur haben damit begonnen, Virtualisierungsunterstützung anzubieten. Die ARM-Architektur als Industriestandard in Version 8 unterstützt inzwischen Virtualisierungsfähigkeiten, mit denen ein ARM-Chip in der Lage ist, mehrere VMs zu hosten, von denen jede ein eigenes Betriebssystem aufweisen kann.
Mit ARMv8.1 ist die Virtualization Host Extensions (VHE) aufgekommen, die erweiterte Unterstützung für Typ-2-Hypervisoren anbietet. ARMv8.1-VHE leistet ebenso grundlegende Adressübersetzungen. Seit ARMv8.3-NV gibt es auch Unterstützung für verschachtelte Virtualisierung.
ARM-Prozessoren nutzen in der Regel reduzierte Befehlssätze, die aufgrund der geringeren Anzahl an Transistoren weniger Energie verbrauchen und weniger Kühlung erfordern. Aufgrund des einfacheren Prozessor-Designs liefern sie oftmals bessere Performance. ARM-Chips werden schon seit langer Zeit in Embedded-Systemen und Servern für einfache, hochvolumige Workloads eingesetzt, wie etwa in Webservern.
Heutzutage liegt ein erweitertes Augenmerk bei der Unterstützung der Virtualisierung durch Hardware bei ARM-basierenden Systemen, die noch mehr Workloads schultern können und damit besonders attraktiv für hochbelastete Rechenzentren sind.
Intel APICv und AMD AVIC
Prozessoren nutzen Interrupts, während derer das System durch äußere Einflüsse unterbrochen werden kann, zum Beispiel durch Tastenanschläge auf einer Tastatur oder bestimmte Systembedingungen. Je mehr Interrupts allerdings ein System verarbeitet, desto eher kann die Leistung eines virtuellen Systems absinken, da jedes Mal die Workloads unterbrochen werden und auf die CPU gewartet wird, die sich gerade um andere Dinge im System kümmert.
Das Konzept der Interrupt-Virtualisierung mildert diese potenziellen Leistungseffekte durch Sortierung und Warteschlangenunterbrechung. Die Sortierung ermöglicht es dem System, Unterbrechungen nach Priorität zu adressieren, während die Warteschlange das System auf die günstigste Zeit warten lässt, um eine Unterbrechung zu beheben. Zusammengenommen können die Technologien die Performance-Auswirkungen von Interrupts auf virtualisierte Umgebungen minimieren.
Sowohl Intel als auch AMD haben 2012 die Interrupt-Virtualisierung hinzugefügt. AMD verwendet den Advanced Virtual Interrupt Controller (AVIC), der für neuere Carrizo-Prozessoren verfügbar ist. Intel verwendet Advanced Programmable Interrupt Controller Virtualization (APICv), die erstmals 2013 und 2014 auf mehreren Xeon-E5-Prozessoren zum Einsatz kam.
Im Jahr 2019 verfügen fast alle wichtigen Prozessormodelle über Hardwareunterstützung für die Virtualisierung, mit Ausnahme einiger Atom-Modellevon Intel. So unterstützen beispielsweise die Varianten Diamondville, Pineview und Cedarview des Atom-Prozessors Intel-VT nicht.
Die Virtualisierungsunterstützung ist nicht immer standardmäßig aktiviert. Einige Mainboards erfordern, dass Administratoren die Virtualisierungsfunktionen in der Firmware des Systems (BIOS) aktivieren, bevor die Software Virtualisierungsfunktionen nutzen kann.