Ein kleines Beispiel. Letzte Woche haben wir uns überlegt, wie man mit hardwarebasierter
Virtualisierung das Ganze ein bisschen beschleunigen kann. Sprich, wir bauen in die CPU so ein bisschen
Support ein, dass sie sich selbst berechnen, selbst nachmachen kann bzw. an den Stellen,
wo sie sich nicht nachmachen kann, dann halt sagt, jetzt weiß ich nicht weiter, exit, mach du mal.
Das waren diese VTX Erweiterungen. Es gibt ein Projekt QEMU, die das ausnutzen und entsprechend
für Linux ein PC simulieren. Was simuliert QEMU? Es gibt ein bisschen Unterschied zwischen QEMU und
KVM. Die sind zwar eng verbandelt, aber nicht identisch. Also QEMU Quick Emulation war mal
ein Projekt, die haben angefangen, letztendlich ein PC, so wie ihr es bisher gelernt habt, für
Befehl just in time komponiert nachzumachen. Das heißt, im Prinzip können die, also mit der Methode
her, 386er aufwärts alles nachmachen, wobei QEMU an der Stelle nicht konfigurierbar ist,
sondern nach dem Motto, ein AMD 64 ist hier abwärts kompatibel, also machen wir doch an sich
erstmal ein AMD 64 mit allen Pieperpohr nach. Wer dann irgendwelche alte i386 Software hat,
der kann es ja trotzdem drauf laufen lassen. Ein PC wird nachgemacht. Also ich kann jetzt nicht
mehrere PCs irgendwie gemeinsam konfigurieren. Ich kann allerdings natürlich das QEMU Programm
zwei mal, drei mal, vier mal starten, dann habe ich halt zwei, drei, vier PCs. Drinnen ist Wald und
Wiesen, PC Hardware. Ich sage mal so eine typische Ausstattung, Grafikkarte, eine Platte, CD-Laufwerk,
Floppy-Laufwerk, serielle parallelen Schnittstelle. Wenn ihr in irgendeinen PC Laden geht und sagt, ich
weiß nicht, was ich brauche, ich will ein PC, dann kriegt ihr so ein, so grob gerechnet.
Das ganze ist GPL bzw. die Teile sind auch LGPL, also man kann sie auch irgendwo noch nutzen und
einbauen. Gebastelt hat das ein Herr Fabrice Ballard aus Frankreich. Ich weiß nicht, kennt den
jemand? Ein schillernder Paradiesvogel der Informatik. Der hat überall seine Finger
drin, also auch die libffm-Pack, die kennt ihr vielleicht. Die Stammt hat auch er verbrochen.
Der hat schon mal gewonnen, irgendwie einen Preis für das kryptische Programm. Also der taucht in
der Informatik häufiger mal auf. Ja, so sieht ungefähr auch das QEMU unter der Haube aus.
Da könnte man auch einen Preis für die kryptische Software finden, glaube ich. Also wenn man da drin
was sucht, es ist gruselig verblüffend, dass das QEMU so gut funktioniert. Also wenn ich so
Software schreiben würde und zwei Tage später wieder reingucken würde, ich würde mein Code
selber nicht mehr verstehen. Also das war das ursprüngliche QEMU. Irgendwann gab es dann die
sich selbst simulierenden CPUs, die Hardware-Geschichten. Und was sie da gemacht haben, da haben irgendwelche
anderen Leute dann letztendlich QEMU hergenommen und so die typische moderne PC-Hardware rausgesägt
und andersrum hier die AMD 64 CPU rausgesägt und weggeschmissen und stattdessen wird jetzt die
VTX-Erweiterung genutzt und damit dann die CPU simuliert. Der Rest ist am sich gleich. Inzwischen
haben sie das auch irgendwie ein bisschen auf die Reihe gekriegt, dass jetzt QEMU-Entwicklung
und KVM-Entwicklung im Prinzip laufen die jetzt parallel. Also wer eine entsprechende CPU hat,
der kann das KVM nutzen. Wer keine entsprechende CPU hat, kann das QEMU nutzen. Äußerlich gesehen
identisch. Also ihr seht da keinen Unterschied. Moin, kommen sie doch noch alle. Jo Vorteil
von dem QEMU, auf jeden Fall das Ding ist flott. Also wer jetzt irgendwie das mal vergleicht mit
irgendwas anderem, was ich euch bisher verklickert habe, wie das funktioniert, deutlich schneller.
Also auch das QEMU selber, also die nicht hardwarebeschleunigte Variante, ist noch
deutlich schneller als V-Maschinen zum Beispiel. Und mit dem KVM-Modul natürlich dann noch mit
der echten CPU, naja, so wie ihr das letzte Mal mitgekriegt habt. Also was ums Rechnen geht,
Originalgeschwindigkeit, wenn es dann um I.O. geht und viele Interrupts und so, dann müssen wir uns
gleich nochmal angucken. Jo, diese VTX-Geschichten, ich habe es euch beim letzten Mal so am Rande
erwähnt, sind natürlich jetzt alles wieder privilegierte Befehle, weil privilegierte Befehle
kann ich das ins QEMU selber nicht einbauen. Also gibt es ein entsprechendes Linux-Könnel-Modul,
wobei das jetzt in dem Sinne auch nicht unbedingt ein Kernel-Modul ist, weil ja AMD und Intel und
wie sie alle heißen, das alle ein klein bisschen anders machen. Dementsprechend kann man jetzt
unterschiedliche Module laden oder unterschiedliche Teile von Modulen laden, entweder AMD 64 oder
je nachdem welche CPU man hat. Jo, das ganze läuft dann entsprechend auch auf den entsprechenden
VTX-Erweiterungen oder kann man natürlich auch sagen, wenn ich jetzt keine KVM-Hardware-Beschleunigung
Presenters
Zugänglich über
Offener Zugang
Dauer
01:30:24 Min
Aufnahmedatum
2012-12-06
Hochgeladen am
2019-05-05 10:39:04
Sprache
de-DE
Vorgestellt werden verschiedene Virtualisierungs-Ansätze:
-
Emulation
-
Just-In-Time-Compiler
-
Para-Virtualisierung
-
Bibliotheks-basierte Virtualisierung
-
OS-Virtualisierung
Lernziele und Kompetenzen:
Studierende, die das Modul erfolgreich abgeschlossen haben:
-
erläutern verschiedene Motivationen für den Einsatz von VMs
-
unterscheiden verschiedene VMs
-
klassifizieren verschiedene Ziele unterschiedlicher VMs (z.B. Performance, Konfigurierbarkeit, Genauigkeit, ...)
-
hinterfragen verschiedene Simulationansätze für MMUs
-
erstellen virtuelle Komponenten und Busse
-
strukturieren Callbacks und entsprechendes Forwarding und Caching
-
unterscheiden zwischen Architektur, Chip und Komponente
-
klassifizieren unterschiedliche Just-In-Time-Compiler-Ansätze
-
erzeugen JIT Code aus vorgefertigten Code-Teilen
-
bewerten unterschiedliche JIT-Code-Optimierungen
-
erläutern Probleme bei der JIT-Code-Invalidierung
-
nennen JIT Probleme mit Exceptions/Interrupts sowie berechnete Sprüngen und Return-Instruktionen
-
unterscheiden verschiedene JIT Cache-Verwaltungen
-
beschreiben Möglichkeiten der Fehlerinjektion durch VMs
-
entwickeln ein an JIT angepasstes virtuelles "Hardware"-Design
-
erläutern die Java-VM Instruktionssatz-Architektur
-
nutzen Hardware-basierte Virtualisierung
-
entwickeln Verfahren zum Ausfiltern bestimmter Befehle
-
erläutern Probleme der Speicherverwaltung bei HW-basierter Virtualisierung
-
nutzen User-Mode-Emulation zur Paravirtualisierung
-
diskutieren Möglichkeiten von Debuggern für die Umleitung von System-Calls und die Ausfilterung von Befehlen
-
nutzen einen Hypervisor zur Paravirtualisierung
-
unterscheiden verschiedene Ansätze zur Geräteverwaltung in paravirtualisierten Systemen
-
erläutern Betriebssystem-basierte Virtualisierung
-
entwickeln unterschiedliche Bibliotheks-basierte Virtualisierungen
-
erläutern Probleme beim Speicher-Layout bei Bibliotheks-basierte Virtualisierung
-
konzipieren Personalities für Bibliotheks-basierte Virtualisierungen
-
beurteilen Probleme bei der korrekten Zeit-Simulation
-
nennen Ideen für die dynamische Anpassung der Zeit-Simulation
-
klassifizieren bekannte VMs (z.B. VICE, FAUmachine, QEMU, Bochs, JVM, KVM, User-Mode-Linux, Xen, VServer, Wine)
-
diskutieren in der Gruppe Vor- und Nachteile von bestimmten VM-Ansätzen
-
untersuchen CPU-Emulationen
-
untersuchen Geräte-Emulationen