Neueste Artikel

Exkurs: FAQ zum Thema Virtualisierung

von | Mai 29, 2018 | Exkurs | 0 Kommentare

Virtualisierung ist neben Cloud Computing einer der bedeutendsten, aktuellen Trends in der IT-Branche. Auch die großen CPU-Hersteller Intel und AMD haben das erkannt und weisen regelmäßig auf die fortgeschrittenen Virtualisierungsfähigkeiten ihrer Produkte hin. Doch was bedeutet Virtualisierung überhaupt und welchen Zweck hat sie? Die wichtigsten Fragen und Antworten zum Thema habe ich in diesem Beitrag kompakt zusammengefasst.

Was versteht man unter Virtualisierung?

In der Informatik bezeichnet man physisch nicht vorhandene Geräte als virtuelle Geräte (z.B. virtueller Speicher). Als Virtualisierung bezeichnet man die Erzeugung eines virtuellen Geräts, indem man dessen Eigenschaften durch ein anderes Gerät des gleichen Typs (z.B. CPU, Netzwerkkarte) nachbildet. Das Gerät, auf dem die Virtualisierung stattfindet, wird als Host oder Wirt, und das nachgebildete Gerät als Gast bezeichnet. Neben einzelnen Geräten können auch Anwendungen bzw. Prozesse und komplette Systeme (virtuelle Geräte mit Betriebssystem und Anwendungen) virtualisiert werden.

Warum benötigte ich Virtualisierung?

Unternehmen, die Virtualisierung nutzen, können die Kosten für die IT-Infrastruktur drastisch verringern, da nicht jedes Gerät physisch vorhanden sein muss und Ressourcen (z.B. CPU, Arbeitsspeicher) effizienter genutzt werden können.
Für Privatnutzer vereinfacht Virtualisierung die gleichzeitige Ausführung mehrerer Betriebssysteme auf einem PC.

Wie wird Virtualisierung praktisch umgesetzt?

Die Hardware-Virtualisierung erfolgt durch eine eigene Abstraktionsschicht, die als Hypervisor oder VMM (Virtual-Machine-Manager) bezeichnet wird und sich zwischen Betriebssystem und Hardware befindet. Bei einem nicht-virtualisierten System befindet sich das Betriebssystem direkt über der Hardware. Die Abstraktionsschicht gaukelt dem Betriebssystem eine Hardwareumgebung vor, die real nicht existiert.

Ein Virtualisierungssystem besteht aus zwei Komponenten: 

  • je einer virtuellen Maschine pro Gast-Betriebssystem

Eine VM dient als Container für virtuelle Geräte (Prozessor, Arbeitsspeicher, Festplatten usw.), Betriebssystem und Anwendungen eines Gastsystems. Auf dem Hostsystem können mehrere VMs gleichzeitig und voneinander unabhängig ausgeführt werden.

  • einem Virtual-Machine-Manager (VMM)

Der VMM steuert und überwacht die VMs, emuliert Befehle und teilt die Geräte bzw. Ressourcen des Gastsystems (z.B. CPU-Zyklen, Arbeitsspeicher) zwischen den einzelnen virtuellen Maschinen auf.

Durch die Kapselung in VMs werden Sicherheit und Stabilität des Hostsystems erhöht, weil sich die Auswirkungen z.B. von Programmfehlern nur auf das betroffene Gastsystem beschränken. Auch die Übertragung von Systemen auf andere PCs wird vereinfacht, da dazu nur die Datei mit der VM dupliziert werden muss.

Welche Arten von Virtualisierung gibt es?

Man unterscheidet drei Arten von Virtualisierung:

  • Systemvirtualisierung: Bei dieser Art der Virtualisierung bildet der Hypervisor eine eigene Abstraktionsebene, auf der das Verhalten der Host-Hardware nachgebildet wird. Da sich der Hypervisor direkt über der „blanken“ Hardware befindet, wird dieser auch als „Bare-Metal“-Hypervisor bezeichnet. Nachteil: Es können nicht mehrere Betriebssysteme parallel betrieben werden.
  • Prozessvirtualisierung: Der Hypervisor bzw. VMM verhält sich wie eine einfache Anwendung des Host-Betriebssystems.
  • Paravirtualisierung: Normalerweise verhält sich ein Gast-Betriebssystem in einer VM genauso wie ein Host-Betriebssystem. Bei der Paravirtualisierung wird der Quellcode des Gast-Betriebssystem jedoch so verändert, dass es über eine eigene Programmierschnittstelle (API) Befehle direkt an den Hypervisor überträgt.

