Typ-2-Hypervisor
This commit is contained in:
parent
41fa53cff2
commit
2f4137dd74
BIN
Advanced Operating Systems - Cheatsheet.pdf
(Stored with Git LFS)
BIN
Advanced Operating Systems - Cheatsheet.pdf
(Stored with Git LFS)
Binary file not shown.
@ -2790,81 +2790,52 @@
|
||||
\item Diese Architekturprobleme (bekannt seit 1974) wurden 20 Jahre lang im Sinne von Rückwärtskompatibilität auf Nachfolgeprozessoren übertragen ...
|
||||
\end{itemize*}
|
||||
|
||||
|
||||
\subsubsection{Typ-2-Hypervisor}
|
||||
\begin{center}
|
||||
\includegraphics[width=.6\linewidth]{Assets/AdvancedOperatingSystems-typ-2-hypervisor.png}
|
||||
\end{center}
|
||||
|
||||
%\includegraphics[width=\linewidth]{Assets/AdvancedOperatingSystems-typ-2-hypervisor.png}
|
||||
|
||||
Virtualisierung ohne Hardwareunterstützung:
|
||||
|
||||
Virtualisierung ohne Hardwareunterstützung, keine Möglichkeit...
|
||||
\begin{itemize*}
|
||||
\item keine Möglichkeit, trap-and-emulate zu nutzen
|
||||
\item keine Möglichkeit, um
|
||||
\begin{enumerate*}
|
||||
|
||||
\item korrekt (bei sensiblen Instruktionen im Gast-Kernel) den Privilegierungsmodus zu wechseln
|
||||
\item den korrekten Code im HV auszuführen
|
||||
\end{enumerate*}
|
||||
\item trap-and-emulate zu nutzen
|
||||
\item um korrekt den Privilegierungsmodus zu wechseln
|
||||
\item den korrekten Code im HV auszuführen
|
||||
\end{itemize*}
|
||||
|
||||
Übersetzungsstrategie in Software:
|
||||
|
||||
Übersetzungsstrategie in Software
|
||||
\begin{itemize*}
|
||||
\item vollständige Übersetzung des Maschinencodes, der in VM ausgeführt
|
||||
wird, in Maschinencode, der im HV ausgeführt wird
|
||||
\item praktische Forderung: HV sollte selbst abstrahierte HW-Schnittstelle
|
||||
zur Ausführung des (komplexen!) Übersetzungscodes zur Verfügung haben
|
||||
(z.B. Nutzung von Gerätetreibern)
|
||||
\item $\rightarrow$ Typ-2-HV als Kompromiss:
|
||||
\begin{itemize*}
|
||||
\item vollständige Übersetzung des Maschinencodes, der in VM ausgeführt wird, in Maschinencode, der im HV ausgeführt wird
|
||||
\item praktische Forderung: HV sollte selbst abstrahierte HW-Schnittstelle zur Ausführung des (komplexen!) Übersetzungscodes zur Verfügung haben
|
||||
\item[$\rightarrow$] Typ-2-HV als Kompromiss
|
||||
\item korrekte Ausführung von virtualisierter Software auf virtualisierter HW
|
||||
\item beherrschbare Komplexität der Implementierung
|
||||
\end{itemize*}
|
||||
\end{itemize*}
|
||||
|
||||
aus Nutzersicht
|
||||
|
||||
\begin{itemize*}
|
||||
\item läuft als gewöhnlicher Nutzer-Prozess auf Host-Betriebssystem (z.B.
|
||||
Windows oder Linux)
|
||||
\item VMware bedienbarwie physischer Rechner (bspw. erwartet Bootmedium in
|
||||
virtueller Repräsentation eines physischen Laufwerks)
|
||||
\item persistente Daten des Gast-BS auf virtuellem Speichermedium (
|
||||
tatsächlich: Image-Datei aus Sicht des Host-Betriebssystems)
|
||||
\item läuft als gewöhnlicher Nutzer-Prozess auf Host-Betriebssystem
|
||||
\item VMware bedienbar wie physischer Rechner
|
||||
\item persistente Daten des Gast-BS auf virtuellem Speichermedium
|
||||
\end{itemize*}
|
||||
|
||||
Mechanismus: Code-Inspektion
|
||||
|
||||
\begin{itemize*}
|
||||
\item Bei Ausführung eines Binärprogramms in der virtuellen Maschine (egal
|
||||
ob Bootloader, Gast-BS-Kernel, Anwendungsprogramm): zunächst
|
||||
inspiziert Typ-2-HV den Code nach Basisblöcken
|
||||
\begin{itemize*}
|
||||
\item Basisblock: Befehlsfolge, die mit privilegierten Befehlen oder solchen Befehlen abgeschlossen ist, die den Kontrollfluss ändern (sichtbar an Manipulation des Programm-Zählers eip), z.B. jmp, call, ret.
|
||||
\end{itemize*}
|
||||
\item Bei Ausführung eines Binärprogramms in der virtuellen Maschine: zunächst inspiziert Typ-2-HV den Code nach Basisblöcken
|
||||
\item Basisblock: Befehlsfolge, die mit privilegierten Befehlen oder solchen Befehlen abgeschlossen ist, die den Kontrollfluss ändern%, z.B. jmp, call, ret
|
||||
\item Basisblöcke werden nach sensiblen Instruktionen abgesucht
|
||||
\item diese werden jeweils durchAufruf einer HV-Prozedur ersetzt, die
|
||||
jeweilige Instruktion behandelt
|
||||
\item gleiche Verfahrensweise mit letzter Instruktion eines Basis-Blocks
|
||||
\item diese werden jeweils durch Aufruf einer HV-Prozedur ersetzt, die jeweilige Instruktion behandelt
|
||||
\end{itemize*}
|
||||
|
||||
Mechanismus: Binary Translation (Binärcodeübersetzung)
|
||||
|
||||
\begin{itemize*}
|
||||
\item modifizierter Basisblock: wird innerhalbdes HVin Cachegespeichert und
|
||||
ausgeführt
|
||||
\item Basisblock ohne sensible Instruktionen: läuft unter Typ-2-HV exakt so
|
||||
schnell wie unmittelbar auf Hardware (weil er auch tatsächlich
|
||||
unmittelbar auf der Hardware läuft, nur eben im HV-Kontext)
|
||||
\item sensible Instruktionen: nach dargestellter Methode abgefangen und
|
||||
emuliert $\rightarrow$ dabei hilft jetzt das Host-BS
|
||||
(z.B. durch eigene Systemaufrufe, Gerätetreiberschnittstellen)
|
||||
\item modifizierter Basisblock: wird innerhalb des HV in Cache gespeichert und ausgeführt
|
||||
\item Basisblock ohne sensible Instruktionen: läuft unter Typ-2-HV exakt so schnell wie unmittelbar auf Hardware %(weil er auch tatsächlich unmittelbar auf der Hardware läuft, nur eben im HV-Kontext)
|
||||
\item sensible Instruktionen: nach dargestellter Methode abgefangen und emuliert $\rightarrow$ dabei hilft das Host-BS (z.B. durch eigene Systemaufrufe) % Gerätetreiberschnittstellen)
|
||||
\end{itemize*}
|
||||
|
||||
Mechanismus: Caching von Basisblöcken
|
||||
|
||||
\begin{itemize*}
|
||||
\item HV nutzt zwei parallel arbeitende Module (Host-BS-Threads!):
|
||||
\item HV nutzt zwei parallel arbeitende Module
|
||||
\begin{itemize*}
|
||||
\item Translator: Code-Inspektion, Binary Translation
|
||||
\item Dispatcher: Basisblock-Ausführung
|
||||
@ -2874,37 +2845,23 @@
|
||||
Befehlsadresse im Cache; falls miss $\rightarrow$
|
||||
suspendieren (zugunsten Translator)
|
||||
\item Translator: schreibt Basisblöcke in Basisblock-Cache
|
||||
\item Annahme: irgendwann ist Großteil des Programms im Cache, dieses läuft
|
||||
dann mit nahezu Original-Geschwindigkeit (theoretisch)
|
||||
\item Annahme: irgendwann ist Großteil des Programms im Cache, dieses läuft dann mit nahezu Original-Geschwindigkeit (Theorie)
|
||||
\end{itemize*}
|
||||
|
||||
Performanzmessungen
|
||||
|
||||
\begin{itemize*}
|
||||
\item zeigen gemischtes Bild: Typ2-HV keinesfalls so schlecht, wie einst
|
||||
erwartet wurde
|
||||
\item qualitativer Vergleich mit virtualisierbarer Hardware
|
||||
(Typ1-Hypervisor):
|
||||
\item ,,trap-and-emulate,,: erzeugt Vielzahl von Traps
|
||||
$\rightarrow$ Kontextwechsel zwischen jeweiliger VM
|
||||
und HV
|
||||
\item insbesondere bei Vielzahl an VMs sehr teuer: CPU-Caches, TLBs,
|
||||
Heuristiken zur spekulativen Ausführung werden verschmutzt
|
||||
\item wenn andererseits sensible Instruktionen durch Aufruf von
|
||||
VMware-Prozeduren innerhalb des ausführenden Programms ersetzt: keine
|
||||
Kontextwechsel-Overheads
|
||||
\item Typ2-HV keinesfalls so schlecht, wie einst erwartet wurde
|
||||
\item ,,trap-and-emulate,, erzeugt Vielzahl von Traps $\rightarrow$ Kontextwechsel zwischen jeweiliger VM und HV
|
||||
\item insbesondere bei Vielzahl an VMs sehr teuer: CPU-Caches, TLBs, Heuristiken zur spekulativen Ausführung werden verschmutzt
|
||||
\item wenn sensible Instruktionen durch VMware-Prozeduren innerhalb des Programms ersetzt: keine Kontextwechsel-Overheads
|
||||
\end{itemize*}
|
||||
|
||||
Studie: (von Vmware) [Adams\&Agesen06]
|
||||
|
||||
Studie (von Vmware)
|
||||
\begin{itemize*}
|
||||
\item last-und anwendungsabhängig kann Softwarelösung sogar Hardwarelösung
|
||||
übertreffen
|
||||
\item Folge: viele moderne Typ1-HV benutzen aus Performanzgründen ebenfalls
|
||||
Binary Translation
|
||||
\item last-und anwendungsabhängig kann Softwarelösung sogar Hardwarelösung übertreffen
|
||||
\item viele moderne Typ1-HV benutzen aus Performanzgründen ebenfalls Binary Translation
|
||||
\end{itemize*}
|
||||
|
||||
|
||||
\subsubsection{Paravirtualisierung}
|
||||
|
||||
Funktionsprinzip
|
||||
|
Loading…
Reference in New Issue
Block a user