Prefetching gekürzt

This commit is contained in:
WieErWill 2022-02-20 11:57:13 +01:00
parent c9f5d020b4
commit dbf21b0ffd
2 changed files with 64 additions and 105 deletions

Binary file not shown.

View File

@ -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