Typ-2-Hypervisor

This commit is contained in:
WieErWill 2022-03-01 18:09:35 +01:00
parent 41fa53cff2
commit 2f4137dd74
2 changed files with 31 additions and 74 deletions

Binary file not shown.

View File

@ -2790,81 +2790,52 @@
\item Diese Architekturprobleme (bekannt seit 1974) wurden 20 Jahre lang im Sinne von Rückwärtskompatibilität auf Nachfolgeprozessoren übertragen ... \item Diese Architekturprobleme (bekannt seit 1974) wurden 20 Jahre lang im Sinne von Rückwärtskompatibilität auf Nachfolgeprozessoren übertragen ...
\end{itemize*} \end{itemize*}
\subsubsection{Typ-2-Hypervisor} \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, keine Möglichkeit...
Virtualisierung ohne Hardwareunterstützung:
\begin{itemize*} \begin{itemize*}
\item keine Möglichkeit, trap-and-emulate zu nutzen \item trap-and-emulate zu nutzen
\item keine Möglichkeit, um \item um korrekt den Privilegierungsmodus zu wechseln
\begin{enumerate*}
\item korrekt (bei sensiblen Instruktionen im Gast-Kernel) den Privilegierungsmodus zu wechseln
\item den korrekten Code im HV auszuführen \item den korrekten Code im HV auszuführen
\end{enumerate*}
\end{itemize*} \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*} \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 korrekte Ausführung von virtualisierter Software auf virtualisierter HW
\item beherrschbare Komplexität der Implementierung \item beherrschbare Komplexität der Implementierung
\end{itemize*} \end{itemize*}
\end{itemize*}
aus Nutzersicht aus Nutzersicht
\begin{itemize*} \begin{itemize*}
\item läuft als gewöhnlicher Nutzer-Prozess auf Host-Betriebssystem (z.B. \item läuft als gewöhnlicher Nutzer-Prozess auf Host-Betriebssystem
Windows oder Linux) \item VMware bedienbar wie physischer Rechner
\item VMware bedienbarwie physischer Rechner (bspw. erwartet Bootmedium in \item persistente Daten des Gast-BS auf virtuellem Speichermedium
virtueller Repräsentation eines physischen Laufwerks)
\item persistente Daten des Gast-BS auf virtuellem Speichermedium (
tatsächlich: Image-Datei aus Sicht des Host-Betriebssystems)
\end{itemize*} \end{itemize*}
Mechanismus: Code-Inspektion Mechanismus: Code-Inspektion
\begin{itemize*} \begin{itemize*}
\item Bei Ausführung eines Binärprogramms in der virtuellen Maschine (egal \item Bei Ausführung eines Binärprogramms in der virtuellen Maschine: zunächst inspiziert Typ-2-HV den Code nach Basisblöcken
ob Bootloader, Gast-BS-Kernel, Anwendungsprogramm): zunächst \item Basisblock: Befehlsfolge, die mit privilegierten Befehlen oder solchen Befehlen abgeschlossen ist, die den Kontrollfluss ändern%, z.B. jmp, call, ret
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 Basisblöcke werden nach sensiblen Instruktionen abgesucht \item Basisblöcke werden nach sensiblen Instruktionen abgesucht
\item diese werden jeweils durchAufruf einer HV-Prozedur ersetzt, die \item diese werden jeweils durch Aufruf einer HV-Prozedur ersetzt, die jeweilige Instruktion behandelt
jeweilige Instruktion behandelt
\item gleiche Verfahrensweise mit letzter Instruktion eines Basis-Blocks
\end{itemize*} \end{itemize*}
Mechanismus: Binary Translation (Binärcodeübersetzung) Mechanismus: Binary Translation (Binärcodeübersetzung)
\begin{itemize*} \begin{itemize*}
\item modifizierter Basisblock: wird innerhalbdes HVin Cachegespeichert und \item modifizierter Basisblock: wird innerhalb des HV in Cache gespeichert und ausgeführt
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 Basisblock ohne sensible Instruktionen: läuft unter Typ-2-HV exakt so \item sensible Instruktionen: nach dargestellter Methode abgefangen und emuliert $\rightarrow$ dabei hilft das Host-BS (z.B. durch eigene Systemaufrufe) % Gerätetreiberschnittstellen)
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)
\end{itemize*} \end{itemize*}
Mechanismus: Caching von Basisblöcken Mechanismus: Caching von Basisblöcken
\begin{itemize*} \begin{itemize*}
\item HV nutzt zwei parallel arbeitende Module (Host-BS-Threads!): \item HV nutzt zwei parallel arbeitende Module
\begin{itemize*} \begin{itemize*}
\item Translator: Code-Inspektion, Binary Translation \item Translator: Code-Inspektion, Binary Translation
\item Dispatcher: Basisblock-Ausführung \item Dispatcher: Basisblock-Ausführung
@ -2874,37 +2845,23 @@
Befehlsadresse im Cache; falls miss $\rightarrow$ Befehlsadresse im Cache; falls miss $\rightarrow$
suspendieren (zugunsten Translator) suspendieren (zugunsten Translator)
\item Translator: schreibt Basisblöcke in Basisblock-Cache \item Translator: schreibt Basisblöcke in Basisblock-Cache
\item Annahme: irgendwann ist Großteil des Programms im Cache, dieses läuft \item Annahme: irgendwann ist Großteil des Programms im Cache, dieses läuft dann mit nahezu Original-Geschwindigkeit (Theorie)
dann mit nahezu Original-Geschwindigkeit (theoretisch)
\end{itemize*} \end{itemize*}
Performanzmessungen Performanzmessungen
\begin{itemize*} \begin{itemize*}
\item zeigen gemischtes Bild: Typ2-HV keinesfalls so schlecht, wie einst \item Typ2-HV keinesfalls so schlecht, wie einst erwartet wurde
erwartet wurde \item ,,trap-and-emulate,, erzeugt Vielzahl von Traps $\rightarrow$ Kontextwechsel zwischen jeweiliger VM und HV
\item qualitativer Vergleich mit virtualisierbarer Hardware \item insbesondere bei Vielzahl an VMs sehr teuer: CPU-Caches, TLBs, Heuristiken zur spekulativen Ausführung werden verschmutzt
(Typ1-Hypervisor): \item wenn sensible Instruktionen durch VMware-Prozeduren innerhalb des Programms ersetzt: keine Kontextwechsel-Overheads
\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
\end{itemize*} \end{itemize*}
Studie: (von Vmware) [Adams\&Agesen06] Studie (von Vmware)
\begin{itemize*} \begin{itemize*}
\item last-und anwendungsabhängig kann Softwarelösung sogar Hardwarelösung \item last-und anwendungsabhängig kann Softwarelösung sogar Hardwarelösung übertreffen
übertreffen \item viele moderne Typ1-HV benutzen aus Performanzgründen ebenfalls Binary Translation
\item Folge: viele moderne Typ1-HV benutzen aus Performanzgründen ebenfalls
Binary Translation
\end{itemize*} \end{itemize*}
\subsubsection{Paravirtualisierung} \subsubsection{Paravirtualisierung}
Funktionsprinzip Funktionsprinzip