Virtualisierung: Unterstützung durch CPUs erst am Anfang

Die Virtualisierungssoftware fängt nun Befehle, die in Ring 0 nicht möglich sind, in Form einer Exception ab, so dass sie für das Gastbetriebssystem als privilegierte Befehle erscheinen. Im Falle von Speicherverwaltung bedeutet dies, dass die Virtualisierungssoftware aus der physikalischen Speichertabelle Speicher allokiert und in den Adressraum der Gastumgebung legt.

Bei der Intel-Architektur wird Speicher in einer Tabelle in Blöcken zu 4 KByte verwaltet. Die Gastumgebung hat eine gleich strukturierte Tabelle, jedoch wird der Zugriff darauf abgefangen und die Tabelle in Wahrheit von der Virtualisierungssoftware mit verwaltet.

Hier liegt ein großes Performancehindernis für vollvirtualisierte Umgebungen. Der eigentliche Hauptspeicher eines Computers ist relativ langsam. Eine Beschleunigung ergibt sich durch den Cache. Der Cachespeicher hängt jedoch immer komplett zusammen und wird aus Performancegründen nicht in Blöcken verwaltet.

Bei jedem Abfangen von Speicherverwaltung muss daher der Cache komplett in den Hauptspeicher geschrieben werden, was zusätzlich zu der emulierten Speicherverwaltung viel Zeit kostet.

Nachteile beim I/O-Zugriff

Ähnlich sieht es beim I/O-Zugriff aus. Hier liest und schreibt das Gastbetriebssystem in die I/O-Ports, was allerdings von der Virtualisierungssoftware abgefangen wird und in entsprechende Aktionen transformiert wird.
Während einfache Bausteine, etwa ein serielles oder ein paralleles Interface, mit wenigen I/O-Ports auskommen, müssen Devices, bei denen es auf Geschwindigkeit ankommt, in den Speicheradressraum des Prozessors gelegt werden.

Ein Standard-Ethernet-Paket beispielsweise kann bis zu 1500 Bytes groß sein. Neuere Ethernetkarten unterstützen auch Jumbo-Pakete mit bis zu 9000 Bytes. Da immer ein ganzes Paket übertragen werden muss, benötigt eine Ethernetkarte immer mindestens den Speicheradressraum für ein Paket. Moderne Ethernetkarten bieten jedoch Speicheradressraum für mehrere Pakete. Der Prozessor legt dabei mindestens ein Paket in den gemeinsamen Adressraum. Danach geschieht die Übertragung über den DMA-Baustein des Motherboards, damit der Prozessor weiterarbeiten kann und die Übertragung über I/O-Ports nicht selbst übernehmen muss.

Hier liegt das größte Performanceproblem der Vollvirtualisierung. Die echten DMA-Bausteine können nur im Kernel-Mode verwaltet werden. Daher muss bei jeder Verwendung eines Peripheriegerätes, etwa Netzwerk, Festplatte oder Bildschirm, ein Taskswitch in die Virtualisierungssoftware durchgeführt werden, der dazu führt, dass der Cache invalidiert wird und der langsame Hauptspeicher bemüht werden muss.

Um diese Performancenachteile einer virtualisierten Umgebung auszugleichen, gibt es verschiedene Ansätze. Ein softwareseitiger Ansatz ist der Austausch von Treibern nach der Installation des Gastbetriebssystems. Diese neuen Treiber versuchen nicht mehr, die Hardware zu programmieren, sondern übergeben Pakete, die an Netzwerkkarte, Festplattencontroller oder Videokarte gesendet werden sollen, an die Virtualisierungssoftware.

Allerdings ist auch diese Übergabe nicht ohne Performanceverlust. Da das Gastbetriebssystem grundsätzlich davon ausgeht, den gesamten Adressraums eines Computers alleine nutzen zu können, müssen die Treiber absichtlich einen privilegierten Befehl ausführen, um eine Exception zu provozieren.

Dies hat natürlich wieder eine Invalidierung des Caches zur Folge. Erst dann kann die Virtualisierungssoftware die Pakete abholen. Lediglich die Emulation der Devices und der DMA-Bausteine fällt in diesem Fall weg.

Themenseiten: AMD (Advanced Micro Devices), Intel, Servers, Storage, Storage & Server

Fanden Sie diesen Artikel nützlich?
Content Loading ...
Whitepaper

Artikel empfehlen:

Neueste Kommentare 

Noch keine Kommentare zu Virtualisierung: Unterstützung durch CPUs erst am Anfang

Kommentar hinzufügen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *