Die bessere Ausnutzung vorhandener Ressourcen schont das IT-Budget. Eine Lösung, die für alle Einsatzbereiche optimal geeignet ist, gibt es jedoch nicht. ZDNet erläutert, welche Vor- und Nachteile die verschiedenen Architekturen bieten.
Virtualisierung[1] bedeutet, dass auf einem Computer mehrere Betriebssysteme gleichzeitig laufen. Sowohl der Privatanwender als auch der IT-Leiter in einem Unternehmen kann daraus viele Vorteile schöpfen. Der IT-Manager erreicht beispielsweise eine bessere Auslastung vorhandener Ressourcen. Für Privatanwendern dürfte die höhere Flexibilität durch die Nutzung mehrerer Betriebssysteme im Vordergrund stehen.
Die für den Anwender einfachste Art der Virtualisierung ist die Vollvirtualisierung. Hierbei wird eine Umgebung geschaffen, die einen kompletten Computer simuliert. Dazu gehören Speicher, BIOS und Devices, etwa eine VGA-Karte, Netzwerkkarte und Festplattencontroller.
Das Gastbetriebssystem "weiß" nichts davon, dass es nicht auf einem echten Computer läuft, sondern in einer speziell geschaffenen Umgebung. Diese Vollvirtualisierung ermöglicht, dass Betriebssysteme[2] unmodifiziert vom Original-Medium installiert werden können.
Möglich wird dies erst durch moderne Prozessorarchitekturen, wie Intel sie beispielsweise ab dem 80386 anbietet. Hier gibt es mehrere Berechtigungsstufen von Prozessorbefehlen. Nicht alle Befehle können in jeder Stufe ausgeführt werden. Bei Intel werden diese Berechtigungsstufen "Ringe" genannt.
Es gibt die Ringe Null bis Drei. Im Ring Null sind alle Befehle ausführbar, während im Ring Drei viele Befehle verhindert werden. Moderne Betriebssysteme verwenden ausschließlich die Ringe Null und Drei, da nicht alle Prozessoren ein vierstufiges Berechtigungsmodell aufweisen.
Nur so kann sichergestellt werden, dass ein Betriebssystem auf die verschiedenen Prozessorarchitekturen portierbar ist. In der Sprache der Betriebssysteme wird der Ring Null Kernel-Mode und der Ring Drei User-Mode genannt.Im Kernel-Mode wird der Hauptspeicher verwaltet und der Zugriff auf die I/O-Ports der Devices geregelt. Programme laufen im User-Mode. Versuche, auf Speicher zuzugreifen, der nicht für die Anwendung freigegeben ist, oder I/O-Ports der Devices zu programmieren, werden mit einem Fehler quittiert, der Exception[3] (Ausnahme) genannt wird.
Genau hier setzt die Vollvirtualisierung an. Eine Exception führt nicht automatisch zum Abbruch eines Anwendungsprogramms, sondern zu einem Sprung an eine definierte Stelle im Kernel-Mode, so dass das Betriebssystem entscheiden kann, was nun zu tun ist.
Bei einer Vollvirtualisierung wird ein Betriebssystem in einer Umgebung gestartet, die sich im User-Mode befindet. Typischerweise beginnt ein Betriebssystem nach dem Starten mit der Aufteilung des Speichers mit entsprechend privilegierten Befehlen. Hier wird dann eine Exception generiert, die in der Virtualisierungssoftware landet.
Geringe Performance bei Virtualisierung
Klassische Vollvirtualisierung führt allerdings zu einem nicht unerheblichen Performanceverlust in den virtuellen Maschinen. Die Emulation von privilegierten Befehlen, Speicherverwaltung und I/O bedingt immer einen Taskswitch im Prozessor, der auch dazu führt, dass der Cache invalidiert wird und damit in Gastmaschine zunächst in den langsameren Hauptspeicher geschrieben werden muss. Danach muss der Cache im Hypervisor der Virtualisierungssoftware neu aus dem Hauptspeicher gefüllt werden.
Dies ist der Grund, warum Prozessorhersteller wie AMD und Intel heute damit beginnen, eine prozessorseitige Unterstützung von Virtualisierung[4] zu implementieren. Softwareseitig kann eine Paravirtualisierung zur Verbesserung der Performance beitragen. Bei einer Paravirtualisierung ist es nicht möglich, dass ein unmodifiziertes Betriebssystem in einer Gastmaschine betrieben wird.
Kernel und Treiber des Betriebssystems müssen so modifiziert werden, dass sie mit der Virtualisierungssoftware zusammenarbeiten. Hierbei wird zunächst ein Teil des Adressraums einer virtuellen Maschine reserviert. In diesen Adressraum wird Code der Virtualisierungssoftware eingefügt.
Damit wird klar, dass der Kernel des Gastbetriebssystems so modifiziert werden muss, dass er diesen Adressraum nicht benutzt. Vorteil ist, dass virtueller I/O und Speicherverwaltung dann über Funktionsaufrufe geregelt werden können, ohne den virtuellen Adressraum zu verlassen. Eine besondere Hardwareunterstützung durch den Prozessor ist dann nicht mehr erforderlich.
Darüberhinaus müssen sämtliche Treiber, die auf Hardware zugreifen, durch angepasste Varianten ausgetauscht werden, die Funktionsaufrufe der Virtualisierungssoftware verwenden. Privilegierte Befehle in Kernel und Treibern werden ebenfalls komplett durch Funktionsaufrufe der Virtualisierungssoftware ersetzt.
Damit wird die Virtualisierungssoftware quasi zum Metabetriebssystem, welche alle Low-Level-I/O-Funktionen regelt. Die Gastbetriebssysteme selbst haben nur noch höhere Aufgaben, zum Beispiel die Unterstützung eines bestimmten Filesystems oder die Benutzer- und Rechteverwaltung. Da I/O- und Speicherverwaltung nun von einem Metabetriebssystem im gleichen Adressraum wie das Gastbetriebssystem erledigt und keine privilegierten Befehle mehr durch das Gastbetriebssystem ausgeführt werden, entfallen nahezu alle Performanceverluste, wie man sie von Vollvirtualisierung kennt.
Grundsätzlich kann jedes Betriebssystem so modifiziert werden, dass es mit einer Paravirtualisierungssoftware zusammenarbeitet. Es wäre daher auch möglich, unterschiedliche Betriebssysteme wie Mac OS, Linux und Windows gleichzeitig auf einem Rechner in einer paravirtualisierten Umgebung zu betreiben.
Die Tücke liegt hier im Detail. Während Linux im Quelltext vorliegt und vergleichsweise unkompliziert modifiziert werden kann, muss man bei Betriebssystemen wie Windows oder Mac OS auf Unterstützung des Herstellers warten.
Microsoft hat für Windows Server Longhorn eine saubere Paravirtualisierungsunterstützung angekündigt. Longhorn soll auf der untersten Ebene aus einem Hypervisor bestehen. Erst darauf soll ein paravirtualisierungsfähiger Kernel aufsetzen.
Auf ein paravirtualisiertes Mac OS von Apple darf man sicherlich noch etwas länger warten, da der Hersteller in erster Linie daran interessiert ist, die eigene Hardware zu verkaufen. Da diese sich von einem Standard-PC nur noch durch den höheren Kaufpreis unterscheidet, muss das benutzerfreundliche Mac OS als Vertriebsargument herhalten.Ein paravirtualisiertes Betriebssystem läuft natürlich nur mit einer bestimmten Paravirtualisierungssoftware zusammen. Ein für Xen modifiziertes Betriebssystem läuft genauso wenig mit dem Longhorn-Hypervisor wie mit der angekündigten Paravirtualisierungslösung von Vmware.
Stand heute kann gesagt werden, dass lediglich für Linux paravirtualisierte Versionen, die unter dem Xen-Hypervisor lauffähig sind, "Off-the-shelf" zur Verfügung stehen.
Suse bietet in seiner Linux-Distribution ab Version 10.0 standardmäßig einen paravirtualisierten Xen-Kernel an. Gleiches gilt für Fedora Core ab Version 6. Letzteres lässt vermuten, dass auch Red Hat Enterprise 5 mit Paravirtualisierungsunterstützung kommt.
Ein dritter Weg
Als dritte Virtualisierungsform setzt sich neuerlich die Containervirtualisierung immer mehr durch. Sie wird auch als unechte oder betriebssystembasierende Virtualisierung bezeichnet. Anders als bei Voll- und Paravirtualisierung können auf einem Rechner hier nur gleiche Betriebssysteme auf einem Rechner betrieben werden.
Die Containervirtualisierung benötigt wie die Paravirtualisierung keinerlei Unterstützung durch die Hardware. Auch werden hier nicht wirklich mehrere Betriebssysteme gleichzeitig betrieben. Bei der Containervirtualisierung läuft nur ein unmodifiziertes Betriebssystem.
Die Virtualisierungssoftware besteht aus einer Reihe von Kernel-Mode-Treibern, welche die Standard-APIs zum Betriebssystem abfangen und dann virtualisieren sowie privatisieren, so dass der Benutzer eines Containers den Eindruck hat, er besäße einen eigenen Computer mit eigener Platte, eigener Benutzerverwaltung und so weiter.
Tatsächlich werden aber nur Prozesse auf einem einzigen Kernel gestartet. Während natürlich die Einschränkung besteht, dass alle Container unter demselben Betriebssystem laufen müssen, geht die Containervirtualisierung sehr viel sparsamer mit Ressourcen um als Para- oder Vollvirtualisierung.
Zum anderen ist sie deutlich flexibler, was die Ressourcenzuteilung betrifft. Ressourcen wie CPU-Leistung, Hauptspeicher und Plattenplatz können im laufenden Betrieb eines Containers angepasst werden, ohne dass dieser neu gestartet werden muss. Derartige Flexibilität gibt es unter Voll- und Paravirtualisierung heute nicht, obwohl dies mit Paravirtualisierung technisch durchaus zu realisieren wäre. Für den Anwender ist die Vollvirtualisierung derzeit die einfachste Möglichkeit, eine Virtualisierung zu realisieren. Gleichzeitig ist sie jedoch, technisch gesehen, die anspruchsvollste, da ein kompletter Computer inklusive Hardware emuliert werden muss.
Diese Emulation von BIOS, Hardware, Berechtigungslevel von Prozessorbefehlen und mehr ist nicht nur anspruchsvoll, sondern kostet auch ein deutliches Maß an Performance. Auch wird viele Hardware heute von den Virtualisierungslösungen nicht oder nicht vollständig emuliert. USB 2.0 und 3D-Grafik sind dabei die bekanntesten Beispiele.
Während die Prozessorhersteller von der Hardwareseite an die Performanceverluste herangehen, machen sich Softwarehersteller Gedanken darüber, wie Betriebssysteme und Virtualisierungslösungen in Zukunft gestaltet werden können, so dass Virtualisierung in Zukunft der Regelfall sein kann.
Bisheriges Ergebnis ist die Paravirtualisierung. Diese Form der Virtualisierung benötigt deutlich weniger Unterstützung durch den Prozessor, obwohl auch sie davon profitieren kann. Allerdings muss das Betriebssystem zu erheblichen Teilen an die Lösung angepasst werden.
Da Virtualisierung ohne große Performanceverluste vom Markt dringend gefordert wird, werden Allianzen geschlossen, die vor kurzem noch unmöglich schienen. So kooperiert Microsoft mit Novell, um eine gegenseitige Virtualisierung von Suse Linux und Windows voranzutreiben.
In der Zukunft wird es vermutlich eine Mischform von Para- und Vollvirtualisierung geben. Paravirtualisierung in der heutigen Form wird durch entsprechende Hardwareunterstützung nicht mehr notwendig sein.
Eine weitere Lösung ist die Containervirtualisierung, bei der heute nur mehrere Container ein einziges Betriebssystem virtualisieren. Hier ist der Ressourcenbedarf pro Container sehr gering.
Schaut man jedoch drei bis vier Jahre in die Zukunft, so wird auch diese Form der Virtualisierung überflüssig. Werden tatsächlich die Anstrengungen der Betriebssystemhersteller in Richtung Virtualisierung vorangetrieben, so wird ein zukünftiger Kernel mit hardwareseitiger Speichervirtualisierung in der Lage sein, mehrere Instanzen von sich selbst zu starten, ohne dass er physikalisch mehrfach vorhanden sein muss.
URLs in diesem Artikel:
[1] = http:/
[2] = http:/
[3] = http:/
[4] = http:/