Virtualisierung mit Server-CPUs: Leistungsbremse inklusive

Um das Ergebnis sinnvoll zu interpretieren, muss man sich ein wenig tiefer mit Hard- und Softwarevirtualisierungstechniken auseinandersetzen. Vorweggenommen sei lediglich, dass es nicht daran liegt, dass Windows als Hostbetriebssystem grundsätzlich keine sinnvolle Plattform für Servervirtualisierung ist, oder dass man besser ein Enterprise Linux nehmen sollte anstatt openSUSE 10.3. Die Ursachen sind viel tiefer in der x86-Architektur zu suchen.

Ausschlagegebend für die Wahl der Testumgebung war die Tatsache, dass weder SLES 10 noch ESX-Server besonders gut mit einem Nehalem-Prozessor auf einem MSI-Board mit ATI-Chipsatz zurechtkommen. VMware Principal Engineer Ole Agesen führte memsweep und weitere Microbenchmarks Mitte 2008 mit dem ESX-Server und Red Hat 5 als Gastsystem durch. Seine Ergebnisse weichen nur unwesentlich von den ZDNet-Benchmarks ab. Einen Nehalem-Test veröffentlichte er damals nicht.

Schaut man sich memsweep.c näher an, so stellt man fest, dass keine Betriebssystemaufrufe stattfinden, die einen Context-Switch erfordern. Das Programm arbeitet lediglich mit einem 32 MByte großen Speicherbereich. Auf den ersten Blick sollten EPT und RVI eigentlich einen Geschwindigkeitsvorteil bringen, da die Speicherverwaltung von der Hypervisorsoftware in die Hardware des Prozessors verlagert wurde.

Die Speicherverwaltung in einem x86-Prozessor ist allerdings mehr als komplex. Um sie zu verstehen, muss man in der Zeit zurückgehen bis zur Entwicklung der Prozessoren 8086 und 8088 Ende der 70er Jahre. Damals stand man vor dem Problem, dass gängige Prozessoren für Heim- und Personalcomputer, etwa der 8080 von Intel oder der Z80 von Zilog, einen Adressbus mit 16 Bit verwendeten, so dass sie maximal 64 KByte Speicher nutzen konnten.

Um den 8086 mit einem Adressbus von 20 Bit und einem Adressraum von 1 MByte einigermaßen kompatibel zu halten, führte Intel die segmentierte Adressierung ein. Speicher wird im 8086 mit zwei 16-Bit-Registern adressiert, einem Segment- und einem Offsetregister. So kann man mehrere bis zu 64 KByte große Segmente schaffen. Es lässt sich bis zu 1 MByte Speicher adressieren, trotzdem konnte bestehende Software für das Betriebssystem CP/M leicht auf MS-DOS portiert werden. Im IBM-PC waren 384 KByte für das BIOS und Memory Mapped I/O reserviert, so dass 640 KByte Hauptspeicher übrig blieben.

Bill Gates war damals von dieser Architektur so begeistert, dass er sich 1981 zu seinem wohl berühmtesten Zitat "640 Kilobyte ought to be enough for anybody" hinreißen ließ, das er heute vehement bestreitet. Mit dem 80286-Prozessor musste Intel einen Prozessor bauen, der mehr Speicher nutzen kann. So kam es zu einem 24-Bit-Adressbus, der bis zu 16 MByte verwaltet.

Ebenso forderten Microsoft und IBM, die damals noch gemeinsam das Konzept des designierten MS-DOS-Nachfolgers OS/2 entwickelten, dass ein Schutzmechanismus einzelner Anwendungen voreinander eingebaut werden muss. Trotzdem sollte OS/2 MS-DOS-Programme ausführen können.

Ein fest verdrahteter Mechanismus wie beim 8086, der aus Segment- und Offset-Register die echte Speicheradresse errechnet, kam nicht mehr in Frage. So entwickelte Intel Descriptor Tables, die im physischen Speicher stehen und Regeln beschreiben, ob und auf welchen Adressbereich mit dem Offsetregister referenziert wird, wenn ein Segmentregister einen bestimmten Wert hat. Man unterscheidet den Global Descriptor Table (GDT), der für alle Programme gilt, und einen oder mehrere Local Descriptor Tables (LDT), die nur für ein bestimmtes Programm gelten.

Das führt natürlich dazu, dass der Prozessor bei jedem Speicherzugriff eines Anwendungsprogrammes erst einmal in GDT und LDT nachschauen muss, wo denn nun wirklich zugegriffen wird. Der sogenannte Protected Mode des 80286 arbeitet messbar langsamer als der Real Mode, der identisch mit dem 8086 und 8088 ist.

Bei der Entwicklung des 80386 setzte Intel auf lineares Paging. Dieser Begriff darf nicht mit Swapping verwechselt werden. Swapping bezeichnet eine Technologie, die Hauptspeicher eines Prozessors vorübergehend auslagert, beispielsweise auf die Festplatte. Dank Microsofts Bezeichnung pagefile.sys für Swapdateien werden die beiden Begriffe oft verwechselt.

Anders als bei einer Segmentierung können Anwendungsprogramme mittels Paging den gesamten Adressraum mit nur einem Register nutzen. Dabei bestimmen Page Tables, ähnlich den Descriptor Tables, auf welche physikalische Adresse zugegriffen wird, wenn ein Anwendungsprogramm eine logische Adresse anspricht. Dieses Modell verwenden die meisten anderen Prozessorarchitekturen, beispielsweise PowerPC, Sparc, DEC-Alpha und Itanium.

Intel war jedoch beim 80386 aus Gründen der Rückwärtskompatibilität gezwungen, weiterhin Segmentierung zu unterstützen. Das bedeutet, dass für jeden Speicherzugriff mittels Tabellen zunächst aus einer segmentierten Adresse eine lineare ermittelt wird. Anschließend wandelt der Prozessor die lineare Adresse in die physikalische um. Das bedeutet noch mehr Takte für jeden Speicherzugriff. Den gesamten Prozess der physikalischen Adressermittlung bezeichnet man als "Page Walk".

Neueste Kommentare 

Eine Kommentar zu Virtualisierung mit Server-CPUs: Leistungsbremse inklusive

  • Am 18. Dezember 2008 um 18:22 von ML

    Story comment
    A very interesting story

Hinterlasse eine Antwort

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