Welche Anwendungen für Virtualisierung gibt es?

  • Gerätevirtualisierung: Virtueller Speicher, Virtual Disk, Virtual LAN (VLAN), Virtual Private Network (VPN), RAID
  • Systemvirtualisierung: VMWare ESXi, Xen*, Microsoft Hyper-V
  • Prozessvirtualisierung: VMWare Workstation, Microsoft Virtual PC, Oracle VirtualBox*, Parallels Desktop for Mac, Solaris Kernel Zones, FreeBSD Jails*
  • Paravirtualisierung: Xen*, Hyper-V, Kernel-based Virtual Machine (KVM)*

* = nicht-kommerzielle, frei erhältliche Open-Source-Anwendung

Was ist der Unterschied zwischen Virtualisierung und Emulation?

Bei der Emulation werden Systeme nachgebildet, deren Architektur (Befehlssatz, Register, Speicheradressierung etc.) sich grundlegend von der des Hostsystem unterscheidet. Dabei wird jeder Befehl emuliert. Die Virtualisierung beschränkt sich hingegen auf Systeme mit identischer oder ähnlicher Architektur (z.B. x86). Es werden nur bestimmte Befehle emuliert.
Emulatoren werden bei Programmen eingesetzt, die nur für ein bestimmtes Computersystem erhältlich oder auf modernen PCs nicht mehr funktionstüchtig sind.

Was bedeutet „Trap and emulate“?

Als „Trap and emulate“ („Fangen und Nachbilden“) bezeichnet man ein klassisches Funktionsprinzip von Hypervisoren. Da ein Gast-Betriebssystem nicht wie üblich im privilegierten Kernel- oder Supervisor-Modus ausgeführt werden kann (da diesen Platz der Hypervisor einnimmt), löst jeder Hardwarezugriff des Gast-Betriebssystems einen Interrupt durch die CPU aus. Dabei wird die Kontrolle an den Hypervisor übergeben, der die Interruptbehandlung durchführt und den „gefangenen“ Befehl emuliert. Das Gast-Betriebssystem bemerkt nicht, dass es einen Interrupt ausgelöst hat.
Wenn die „Trap and Emulate“-Methode nicht eingesetzt werden kann, wird die sogenannte Binärcode-Übersetzung (binary translation) angewandt. Dabei werden alle sensiblen Befehle im Code des Gast-Betriebssystems in privilegierte Instruktionen übersetzt, die an das Host-Betriebssystem übergeben werden.

Warum benötigte ich eine CPU mit Virtualisierungstechnologie?

Die „Trap-and-Emulate“-Methode konnte bei CPUs mit x86-Architektur lange nicht eingesetzt werden, die diese nicht bei jedem Befehl mit Hardwarezugriff einen Interrupt auslösten. Stattdessen musste eine zeitaufwändige Binärcode-Übersetzung (s.o.) durchgeführt werden. Virtualisierungstechnologien wie Intel VT oder AMD-V ermöglichen schnelle, hardwaregestützte Virtualisierung durch einige Erweiterungen der x86-Architektur. Intel bezeichnet diese als „Virtual Machine eXtensions“ (VMX). Dazu gehören:

