Prefetching gekürzt
This commit is contained in:
parent
c9f5d020b4
commit
dbf21b0ffd
BIN
Advanced Operating Systems - Cheatsheet.pdf
(Stored with Git LFS)
BIN
Advanced Operating Systems - Cheatsheet.pdf
(Stored with Git LFS)
Binary file not shown.
@ -229,130 +229,89 @@
|
|||||||
\end{itemize*}
|
\end{itemize*}
|
||||||
|
|
||||||
\subsection{Energieeffizienz}
|
\subsection{Energieeffizienz}
|
||||||
Hardwaremaßnahmen: zeitweiliges Abschalten/Herunterschalten momentan nicht benötigter Ressourcen
|
zeitweiliges Abschalten momentan nicht benötigter Ressourcen
|
||||||
|
|
||||||
Betriebssystemmechanismen
|
Betriebssystemmechanismen
|
||||||
\begin{enumerate*}
|
\begin{enumerate*}
|
||||||
\item Dateisystem-E/A:energieeffizientes Festplatten-Prefetching(2.2.1)
|
\item Dateisystem-E/A: energieeffizientes Festplatten-Prefetching
|
||||||
\item CPU-Scheduling: energieeffizientes Scheduling(2.2.2)
|
\item CPU-Scheduling: energieeffizientes Scheduling
|
||||||
\item Speicherverwaltung:minimale Leistungsaufnahme durch Speicherzugriffe mittels Lokalitätsoptimierung {[}DGMB07{]}
|
\item Speicherverwaltung: Lokalitätsoptimierung
|
||||||
\item Netzwerk: energiebewusstes Routing
|
\item Netzwerk: energiebewusstes Routing
|
||||||
\item Verteiltes Rechnen auf Multicore-Prozessoren: temperaturabhängige Lastverteilung
|
\item Verteiltes Rechnen: temperaturabhängige Lastverteilung
|
||||||
\end{enumerate*}
|
\end{enumerate*}
|
||||||
|
|
||||||
\subsubsection{Energieeffiziente Dateizugriffe}
|
\subsubsection{Energieeffiziente Dateizugriffe}
|
||||||
Hardwarebedingungen: HDD, Netzwerkgeräte, ... sparen nur bei relativ langen Inaktivitätsintervallen Energie.
|
HDD/Netzwerkgeräte/... sparen nur bei relativ langer Inaktivität Energie
|
||||||
|
|
||||||
\begin{itemize*}
|
\begin{itemize*}
|
||||||
\item Aufgabe: Erzeugen kurzer, intensiver Zugriffsmuster $\rightarrow$ lange Inaktivitätsintervalle (für alle Geräte mit geringem Energieverbrauch im Ruhezustand)
|
\item Aufgabe: kurze, intensive Zugriffsmuster $\rightarrow$ lange Inaktivität
|
||||||
\item Beobachtung bei HDD-Geräten: i.A. vier Zustände mit absteigendem Energieverbrauch:
|
\item HDD-Geräten: Zustände mit absteigendem Energieverbrauch:
|
||||||
\begin{enumerate*}
|
\begin{enumerate*}
|
||||||
\item Aktiv: einziger Arbeitszustand
|
\item Aktiv: einziger Arbeitszustand
|
||||||
\item Idle (Leerlauf): Platte rotiert, aber Plattenelektronik teilweise abgeschaltet
|
\item Idle: Platte rotiert, Elektronik teilweise abgeschaltet
|
||||||
\item Standby: Rotation abgeschaltet
|
\item Standby: Rotation abgeschaltet
|
||||||
\item Sleep: gesamte restliche Elektronik abgeschaltet
|
\item Sleep: gesamte restliche Elektronik abgeschaltet
|
||||||
\end{enumerate*}
|
\end{enumerate*}
|
||||||
\item ähnliche, noch stärker differenzierte Zustände bei DRAM
|
\item ähnliche, noch stärker differenzierte Zustände bei DRAM
|
||||||
|
%\item \includegraphics[width=\linewidth]{Assets/AdvancedOperatingSystems-energiezustände-festplatte.png}
|
||||||
|
\item durch geringe Verlängerungen des idle - Intervalls kann signifikant der Energieverbrauch reduziert werden
|
||||||
\end{itemize*}
|
\end{itemize*}
|
||||||
|
|
||||||
Energiezustände beim Betrieb von Festplatten:
|
\subsubsection{Prefetching-Mechanismus}
|
||||||
\begin{itemize*}
|
\begin{itemize*}
|
||||||
\item %\includegraphics[width=\linewidth]{Assets/AdvancedOperatingSystems-energiezustände-festplatte.png}
|
\item Prefetching (,,Speichervorgriff'', vorausschauend) \& Caching
|
||||||
\item Schlussfolgerung: durch geringe Verlängerungen des idle - Intervalls kann signifikant der Energieverbrauch reduziert werden.
|
|
||||||
\end{itemize*}
|
|
||||||
|
|
||||||
\paragraph{Prefetching-Mechanismus}
|
|
||||||
|
|
||||||
\begin{itemize*}
|
|
||||||
\item Prefetching (,,Speichervorgriff'', vorausschauendes Lesen) \& Caching
|
|
||||||
\begin{itemize*}
|
\begin{itemize*}
|
||||||
\item Standard-Praxis bei moderner Datei-E/A
|
\item Standard-Praxis bei moderner Datei-E/A
|
||||||
\item Voraussetzung: Vorwissen über benötigte Folge von zukünftigen Datenblockreferenzen (z.B. Blockadressen für bestimmte Dateien, gewonnen durch Aufzeichnung früherer Zugriffsmuster beim Start von Anwendungen -Linux: readahead syscall)
|
\item Voraussetzung: Vorwissen über benötigte Folge von zukünftigen Datenblockreferenzen
|
||||||
\item Ziel: Performanzverbesserungdurch Durchsatzerhöhung u. Latenzzeit-Verringerung
|
\item Ziel: Performanzverbesserung durch Durchsatzerhöhung und Latenzzeit-Verringerung
|
||||||
\item Idee: Vorziehen möglichst vieler E/A-Anforderungen an Festplatte + zeitlich gleichmäßige Verteilung der verbleibenden
|
\item Idee: Vorziehen möglichst vieler E/A-Anforderungen an Festplatte + zeitlich gleichmäßige Verteilung verbleibender
|
||||||
\item Umsetzung: Caching (Zwischenspeichern) dieser vorausschauend gelesenen Blöcke in ungenutzten Hauptspeicherseitenrahmen ( pagecache )
|
\item Umsetzung: Caching dieser vorausschauend gelesenen Blöcke in ungenutzten PageCache
|
||||||
\end{itemize*}
|
\end{itemize*}
|
||||||
\item Folge: Inaktivitätsintervalle überwiegend sehr kurz $\rightarrow$ Energieeffizienz ...?
|
\item Folge: Inaktivität überwiegend sehr kurz $\rightarrow$ Energieeffizienz ...?
|
||||||
\item Zugriffsoperation: (durch Anwendung)
|
\item Zugriffs-/Festplattenoperationen
|
||||||
\begin{itemize*}
|
|
||||||
\item access(x) ... greife (lesend/schreibend) auf den Inhalt von Festplattenblock x im Page Cache zu
|
|
||||||
\end{itemize*}
|
|
||||||
\item Festplattenoperationen:
|
|
||||||
\begin{itemize*}
|
\begin{itemize*}
|
||||||
|
\item access(x) ... greife auf Inhalt von Festplattenblock x im PageCache zu
|
||||||
\item fetch(x) ... hole Block x nach einem access(x) von Festplatte
|
\item fetch(x) ... hole Block x nach einem access(x) von Festplatte
|
||||||
\item prefetch(x) ... hole Block x ohne access(x) von Festplatte
|
\item prefetch(x) ... hole Block x ohne access(x) von Festplatte
|
||||||
\item beide Operationen schreiben x in einen freien Platz des Festplattencaches; falls dieser voll ist ersetzen sie einen der Einträge gemäß fester Regeln $\rightarrow$ Teil der (Pre-) Fetching-Strategie
|
|
||||||
\end{itemize*}
|
\end{itemize*}
|
||||||
\item Beispiel für solche Strategien: Anwendung ...
|
\item Fetch-on-Demand-Strategie bisher (kein vorausschauendes Lesen)
|
||||||
|
\item Traditionelles Prefetching
|
||||||
\begin{itemize*}
|
\begin{itemize*}
|
||||||
\item mit Datenblock-Referenzstrom A, B, C, D, E, F, G, ...
|
|
||||||
\item mit konstanter Zugriffsdauer: 10 Zeiteinheiten je Blockzugriff
|
|
||||||
\item Cache-Kapazität: 3 Datenblöcke
|
|
||||||
\item Zeit zum Holen eines Blocks bei Cache-Miss: 1 Zeiteinheit
|
|
||||||
\end{itemize*}
|
|
||||||
\item Beispiel: Traditionelles Prefetching
|
|
||||||
\begin{itemize*}
|
|
||||||
\item Fetch-on-demand-Strategie (kein vorausschauendes Lesen)
|
|
||||||
\item Strategie entsprechend Prefetching- Regeln nach Cao et al. {[}CFKL95{]} (= traditionelle Disk-Prefetching- Strategie)
|
|
||||||
\item traditionelle Prefetching-Strategie: bestimmt
|
\item traditionelle Prefetching-Strategie: bestimmt
|
||||||
\begin{itemize*}
|
\begin{itemize*}
|
||||||
\item wann ein Datenblock von der Platte zu holen ist (HW-Zustand aktiv )
|
\item wann Block von der Platte holen (HW aktiv)
|
||||||
\item welcher Block zu holen ist
|
\item welcher Block zu holen ist
|
||||||
\item welcher Block zu ersetzen ist
|
\item welcher Block zu ersetzen ist
|
||||||
\end{itemize*}
|
\end{itemize*}
|
||||||
\item Regeln für diese Strategie:
|
\end{itemize*}
|
||||||
\begin{enumerate*}
|
\begin{enumerate*}
|
||||||
\item Optimales Prefetching: Jedes \emph{prefetch} sollte den nächsten Block im Referenzstrom in den Cache bringen, der noch nicht dort ist.
|
\item Optimales Prefetching: Jedes \emph{prefetch} sollte den nächsten Block im Referenzstrom in den Cache bringen, der noch nicht dort ist
|
||||||
\item Optimales Ersetzen: Bei jedem ersetzenden \emph{prefetch} sollte der Block überschrieben werden, der am spätesten in der Zukunft wieder benötigt wird.
|
\item Optimales Ersetzen: Bei jedem ersetzenden \emph{prefetch} sollte der Block überschrieben werden, der am spätesten in der Zukunft wieder benötigt wird
|
||||||
\item ,,Richte keinen Schaden an'': Überschreibe niemals Block A um Block B zu holen, wenn A vor B benötigt wird.
|
\item ,,Richte keinen Schaden an'': Überschreibe niemals Block A um Block B zu holen, wenn A vor B benötigt wird
|
||||||
\item Erste Möglichkeit: Führe nie ein ersetzendes \emph{prefetch} aus, wenn dieses schon vorher hätte ausgeführt werden können.
|
\item Erste Möglichkeit: Führe nie ein ersetzendes \emph{prefetch} aus, wenn dieses schon vorher hätte ausgeführt werden können
|
||||||
|
\end{enumerate*}
|
||||||
|
\item Energieeffizientes Prefetching
|
||||||
|
\begin{itemize*}
|
||||||
|
\item versucht Länge der Disk-Idle-Intervalle zu maximieren
|
||||||
|
\end{itemize*}
|
||||||
|
\begin{enumerate*}
|
||||||
|
\item Optimales Prefetching: Jedes \emph{prefetch} sollte den nächsten Block im Referenzstrom in den Cache bringen, der noch nicht dort ist
|
||||||
|
\item Optimales Ersetzen: Bei jedem ersetzenden \emph{prefetch} sollte der Block überschrieben werden, der am spätesten in der Zukunft wieder benötigt wird
|
||||||
|
\item ,,Richte keinen Schaden an'': Überschreibe niemals Block A um Block B zu holen, wenn A vor B benötigt wird
|
||||||
|
\item Maximiere Zugriffsfolgen: Führe immer dann nach einem \emph{fetch}/\emph{prefetch} ein weiteres \emph{prefetch} aus, wenn Blöcke für eine Ersetzung geeignet sind
|
||||||
|
\item Beachte Idle-Zeiten: Unterbrich nur dann eine Inaktivitätsperiode durch ein \emph{prefetch}, falls dieses sofort ausgeführt werden muss, um Cache-Miss zu vermeiden
|
||||||
\end{enumerate*}
|
\end{enumerate*}
|
||||||
\end{itemize*}
|
\end{itemize*}
|
||||||
\item
|
|
||||||
Energieeffizientes Prefetching
|
|
||||||
\begin{itemize*}
|
|
||||||
\item Optimale Ersetzungsstrategie und 3 unterschiedliche Prefetching-Strategien:
|
|
||||||
\item Fetch-on-demand-Strategie:
|
|
||||||
\begin{itemize*}
|
|
||||||
\item Laufzeit: 66 ZE für access(A) ... access(F) , 7 Cache-Misses
|
|
||||||
\item Disk-Idle-Zeit: 6 Intervalle zu je 10 ZE
|
|
||||||
\end{itemize*}
|
|
||||||
\item Strategie entsprechend Prefetching-Regeln {[}CFKL95{]} (traditionelle Disk-Prefetching-Strategie):
|
|
||||||
\begin{itemize*}
|
|
||||||
\item Laufzeit: 61 ZE für access(A) ... access(F) , 1 Cache-Miss
|
|
||||||
\item Disk-Idle-Zeit: 5 Intervalle zu je 9 ZE und 1 Intervall zu 8 ZE (= 53 ZE)
|
|
||||||
\end{itemize*}
|
|
||||||
\item Energieeffiziente Prefetching-Strategie, die versucht Länge der Disk-Idle-Intervalle zu maximieren:
|
|
||||||
\begin{itemize*}
|
|
||||||
\item gleiche Laufzeit und gleiche Anzahl Cache-Misses wie traditionelles Prefetching
|
|
||||||
\item Disk-Idle-Zeit: 2 Intervalle zu 27 bzw. 28 ZE (= 55 ZE)
|
|
||||||
\end{itemize*}
|
|
||||||
\end{itemize*}
|
|
||||||
\item Auswertung: Regeln für energieeffiziente Prefetching-Strategie nach Papathanasiou elal.: {[}PaSc04{]}
|
|
||||||
\begin{enumerate*}
|
|
||||||
\item Optimales Prefetching: Jedes \emph{prefetch} sollte den nächsten Block im Referenzstrom in den Cache bringen, der noch nicht dort ist.
|
|
||||||
\item Optimales Ersetzen: Bei jedem ersetzenden \emph{prefetch} sollte der Block überschrieben werden, der am spätesten in der Zukunft wieder benötigt wird.
|
|
||||||
\item ,,Richte keinen Schaden an'': Überschreibe niemals Block A um Block B zu holen, wenn A vor B benötigt wird.
|
|
||||||
\item Maximiere Zugriffsfolgen: Führe immer dann nach einem \emph{fetch} oder \emph{prefetch} ein weiteres \emph{prefetch} aus, wenn Blöcke für eine Ersetzung geeignet sind. (i.S.v. Regel 3)
|
|
||||||
\item Beachte Idle-Zeiten: Unterbrich nur dann eine Inaktivitätsperiode durch ein \emph{prefetch} , falls dieses sofort ausgeführt werden muss, um einen Cache-Miss zu vermeiden.
|
|
||||||
\end{enumerate*}
|
|
||||||
\end{itemize*}
|
|
||||||
|
|
||||||
Allgemeine Schlussfolgerungen
|
Allgemeine Schlussfolgerungen
|
||||||
|
|
||||||
\begin{enumerate*}
|
\begin{enumerate*}
|
||||||
\item Hardware-Spezifikation nutzen: Modi, in denen wenig Energie verbraucht wird
|
\item Hardware-Spezifikation nutzen: Modi, in denen wenig Energie verbraucht wird
|
||||||
\item Entwicklung von Strategien, die langen Aufenthalt in energiesparenden Modi ermöglichen , und dabei Leistungsparameter in vertretbarem Umfang reduzieren
|
\item Entwicklung von Strategien, die langen Aufenthalt in energiesparenden Modi ermöglichen und dabei Leistungsparameter in vertretbarem Umfang reduzieren
|
||||||
\item Implementieren dieser Strategien in Betriebssystemmechanismen zur Ressourcenverwaltung
|
\item Implementieren dieser Strategien in Betriebssystemmechanismen zur Ressourcenverwaltung
|
||||||
\end{enumerate*}
|
\end{enumerate*}
|
||||||
|
|
||||||
\subsubsection{Energieeffizientes Prozessormanagement}
|
\subsubsection{Energieeffizientes Prozessormanagement}
|
||||||
|
|
||||||
Hardware-Gegebenheiten
|
Hardware-Gegebenheiten
|
||||||
|
|
||||||
\begin{itemize*}
|
\begin{itemize*}
|
||||||
\item
|
\item z.Zt. meistgenutzte Halbleitertechnologie für Prozessor-Hardware: CMOS
|
||||||
z.Zt. meistgenutzte Halbleitertechnologie für Prozessor-Hardware: CMOS
|
|
||||||
( Complementary Metal Oxide Semiconductor)
|
( Complementary Metal Oxide Semiconductor)
|
||||||
\item
|
\item
|
||||||
Komponenten für Energieverbrauch: \$P = P\_\{switching\} +
|
Komponenten für Energieverbrauch: \$P = P\_\{switching\} +
|
||||||
@ -495,7 +454,7 @@
|
|||||||
\item Beschränkung des Energieverbrauchs (durch Qualitätseinbußen, schlimmstenfalls Ausfall)ab einem oberen Schwellwert \$E\_\{max\}\$
|
\item Beschränkung des Energieverbrauchs (durch Qualitätseinbußen, schlimmstenfalls Ausfall)ab einem oberen Schwellwert \$E\_\{max\}\$
|
||||||
\item Problem: energieintensive Threads behindern alle nachfolgenden Threads trotz gleicher Priorität $\rightarrow$ Fairnessmaß von RR (gleiche Zeitscheibenlänge T ) untergraben
|
\item Problem: energieintensive Threads behindern alle nachfolgenden Threads trotz gleicher Priorität $\rightarrow$ Fairnessmaß von RR (gleiche Zeitscheibenlänge T ) untergraben
|
||||||
%\begin{itemize*}
|
%\begin{itemize*}
|
||||||
\item %\includegraphics[width=\linewidth]{Assets/AdvancedOperatingSystems-round-robin-unfair.png} \end{itemize*}
|
%\item \includegraphics[width=\linewidth]{Assets/AdvancedOperatingSystems-round-robin-unfair.png} \end{itemize*}
|
||||||
%\end{itemize*}
|
%\end{itemize*}
|
||||||
\item Problem 2: energieintensive Threads niedrigerer Priorität behindern
|
\item Problem 2: energieintensive Threads niedrigerer Priorität behindern
|
||||||
später ankommende Threads höherer Priorität
|
später ankommende Threads höherer Priorität
|
||||||
|
Loading…
Reference in New Issue
Block a user