Ihr diskutiert schon schön über eure Simulationen.
Guten Morgen.
Gestern haben wir uns überlegt, wie das mit VMWare ausschaut.
Ihr habt alle etwas beigelernt, wie man sowas machen kann.
Ich habe noch ein paar andere Varianten für euch, wie man simulieren kann.
Das was ich euch heute zeigen will, sind Teile wieder von V-Maschinen.
V-Maschinen ist ursprünglich mal entstanden. Nämlich aus dem Grund, Fehlerinjektion.
Der Stuhl hat sich früher immer beschäftigt mit Fehlertoleranzmaßnahmen.
Ich baue meinen Rechner dreimal auf und dahinter einen Motor.
Ich rechne alles doppelt und nur wenn zweimal das gleiche rauskommt, dann war es wohl richtig.
Da kann man sich tausend solcher Sachen ausdenken. Da war nur die Frage, geht das wirklich?
Ein typisches Beispiel aus der sonstigen Welt. Linux gibt so ein Software-Rate.
Wer kennt das?
An sich ist es eine Art Rate. Wir haben fünf Platten im Rechner und sagen, Software verteile mal die Anfragen auf die fünf Platten.
Rate sagt mir, wenn eine Platte kaputt geht, dann müsste die Software es schaffen.
Die Frage ist nur, tut sie das wirklich?
Wie testet man solche Software?
Ich haue mir den Hammer auf meine Platte und gucke, ob es hinterher noch geht.
Okay, da war die Idee. Na ja dann hauen wir doch mit dem hammer auf die virtuelle
Platte. Was lange investments rainbow axe contra coat in
umgeschrieben wird, wenn ich neue heile virtuelle Platte eingebaut habe und so
weiter. Die frage ist jetzt, wie kriegen wir diese Fehler in unsere virtuelle
Maschine? Also erst mal erste Überlegung, ganz einfach.
Etwas kaputt zu simulieren geht wahrscheinlich sogar noch einfacher, als
es heil zu simulieren. ich vermute mal, dass eure i386 CPU im
Moment noch ziemlich kaputt ist. Kaputt ist sie bestimmt, heil soll sie irgendwann werden,
aber das ist der größere Schritt. Wir wollen jetzt Fehler injizieren, also Fehler einbauen
ist im Prinzip nicht schwer, aber es soll sich natürlich in keinster Weise jetzt sagen wir mal
auf beispielsweise die zeit auswirken wenn ich jetzt eine fehlerinjektion mache
sagen wir mal ich möchte simulieren dass mein speicher irgendwo ein bitflip hat
oder eine speicherzelle ist immer null egal ob ich reinschreibe nicht rein wenn
ich lese kommt eine null raus
dann soll die zeit natürlich nicht verändert werden wenn ich jetzt auf den
speicher zugreift das muss eigentlich noch genauso schnell gehen wie früher
haben wir uns ja gestern angeguckt wie das geht oder letzte woche angeguckt wie
QEMU das macht mit diesem mit einem MMU Lookup in diesem TLB wollen wir gleich
die virtuelle Adresse ausrechnen bei unserem Host und da greifen wir
darauf zu wenn wir das machen keine Fehlerinjektion möglich der krabbelt
ja einfach auf den Speicherzellen rum haben wir keinen Einfluss drauf
wir können es natürlich so machen wir können jetzt den Speicher anders
simulieren mit Callback dann ist das Zeitverhalten aber Stunden langsamer
ja jetzt müssen wir es irgendwie hinkriegen Fehler zu simulieren
okay die fehlerhaften Komponenten die dürfen sich natürlich zeitlich vielleicht
auch ein bisschen anders verhalten sagen wir mal eine Platte die kaputt ist
naja wenn die jetzt zeitlich gesehen langsamer ist okay wenn wir eine
Speicherzelle haben die jetzt fehlerhaft ist dass die ein bisschen
langsamer ist okay aber das ganze System es darf jetzt nicht der gesamte
Speicher langsam werden nur deshalb weil wir jetzt ein Bit kaputt machen
wollen ja und da ist die Frage wie kriegen wir das hin
ja eine Variante beispielsweise für die CPU wenn wir jetzt sagen wir wollen im
Presenters
Zugänglich über
Offener Zugang
Dauer
01:27:15 Min
Aufnahmedatum
2012-11-23
Hochgeladen am
2019-05-05 02: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