Neue Befehle zur Steuerung der virtuellen Maschinen, Laden und Speichern von Maschinenzuständen (VMCS)
Zwei neue Betriebszustände „VMX root operation“ und „VMX non-root operation“: Der VMX-Root-Modus ist dem VMM vorenthalten und vergleichbar mit dem normalen Kernel-Modus, erlaubt aber zusätzlich die Ausführung der neuen VMX-Befehle. Die VMs hingegen werden im VMX-Non-Root-Modus betrieben. In diesem Modus führt die Ausführung bestimmter Befehle dazu, dass der Prozessor der befreffenden VM die Kontrolle entzieht und an den VMM übergibt. Der VMM kann dann die entsprechenden Aktionen durchführen und anschließend die Kontrolle wieder der VM zurückgeben („Trap-and-emulate“-Prinzip).
Kontrollstrukturen für VMs (VMCS = Virtual Machine Control Structure): Eine VM-Kontrollstruktur ist ein im Arbeitsspeicher reservierter Bereich, in dem beim Verlassen der VM der aktuelle Prozessorzustand (alle Registerinhalte) gespeichert wird. VMCS ermöglichen einen schnellen und einfachen Kontextwechsel.

Was bedeutet „SLAT“?

SLAT ist die Abkürzung für „Second Level Address Translation“ und bezeichnet ein hardwareseitiges Verfahren zur effektiven und schnellen Adressübersetzung in virtualisierten Systemen.
In einem nicht-virtualisierten System werden die vom Programm verwendeten (virtuellen) Speicheradressen mit Hilfe einer Seitentabelle in physische Speicheradressen übersetzt (siehe virtueller Speicher). Eine Seitentabelle enthält zu jeder Seite die Adresse des zugehörigen Seitenrahmens im Speicher. In einem virtualisierten System ist dieser Prozess zweistufig, da für jedes Gast-System ein eigener Adressbereich bzw. -raum im virtuellen Speicher des Host-Systems reserviert werden muss. Die virtuellen Adressen der Gast-Systeme bzw. VMs müssen also zuerst in die virtuellen Adressen des Host-Systems umgesetzt werden, bevor diese in physische Adressen übersetzt werden können. Beim Einsatz softwaregestützter Virtualisierung erzeugt der VMM für jedes Gast-System eine „virtuelle“ Seitentabelle, die mit der entsprechenden physischen Seitentabelle des Host-Systems verbunden ist. Die Schattenseitentabelle muss ständig aktualisiert werden. Gerade bei den heute üblichen mehrstufigen Seitentabellen ist dieses Verfahren sehr zeitaufwändig, da doppelt so viele Seitentabellen durchsucht werden müssen wie bei einem nicht-virtualisierten System.
Eine hardwareseitige Umsetzung der Adressübersetzung hat den Vorteil, dass bereits übersetzte Speicheradressen in einem speziellen Cache (Translation Lookaside Buffer) abgelegt werden können und bei einem erneuten Abruf sofort verfügbar sind. SLAT ist deshalb wesentlich schneller als die softwareseitige Lösung. Intel bezeichnet seine Umsetzung dieses Verfahrens als „Extended Page Tables“ (EPT), AMD nennt sie „Rapid Virtualization Indexing“ (RVI).

Welche CPUs beherrschen hardwareseitige Virtualisierung?

Intel

Intel vermarktet die Virtualisierungsfunktionen seiner CPUs unter der Bezeichnung Intel VT-x. Die ersten CPUs von Intel, die VT-x unterstützten, waren die Pentium-IV-Modelle 662 und 672. Auch bei den nachfolgenden CPU-Generationen war VT-x nur bei ausgewählten Modellen verfügbar. Mittlerweile ist außer den CPUs der X-Serie (z.B. Core i9-7920X) jeder Prozessor mit VT-x ausgestattet.

AMD

AMDs vergleichbare Virtualisierungstechnologie AMD-V(irtualization) kam erstmals in CPUs für den AM2-Sockel (z.B. Athlon 64) zum Einsatz. Auch AMD stattete zu Beginn nur bestimmte Modelle mit AMD-V aus. Die aktuellen Ryzen-CPUs unterstützen AMD-V.

Welche Anwendungen benötigen VT-x bzw. AMD-V?

  • Folgende Anwendungen setzen VT-x bzw. AMD-V voraus: VMWare Workstation/ESXi, Xen, Hyper-V, Solaris Kernel Zones, KVM
  • Bei diesen Anwendungen ist VT-x/AMD-V nicht zwingend erforderlich: Virtual PC, VirtualBox