X86-Virtualisierung: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(13 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
−
= Was ist x86-Virtualisierung? =
+
=Was ist x86-Virtualisierung?=
−
* Techniken zur parallelen Ausführung mehrerer Betriebssysteme auf x86-Prozessoren.
+
*Techniken, um mehrere Betriebssysteme gleichzeitig auf einem x86-Prozessor auszuführen.
−
* Ein Hypervisor ermöglicht die effiziente und isolierte Nutzung physischer Ressourcen.
+
*Ein Hypervisor verteilt die physischen Ressourcen effizient und isoliert an die VMs.
−
* Ziel: Gastbetriebssysteme bemerken keinen Unterschied zwischen virtueller und physischer Hardware.
+
*Ziel: Das Gastbetriebssystem merkt keinen Unterschied zwischen virtueller und physischer Hardware.
  
−
= Grundlagen des VT-Modells =
+
=Das Problem: Schutzringe=
−
[[Datei:Vt-ring.drawio.png|zentriert]]
+
*x86-Prozessoren kennen vier Schutzringe (Ring 0–3).
 +
**Das Betriebssystem läuft in Ring 0 und darf alles.
 +
**Anwendungen laufen in Ring 3 und dürfen wenig.
 +
**Ring 1 und 2 werden praktisch nicht genutzt.
 +
*Ein Gast-Kernel erwartet ebenfalls Ring 0. Den belegt aber schon der Host bzw. der Hypervisor.
  
−
== VMX Root-Modus (Hypervisor) ==
+
==Früher: Software-Virtualisierung (vor ca. 2006)==
−
* Der Hypervisor läuft im VMX Root-Modus (auch „Ring -1“ genannt).
+
*Keine Unterstützung durch den Prozessor.
−
* Er hat die höchste Kontrollstufe und überwacht alle virtuellen Maschinen.
+
*Der Gast-Kernel läuft deprivilegiert, z. B. in Ring 1.
−
* Er besitzt exklusiven Zugriff auf CPU, Speicher und Geräte und teilt diese den virtuellen Maschinen zu.
+
*Der Hypervisor muss kritische Befehle abfangen und per Software nachbilden (Binary Translation, z. B. frühes VMware) oder der Gast-Kernel wird angepasst (Paravirtualisierung, z. B. frühes Xen).
−
* Privilegierte Operationen der Gastbetriebssysteme werden hierher weitergeleitet und ggf. emuliert.
+
*Nachteil: hoher Overhead durch häufiges Abfangen.
 +
*Nicht verwechseln mit Emulation: Gast und Host haben hier dieselbe Plattform, die CPU wird nicht nachgebaut.
  
−
== VMX Non-Root-Modus (Virtuelle Maschinen) ==
+
=Heute: Hardware-Virtualisierung mit VT-x / AMD-V=
−
* Gastbetriebssysteme laufen isoliert in virtuellen Maschinen im VMX Non-Root-Modus.
+
*Der Prozessor bekommt zwei Betriebsmodi:
−
* Sie verhalten sich, als würden sie direkt auf der Hardware laufen (nahezu native Geschwindigkeit).
+
**'''VMX Root Mode''' („Ring -1“): Hier läuft der Hypervisor mit voller Kontrolle über die Hardware.
−
* Kritische Operationen (z.B. Zugriff auf Hardware) werden vom Hypervisor abgefangen und geprüft („Trap-and-Emulate“).
+
**'''VMX Non-Root Mode''': Hier laufen die VMs. Das ist der „Gastmodus“.
 +
*Innerhalb jedes Modus gibt es wieder die Ringe 0–3:
 +
**Das Gastbetriebssystem läuft in seinem eigenen Ring 0, die Anwendungen in Ring 3.
 +
**Der Gast muss dafür nicht angepasst werden.
 +
*Kritische Operationen im Non-Root Mode lösen automatisch einen Wechsel zum Hypervisor aus.
 +
{{#drawio:vt-ring}}
  
−
= Funktionsweise verständlich erklärt =
+
==Ablauf: VM-Entry und VM-Exit==
−
Stelle dir einen Rechner vor, auf dem mehrere Betriebssysteme gleichzeitig laufen:
+
*'''VM-Entry:''' Der Hypervisor wechselt in die VM (Root → Non-Root). Ab jetzt rechnet der Gast direkt auf der CPU.
 +
*'''VM-Exit:''' Bei privilegierten Befehlen oder Gerätezugriffen springt die CPU automatisch zurück zum Hypervisor (Non-Root → Root).
 +
*Der Hypervisor erledigt die Aufgabe und startet die VM mit dem nächsten VM-Entry wieder.
 +
*'''VMCS''' (Virtual Machine Control Structure): Pro VM speichert die CPU deren Zustand (Register, Speicherverwaltung) und den Zustand des Hypervisors. Dadurch geht der Wechsel schnell.
 +
*'''Speicher und I/O:''' Der Hypervisor trennt den Speicher der VMs voneinander. Mit '''EPT''' (Intel) bzw. '''NPT''' (AMD) übersetzt die CPU auch die Speicheradressen der VM selbst. Gerätezugriffe werden emuliert (z. B. durch QEMU) oder an echte Geräte weitergereicht.
 +
{{#drawio:Ausführungsebenen}}
  
−
== Hypervisor ==
+
;Am Beispiel KVM
−
* Ist der zentrale „Manager“, kontrolliert alle Ressourcen.
+
*KVM ist der Hypervisor im VMX Root Mode, die VM läuft im Non-Root Mode.
−
* Verteilt Hardware-Ressourcen an virtuelle Maschinen.
+
*QEMU emuliert die Geräte der VM. Gerätezugriffe landen per VM-Exit bei KVM und werden an QEMU weitergegeben.
  
−
== Virtuelle Maschinen ==
+
=Hardwareerweiterungen=
−
* Laufen isoliert, wie eigenständige physische Rechner.
+
*'''Intel VT-x''': CPU-Flag <code>vmx</code>
−
* Arbeiten schnell und effizient, fühlen sich „echt“ an.
+
*'''AMD-V''' (auch SVM): CPU-Flag <code>svm</code>
−
* Können keine kritischen Hardware-Einstellungen direkt verändern, dies kontrolliert der Hypervisor.
+
*Beide arbeiten nach demselben Prinzip.
 +
grep -m1 -owE 'vmx|svm' /proc/cpuinfo
 +
*Keine Ausgabe = im BIOS/UEFI abgeschaltet oder nicht vorhanden.
  
−
= Softwarebasierte Virtualisierung (klassische Methode) =
+
=Praxis-Beispiele=
−
* Ohne spezielle Prozessorunterstützung.
+
*[[KVM]] (Kernel-based Virtual Machine, Linux)
−
* Hypervisor kontrolliert Hardwarezugriff alleine.
+
*VMware vSphere (ESXi)
−
* Gastbetriebssysteme besitzen eingeschränkte Rechte und werden „deprivilegiert“ ausgeführt.
+
*Microsoft Hyper-V
−
* Hoher Aufwand durch häufiges Abfangen und Emulieren privilegierter Operationen.
+
*Citrix XenServer
  
−
= Modernes Privilegienmodell (VT-x/AMD-V) =
+
=Weiterführende Informationen=
−
== Historisches Modell (Protected Mode) ==
+
*[https://tuxthink.blogspot.com/2011/12/kvm-introduction.html Einführung in KVM (tuxthink)]
−
* Vier Schutzringe (Ringe 0 bis 3).
+
*[https://wiki.archlinux.org/title/KVM Arch Linux KVM Wiki]
−
* Betriebssystem läuft auf Ring 0 (höchste Privilegien).
+
*[[Einordnung der Virtualisierungssysteme]]
−
* Anwendungen laufen auf Ring 3 (geringste Privilegien).
+
*Animation: https://labs.xinux.net/hypervisor-schichten.html#swhw-3
−
* Ring 1 und 2 kaum genutzt.
 
  
−
== Aktuelles VT-x/AMD-V-Modell ==
+
=Präsentation=
−
* Spezielle Prozessorerweiterungen bieten zwei neue Betriebsmodi:
+
*https://hedgedoc.xinux.net/p/sC9T6-hrS#/
−
** '''VMX Root-Modus''' („Ring -1“): Der Hypervisor besitzt absolute Kontrolle über Hardware.
+
[[Kategorie:Virtualisierung]]
−
** '''VMX Non-Root-Modus''' („virtueller Ring 0“): Gastbetriebssystem läuft scheinbar auf höchster Ebene, tatsächlich jedoch eingeschränkt.
 
−
* Anwendungen innerhalb der VM weiterhin auf Ring 3.
 
−
* Weniger Emulation nötig, deutlich höhere Leistung als rein softwarebasierte Methoden.
 
−
 
 
−
= Hardwareerweiterungen =
 
−
== Intel VT-x ==
 
−
* Codename „Vanderpool“.
 
−
* Hardware-unterstütztes „Trap-and-Emulate“-Verfahren.
 
−
* Beschleunigung der Virtualisierung durch direkte Prozessorunterstützung.
 
−
 
 
−
== AMD-V ==
 
−
* Codename „Pacifica“.
 
−
* Hardwarebasierte Unterstützung für effiziente Virtualisierung.
 
−
* Vergleichbare Funktionsweise zu VT-x.
 
−
 
 
−
= Praxis-Beispiele =
 
−
* [[KVM]] (Kernel-based Virtual Machine, Linux)
 
−
* VMware vSphere (ESXi)
 
−
* Microsoft Hyper-V
 
−
* Citrix XenServer
 
−
 
 
−
= Weiterführende Informationen =
 
−
* [https://tuxthink.blogspot.com/2011/12/kvm-introduction.html Einführung in KVM (tuxthink)]
 
−
* [https://wiki.archlinux.org/title/KVM Arch Linux KVM Wiki]
 

Aktuelle Version vom 11. Oktober 2026, 12:00 Uhr

Was ist x86-Virtualisierung?

  • Techniken, um mehrere Betriebssysteme gleichzeitig auf einem x86-Prozessor auszuführen.
  • Ein Hypervisor verteilt die physischen Ressourcen effizient und isoliert an die VMs.
  • Ziel: Das Gastbetriebssystem merkt keinen Unterschied zwischen virtueller und physischer Hardware.

Das Problem: Schutzringe

  • x86-Prozessoren kennen vier Schutzringe (Ring 0–3).
    • Das Betriebssystem läuft in Ring 0 und darf alles.
    • Anwendungen laufen in Ring 3 und dürfen wenig.
    • Ring 1 und 2 werden praktisch nicht genutzt.
  • Ein Gast-Kernel erwartet ebenfalls Ring 0. Den belegt aber schon der Host bzw. der Hypervisor.

Früher: Software-Virtualisierung (vor ca. 2006)

  • Keine Unterstützung durch den Prozessor.
  • Der Gast-Kernel läuft deprivilegiert, z. B. in Ring 1.
  • Der Hypervisor muss kritische Befehle abfangen und per Software nachbilden (Binary Translation, z. B. frühes VMware) oder der Gast-Kernel wird angepasst (Paravirtualisierung, z. B. frühes Xen).
  • Nachteil: hoher Overhead durch häufiges Abfangen.
  • Nicht verwechseln mit Emulation: Gast und Host haben hier dieselbe Plattform, die CPU wird nicht nachgebaut.

Heute: Hardware-Virtualisierung mit VT-x / AMD-V

  • Der Prozessor bekommt zwei Betriebsmodi:
    • VMX Root Mode („Ring -1“): Hier läuft der Hypervisor mit voller Kontrolle über die Hardware.
    • VMX Non-Root Mode: Hier laufen die VMs. Das ist der „Gastmodus“.
  • Innerhalb jedes Modus gibt es wieder die Ringe 0–3:
    • Das Gastbetriebssystem läuft in seinem eigenen Ring 0, die Anwendungen in Ring 3.
    • Der Gast muss dafür nicht angepasst werden.
  • Kritische Operationen im Non-Root Mode lösen automatisch einen Wechsel zum Hypervisor aus.

Ablauf: VM-Entry und VM-Exit

  • VM-Entry: Der Hypervisor wechselt in die VM (Root → Non-Root). Ab jetzt rechnet der Gast direkt auf der CPU.
  • VM-Exit: Bei privilegierten Befehlen oder Gerätezugriffen springt die CPU automatisch zurück zum Hypervisor (Non-Root → Root).
  • Der Hypervisor erledigt die Aufgabe und startet die VM mit dem nächsten VM-Entry wieder.
  • VMCS (Virtual Machine Control Structure): Pro VM speichert die CPU deren Zustand (Register, Speicherverwaltung) und den Zustand des Hypervisors. Dadurch geht der Wechsel schnell.
  • Speicher und I/O: Der Hypervisor trennt den Speicher der VMs voneinander. Mit EPT (Intel) bzw. NPT (AMD) übersetzt die CPU auch die Speicheradressen der VM selbst. Gerätezugriffe werden emuliert (z. B. durch QEMU) oder an echte Geräte weitergereicht.
Am Beispiel KVM
  • KVM ist der Hypervisor im VMX Root Mode, die VM läuft im Non-Root Mode.
  • QEMU emuliert die Geräte der VM. Gerätezugriffe landen per VM-Exit bei KVM und werden an QEMU weitergegeben.

Hardwareerweiterungen

  • Intel VT-x: CPU-Flag vmx
  • AMD-V (auch SVM): CPU-Flag svm
  • Beide arbeiten nach demselben Prinzip.
grep -m1 -owE 'vmx|svm' /proc/cpuinfo
  • Keine Ausgabe = im BIOS/UEFI abgeschaltet oder nicht vorhanden.

Praxis-Beispiele

  • KVM (Kernel-based Virtual Machine, Linux)
  • VMware vSphere (ESXi)
  • Microsoft Hyper-V
  • Citrix XenServer

Weiterführende Informationen

Präsentation