Techtalk: Virtualisierung
ml, den 16. Mai 2008In unserer Serie Techtalk beschäftigen wir uns in loser Folge mit Hintergründen und technischen Details aus der Computerwelt. Diesmal wollen wir uns mit dem Thema Virtualisierung auseinandersetzen und dabei u. a. Begriffe wie Hypervisor, Paravirtualisierung und VT-x klären.
Doch was steckt allgemein hinter dem Begriff Virtualisierung? In der Informatik ist der Begriff nicht klar umrissen. Grob kann man sagen, dass mit Virtualisierung Methoden bezeichnet werden, mit denen sich die Ressourcen (CPU, Speicher und Geräte) aufteilen lassen. Virtueller Speicher in modernen Betriebssystemen ist z. B. eine solche Methode. Das soll aber nicht Bestandteil des folgenden Artikels sein, sondern wir wollen uns mit der Virtualisierung von Betriebssystemen beschäftigen.
Wozu Virtualisierung?
Die Rechenleistung von Computersystemen ist in den letzten Jahren insbesondere durch den Einsatz von Mehrkernprozessoren massiv gestiegen. Doch die Spitzenleistung wird nur selten benötigt und so arbeiten viele Systeme nur wenig ausgelastet vor sich hin. Dabei verbraten die Prozessoren sinnlos Strom und erzeugen Wärme. Insbesondere in Rechenzentren ist das ein echtes Problem, denn die Wärme muss mit immer aufwändigeren und teuren Kühlsystemen entsorgt werden.
Deshalb sind die Betreiber von Rechenzentren dazu übergegangen, mehrere Server in einzelne virtuelle Maschinen (VMs) zu übertragen und diese dann auf nur noch einem Server laufen zu lassen. Das Ganze spart Kosten bei der Anschaffung neuer Hardware. Gleichzeitig kann der Aufwand für die Kühlung der Systeme reduziert werden, da jetzt statt mehrerer nur teilweise ausgelasteter Server nur noch ein voll ausgelasteter Server läuft.
Auch für den Privatanwender bietet Virtualisierung Vorteile. Mal eben Windows oder Linux parallel zum Mac OS X in einer VM starten oder sich innerhalb einer virtuellen Maschine eine Art Sandkasten für Testzwecke einrichten: Die möglichen Anwendungsgebiete sind vielfältig.
Softwarevirtualisierung und Emulation
Bei der Virtualisierung von Betriebssystemen unterscheidet man in Software- und Hardwarevirtualisierung. Ein möglicher Ansatz von Softwarevirtualisierung ist die Emulation. Dabei wird ein komplettes Hardwaresystem in Software nachgebildet und ausgeführt. Zu PowerPC-Zeiten war VirtualPC ein solcher Emulator, der einen X86-PC auf dem Mac nachbildete. Der Vorteil dieser Variante ist, dass an den zu virtualisierenden Betriebssystemen (Gastsystem) keine bzw. nur sehr kleine Änderungen vorzunehmen sind und sich auch andere Computer-Architekturen auf einem Hostsystem emulieren lassen. Der Nachteil von Emulation bzw. reiner Softwarevirtualisierung ist, dass die Geschwindigkeit der virtualisierten Umgebung gegenüber einem nativen System stark sinkt. Der Grund ist, dass jeder (Maschinen-)Befehl des Gastsystems zunächst durch den Emulator geht und dort von der Emulationsumgebung nachgebildet wird.
Herr der Ringe
Bevor wir mit dem Thema fortfahren, müssen wir einen kleinen Ausflug in den Bereich der X86-Architektur unternehmen. X86-Prozessoren verfügen über vier unterschiedliche Privilegierungsstufen. Die nennt Intel Ringe. Mit Ring 0 bezeichnet man die höchste Privilegierungsstufe. In der läuft auch der Betriebssystemkern. Anwendungsprogramme führt das System in Ring 3 aus. Ring 1 und 2 haben keine praktische Bedeutung. Leider gibt es im Befehlssatz der X86-Architektur Befehle, die in Ring 0 und 3 unterschiedliche Semantiken haben. Das führt zu Problemen, wenn sich z. B. ein Gastsystem gerade im Ring 0 befindet und der Befehl einfach an den physischen Prozessor weitergereicht wird. Die Virtualisierungssoftware müsste darüber benachrichtigt werden, indem der Prozessor einen sogenannten Trap auslöst. Dieser Trap kann dann behandelt werden, indem z. B. der kritische Befehl in Software nachgebildet wird.
Mit den Virtualisierungserweiterungen VT-x (Intel) und Pacifica (AMD) haben die Prozessorhersteller in den letzten Jahren entsprechende Änderungen an ihren Prozessoren vorgenommen. Intel hat dazu einfach 4 neue Ringe hinzugefügt (-1 bis -3). Führt der Prozessor ein Programm in diesen Ringen aus, so lösen kritische Befehle einen Trap aus.
Virtualisierung nativ
Mit den eben vorgestellten Hardwareerweiterungen ist es möglich, dass ein Gastsystem direkt auf dem Prozessor ausgeführt wird, gleiche Hardwareplattform vorausgesetzt. Die bremsende Übersetzung von Befehlen entfällt. Die Virtualisierungssoftware muss lediglich dafür sorgen, dass das Gastsystem im richtigen Ring ausgeführt wird. Alle aktuellen Virtualisierungslösungen wie z. B. Parallels oder VMWare Fusion arbeiten in diesem Modus.
I/O-Virtualisierung
Wer schon mit solchen Virtualisierungslösungen arbeitet, dem wird auffallen, dass die Systeme z. B. virtuelle Netzwerkkarten anlegen. Diese leiten dann den Netzwerkverkehr des Gastsystems an die Netzwerkkarte des Hostsystems weiter. Um solche Geräte zukünftig auch virtualisieren zu können, hat Intel unter dem Namen VT-d (das d steht für directed I/O) zusätzliche Erweiterungen vorgenommen. AMD baute ähnliche Techniken auch in seine Pacifica-Plattform ein. Damit lassen sich zukünftig auch bestimmte Geräte direkt vom Gastsystem nutzen, indem sich z. B. Interrupts nur an eine virtuelle Maschine zustellen lassen.
Was gibt es noch?
Die bislang vorgestellten Virtualisierungsansätze benötigen immer noch ein Hostsystem, auf dem eine bestimmte Art von Virtualisierungssoftware läuft. Im nächsten Schritt lässt man das Host-Betriebssystem weg und ersetzt es durch einen sogenannten Hypervisor. Der Hypervisor ist vom Prinzip her ein minimaler Betriebssystemkern, der die Ressourcen des Rechners (CPU, Speicher und Geräte) an unterschiedliche virtuelle Maschinen verteilt und die VMs voneinander isoliert. Das ist die nächste Stufe des bekannten Multitaskings moderner Betriebssysteme: Statt mehrerer Programme laufen mehrere Betriebssysteme parallel auf einem Rechner.
Eine weitere Möglichkeit ein Betriebssystem zu virtualisieren ist die sogenannte Paravirtualisierung. Dabei stellt eine Software eine Schnittstelle bereit. Die ist ähnlich aber nicht identisch zur eigentlichen Hardware. Das Betriebssystem muss man dann an diese Schnittstelle anpassen (portieren). Daher eignet sich dieser Ansatz nur bei Systemen, bei denen man Zugriff auf die Quellen hat, z. B. bei Linux. Vorteil dieses Ansatzes ist, dass man sowohl auf der Schnittstellenseite als auch auf Betriebssystemseite Optimierungen vornehmen kann und damit potentiell eine höhere Leistung der VM erreichen kann.
Fazit
Wie der Artikel zeigt, ist Virtualisierung von Betriebssystemen auf unterschiedliche Weise möglich. Dem flexibelsten Ansatz mit Hilfe eines Emulators stehen die Geschwindigkeitsvorteile der hardwareunterstützten Virtualisierung entgegen. Beide Ansätze haben ihre Berechtigung. Moderne Virtualisierungstechniken der Prozessoren ermöglichen u. a. die Effizienzsteigerung von Servern. Sie konsolidieren ursprünglich dedizierte Systeme mit Hilfe von VMs auf einem System. Mit Hilfe von Emulatoren lässt sich auch alte Software für nicht mehr existente Hardwareplattformen wieder ans Laufen bringen.