Montag, 22. Juli 2013

SLAT: Der Hypervisor und seine Adressen



Ein Emulator ist ein Programm, welches ein Gerät oder ein anderes Programm simuliert. Wir Entwickler simulieren beispielsweise damit ein Windows Phone 8, um darauf unsere Apps zu testen. Die Vorteile des Emulators liegen auf der Hand: Er bietet eine kontrollierte Umgebung, man braucht das Phone nicht zur Hand und er ist immer verfügbar. Wirklich immer? Der Emulator des Windows Phone 8 ist kein einfaches Programm, das von Windows ausgeführt wird. Tatsächlich steckt dahinter Microsofts Virtualisierungslösung Hyper-V. Das bringt entscheidende Vorteile, vor allem eine deutlich bessere Performance im Vergleich zum Vorgänger. Aber der Fortschritt hat seinen Preis, denn die Hardware muss Hyper-V bei der Arbeit kräftig unter die Arme greifen. Der Entwickler-Rechner braucht einen 64-Bit-Prozessor und mindestens 4 Gigabyte Hauptspeicher. Das entscheidende Feature, das Ihr Prozessor außerdem mitbringen sollte, heißt SLAT: Second Level Address Translation.

Was ist SLAT?

Jedes moderne Betriebssystem hat eine virtuelle Speicherverwaltung mit Paging. Diese erlaubt dem System für jedes Programm einen eigenen Speicherbereich vorzugeben, den das Programm zwar beliebig verwenden, aber nicht überschreiten kann. Aus Sicht eines Programms beginnt der Speicher immer mit der Adresse 0x00, der ersten virtuellen Adresse. Die Adressen werden dann schrittweise erhöht, bis an die Grenze des zugewiesenen Speichers. Dieser Mechanismus soll vor allem Unfällen vorbeugen. Wenn ein Programm physikalische Adresse kennt, kann es auch außerhalb seines eigenen Speichers lesen und schreiben.
In den virtuellen Adressen eines Programms gibt es keine Lücken, selbst wenn es im Speicher gar nicht genug freien Platz gibt, um das Programm vollständig unter zu bringen. Die Daten, die nicht mehr in den Hauptspeicher passen, werden auf die Festplatte geschrieben. Dazu wird der Speicher in "Pages" unterteilt,  die bei Bedarf auf die Festplatte geschrieben werden. Benötigt ein Programm eine Seite von der Festplatte, so wird diese wieder in den Hauptspeicher kopiert. Sowohl das Host-System als auch der Emulator führen die virtuelle Speicherverwaltung durch und beide benötigen für den Speicherzugriff mit virtuellen Adressen das sogenannte "page table", das Seitenverzeichnis.
Fast alles, was in einem System passiert, ist ein Speicherzugriff, deshalb haben Prozessoren einen besonderen Teil, der die virtuelle Speicherverwaltung unterstützt. Diese Hardware-Beschleunigung kann allerdings nur von einem einzelnen Betriebssystem genutzt werden. Das Seitenverzeichnis des Gastsystems liegt einfach irgendwo im Speicher und statt der Hardware sorgt die Virtualisierungssoftware für die Berechnung der Adressen. Das Gastsystem hat damit eine "Schattenverwaltung", die Shadow Pages. Shadow Pages sind langsamer als das Paging mit der Hardware. Mit SLAT wird diese "Schattenverwaltung" aber überflüssig gemacht. Die Hardware-Unterstützung wird ausgeweitet, sodass nicht nur die virtuellen Adressen des Host-Systems, sondern auch die des Gastsystems oder der Gastsysteme verwaltet werden können. Das Gastsystem läuft dadurch flüssiger und kann seinen eigentlichen Aufgaben nachgehen - zum Beispiel Apps ausführen.

Kann mein Prozessor SLAT?

Die meisten neueren Prozessoren können diese Virtualisierungstechnik bereits. Die Intel-Prozessoren nennen dieses Feature "EPT" - Extended Page Tables. Alle i3, i5 und i7-Prozessoren verfügen darüber; die Details dazu findet man auf der Homepage von Intel [intelvt].
Bei AMD heißt das Feature "NP" oder "RVI". Jeder Barcelona-Prozessor (Family 10h) oder später verfügt über RVI, beispielsweise der Phenom II X2. Auch hier gibt es eine Liste [amdw8].
Den eigenen Rechner prüft man indes am besten mit dem Tool "CoreInfo" aus den Windows Sysinternals [cori]. Führen Sie es von der Kommandozeile aus und der Befehl "coreinfo -v" zeigt Ihnen an, ob das System SLAT unterstützt. Wenn in den beiden unteren Zeilen jeweils ein Sternchen steht (siehe Abb.), ist der Prozessor geeignet.
Die Ausgabe von CoreInfo bei einem AMD Phenom II X4 mit SLAT

Weitere Infos zum Hardware-Test finden Sie im Technet-Wiki [tesl].

Maschine in der Maschine

Wie praktisch virtuelle Maschinen sind, haben wir bereits erläutert. Das Windows Phone 8 SDK lässt sich auch in einer virtuellen Umgebung installieren, nur verweigert der Emulator dort den Dienst. Was kann man also tun, wenn der Entwickler-Rechner mit Windows 8 bereits in einer VM läuft? Kurz gesagt, nichts. Hyper-V ist nicht dafür geeignet einen weiteren, virtuellen Hypervisor auszuführen. Anders jedoch, wenn man VMWare Workstation 9 oder zur nicht-kommerziellen Verwendung den kostenlosen VMWare Player 5 verwendet. Diese enthalten ein undokumentiertes Feature, mit dem man dem Gastsystem vortäuschen kann, es wäre das einzige System auf dieser Hardware. Mit einem Text-Editor lässt sich die Konfiguration hypervisor.cpuid.v0 = "FALSE" in der VMX-Datei der virtuellen Maschine eintragen. Von nun an belügt der Hypervisor das Gastsystem. Die Maschine für den Emulator braucht außerdem installierte VMWare Tools und die passende Einstellung in der Systemsteuerung für die virtuellen Prozessoren. Dann wird auch der Windows Phone 8-Emulator innerhalb einer VM ausgeführt.
tl;dr: SLAT erlaubt es der Hardware, die internen virtuellen Adressen von Gastsystemen gleich mit zu berechnen. Es ist notwendig für jeden WP8-Dev.


Dieser Text steht unter der Creative-Commons-Lizenz CC-BY-SA.

Keine Kommentare:

Kommentar veröffentlichen