So, dann läuft alles. Dann begrüße ich euch alle im neuen Jahr. Ich wünsche guten Rutsch gehabt zu haben und so.
Großen Neuen Jahr. Ich habe euch mitgebracht. Ihr kennt das. Kennt das jemand nicht mit der Evaluierung?
Kennt ihr alle, ne? Drei Päckchen. Einmal Übungen, einmal Vorlesungen, einmal erweiterte Übungen.
Ihr könnt ja Kommentare ablassen. Ihr könnt ja auch sein lassen. Im Moment hat das noch gar keine Gruppe richtig genutzt.
Eine war mal da und hat mal so gefragt, ja irgendein Spezialfall Intel. Am besten ist da noch keine angekommen bei mir, irgendwas zu fragen.
Insofern könnt ihr die Qualität wahrscheinlich auch nicht so wirklich beurteilen, wenn keiner da ist.
Aber ich gebe es mal aus. Ihr könnt ja ja einen Kommentar abgeben.
Würde mich freuen, wenn ich Feedback kriegen würde. Also erweiterte Übungen wahrscheinlich ihr nicht. Macht eben keiner Nutzt.
Aber den Rest, da könnt ihr euch natürlich auslassen. Ihr kennt das. Ihr könnt da irgendwelche Kommentare dazuschreiben.
Ihr könnt einen tragen, was ihr gut findet und was ihr nicht so gut findet.
Spontan erinnere ich mich an nichts. Ich erinnere mich, was ich mich erinnere, als fluchen wir mal alle über Intel.
Wie man so einen vermurksten Prozessor bauen kann. Ich freue mich immer drüber, weil da kann man an dem vermurksten Ding, da kann man alles zeigen.
Da ist irgendwie alles eingebaut, was irgendwie existiert.
Sonst fällt mir spontan nichts ein. Ich sammle dann ja alle Anmerkungen von euch.
Wir sind ja auch angehalten, die hinterher dann vorzuführen. Ich zeige euch die am Ende des Semesters.
Da könnt ihr gucken. Ihr könnt den besten Kommentar prämieren, wenn ihr wollt.
Ich danke euch für die Abgaben, soweit ich sie dann habe.
Ein Grübchen hat abgegeben. Wo ist der Rest? Ihr sollt noch eine Aufgabe machen.
Nachdem heute so ein Brückentag ist, sind wir heute anscheinend noch weniger als wir sowieso schon waren.
Insofern habe ich mir als heutiges Thema einen Einschub ausgedacht.
Stand bisher noch in den letzten Jahren nicht auf den Folien.
Hat sich aber mal herausgestellt, dass es ein Punkt ist, wo keiner so echt Ideen hat.
Profiling. Profiling an sich, wisst ihr alle. GCC minus PG. Blablabla.
Dann kriegt ihr eine Liste. So viele Millisekunden hat sich das Programm in der Funktion aufgehalten.
Die Funktion wurde so oft aufgerufen. Dann kann man sich da Stunden mit beschäftigen.
Dann weiß man, da ist das Problem.
Hier haben wir das Problem GCC minus PG. Vergesst es, weil der Code erst zur Laufzeit kompelliert wird.
Just-in-time-Compiler. Da ist nichts mit Code instrumentiert.
Das ist das eine. Das zweite Problem ist, wenn wir dann, ich weiß nicht ob ihr daran erinnert,
aber wir haben etliche Register fest zugewiesen, damit beim Just-in-time-Kompilen in diesen Register
immer bestimmte Werte übergeben werden. Beziehungsweise diese Register frei sind,
dass man sie benutzen kann in dem Just-in-time-Kompilierten-Code.
Wir hatten zum Beispiel immer einen Pointer in einem Register, der auf die Zustandsstruktur zeigt.
Der Pointer war immer drin, mit dem Vorteil in den Schnipseln. Man braucht nicht im Schnipsel
den Pointer erst einmal sich zu holen und dann zu verarbeiten, sondern der Pointer steht schon im Register.
Das mag ein Profiler gar nicht. Ein Profiler möchte seine Register bezüglich so belegen, wie er das gerne hätte.
Also so ein GCC minus PG könnt ihr vergessen. Funktioniert nichts. Da geht nichts.
Noch ein Punkt. Gerade bei unseren kurzen Schnipseln kommt es immer unheimlich darauf an,
dass der Compiler letztendlich alle Register zur Verfügung hat. Wenn ihm da auch nur ein Register geklaut wird,
dann kommt der Code, der unten rausputzelt, ganz anders raus unter Umständen.
Ihr könnt euch vorstellen, wenn ein Register fehlt, dann muss er da mit Speicherzugriffen und so rum machen.
Das heißt, wenn ich da dem Compiler ein Register klaue, dann ist das mit dem Profiling, da kommt plötzlich ganz was anderes raus.
Das ist nicht ganz so schlimm bei etwas größeren Funktionen. Da fehlen meistens eben ein paar Register.
Wenn noch eins fehlt, egal. Aber wenn man so mini Schnipseln hat, wo eigentlich nur ein Registerzugriff drin ist
und dieser Zugriff funktioniert nicht mehr, weil das Register nicht mehr frei ist, dann kommt plötzlich ganz was anderes aus.
Jetzt die Frage, was kann man da tun? Einen guten Teil habe ich euch jetzt schon hingeschrieben.
Hier das Profiling, Compileroptimierung sehen dann plötzlich anders aus.
Die Code-Generierung haben wir gesagt, da brauchen wir ein paar Optionen für, so Registeroptionen gehen nicht mehr.
Ein eingefügter Code verfälscht das Ergebnis.
Ein jibgenerierter Code, den kann ich nicht im Voraus instrumentieren. Wie soll es funktionieren?
Presenters
Zugänglich über
Offener Zugang
Dauer
01:20:59 Min
Aufnahmedatum
2016-01-08
Hochgeladen am
2019-05-07 04:59: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
-
entwickeln selbst CPU-Emulationen
-
entwickeln selbst Geräte-Emulationen
-
verteilen Implementierungsaufgaben in ihrer Gruppe