Kapitel 2
| @ -47,7 +47,7 @@ Gegenstand dieser Vorlesung: Konstruktionsrichtlinien für solche ,,High-End Bet | ||||
|         - Quality ofservice(QoS) requirements | ||||
|         - u.a. | ||||
| - ,,~ilities'' | ||||
|     - im Englischen:nichtfunktionale Eigenschaften eines Systems etc. informell auch als seine „ilities“ bezeichnet, hergeleitet von Begriffen wie | ||||
|     - im Englischen: nichtfunktionale Eigenschaften eines Systems etc. informell auch als seine „ilities“ bezeichnet, hergeleitet von Begriffen wie | ||||
|         - Stability | ||||
|         - Portability | ||||
|         - ... | ||||
| @ -153,6 +153,485 @@ Diskussion jeder Eigenschaft: (Bsp.: Echtzeitfähigkeit) | ||||
| 
 | ||||
| 
 | ||||
| # Sparsamkeit und Effizienz | ||||
| ## Motivation | ||||
| Sparsamkeit (Arbeitsdefinition): Die Eigenschaft eines Systems, seine Funktion mit minimalem Ressourcenverbrauchauszuüben. | ||||
| 
 | ||||
| Hintergrund: sparsamer Umgang mit einem oder mehreren Ressourcentypen = präziser: Effizienz bei Nutzung dieser Ressourcen | ||||
| 
 | ||||
| Effizienz: Der Grad, zu welchem ein System oder eine seiner Komponenten seine Funktion mit minimalem Ressourcenverbrauch ausübt. (IEEE) | ||||
| 
 | ||||
| Entwurfsentscheidungen für BS: | ||||
| 1. Wie muss bestimmter Ressourcentyp verwaltet werden, um Einsparungen     zu erzielen? | ||||
| 2. Welche Erweiterungen/Modifikationen des Betriebssystems (z.B. neue Funktionen, Komponenten, ...) sind hierfür notwendig? | ||||
| 
 | ||||
| Konkretisierung: Ressource, welche sparsam verwendet wird. | ||||
| 
 | ||||
| Beispiele: | ||||
| - mobile Geräte: Sparsamkeit mit Energie | ||||
| - kleine Geräte, eingebettete Systeme: | ||||
|   - Sparsamkeit mit weiteren Ressourcen, z.B. Speicherplatz | ||||
|   - Betriebssystem (Kernel + User Space): geringer Speicherbedarf | ||||
|   - optimale Speicherverwaltung durch Betriebssystem zur Laufzeit | ||||
| - Hardwareoptimierungen im Sinne der Sparsamkeit: | ||||
|   - Baugrößenoptimierung(Platinen-und Peripheriegerätegröße) | ||||
|   - Kostenoptimierung(kleine Caches, keine MMU, ...) | ||||
|   - massiv reduzierte HW-Schnittstellen (E/A-Geräte, Peripherie, Netzwerk) | ||||
| 
 | ||||
| Mobile und eingebettete Systeme (eine kleine Auswahl) | ||||
| - mobile Rechner-Endgeräte | ||||
|   - Smartphone, Smartwatch | ||||
|   - Laptop-/Tablet-PC | ||||
| - Weltraumfahrt und -erkundung | ||||
| - Automobile | ||||
|   - Steuerung von Motor-und Bremssystemen | ||||
|   - Fahrsicherheit | ||||
|   - Insasseninformation (und –unterhaltung) | ||||
|   - (teil-) autonomes Fahren | ||||
| - verteilte Sensornetze (WSN) | ||||
| - Chipkarten | ||||
| - Multimedia-und Unterhaltungselektronik | ||||
|   - eBookReader | ||||
|   - Spielkonsolen | ||||
|   - Digitalkameras | ||||
| 
 | ||||
| Beispiel: Weltraumerkundung | ||||
| - Cassini-Huygens (1997–2017) | ||||
|   - Radionuklidbatterien statt Solarzellen | ||||
|   - Massenspeicher: SSDs statt Magnetbänder | ||||
| - Rosetta (2004–2016) | ||||
|   - 31 Monate im Energiesparmodus | ||||
| - Opportunity (2003–2019) | ||||
|   - geplante Missionsdauer: 90 d | ||||
|   - Missionsdauer insgesamt: >> 5000 d | ||||
| - Hayabusa (2003–2010) | ||||
|   - Beschädigung der Energieversorgung | ||||
|   - Energiesparmodus: um 3 Jahre verzögerte Rückkehr | ||||
| - Voyager 1 (1977 bis heute) | ||||
|   - erste Flugphase: periodisch 20 Monate Standby, 20 Stunden Messungen | ||||
|   - liefert seit 40 Jahren Daten | ||||
| 
 | ||||
| ## Energieeffizienz | ||||
| Hardwaremaßnahmen | ||||
| - zeitweiliges Abschalten/Herunterschalten momentan nicht benötigter | ||||
| Ressourcen, wie | ||||
| 1. Laufwerke: CD/DVD, ..., Festplatte | ||||
| 2. Hauptspeicherelemente | ||||
| 3. (integrierte/externe) Peripherie: Monitor, E/A-Geräte, ... | ||||
| 
 | ||||
| Betriebssystemmechanismen | ||||
| 1. Dateisystem-E/A:energieeffizientes Festplatten-Prefetching(2.2.1) | ||||
| 2. CPU-Scheduling: energieeffizientes Scheduling(2.2.2) | ||||
| 3. Speicherverwaltung:minimale Leistungsaufnahme durchSpeicherzugriffe mittels Lokalitätsoptimierung [DGMB07] | ||||
| 4. Netzwerk:energiebewusstes Routing | ||||
| 5. Verteiltes Rechnen auf Multicore-Prozessoren: temperaturabhängige Lastverteilung | ||||
| 6. ... | ||||
| 
 | ||||
| ### Energieeffiziente Dateizugriffe | ||||
| Hardwarebedingungen: Magnetplatten (HDD), Netzwerkgeräte, DRAM-ICs,... sparen nur bei relativ langen Inaktivitätsintervallen Energie. | ||||
| 
 | ||||
| - Aufgabe: Erzeugen kurzer, intensiver Zugriffsmuster $\rightarrow$ lange Inaktivitätsintervalle (für alle Geräte mit geringem Energieverbrauch im Ruhezustand) | ||||
| - Beobachtung bei HDD-Geräten: i.A. vier Zustände mit absteigendem Energieverbrauch: | ||||
|     1. Aktiv: einziger Arbeitszustand | ||||
|     2. Idle (Leerlauf): Platte rotiert, aber Plattenelektronik teilweise abgeschaltet | ||||
|     3. Standby: Rotation abgeschaltet | ||||
|     4. Sleep: gesamte restliche Elektronik abgeschaltet | ||||
| - ähnliche, noch stärker differenzierte Zustände bei DRAM (vgl. [DGMB07] ) | ||||
| 
 | ||||
| Energiezustände beim Betrieb von Festplatten: | ||||
| -  | ||||
| - Schlussfolgerung: durch geringe Verlängerungen des idle - Intervalls kann signifikant der Energieverbrauch reduziert werden. | ||||
| 
 | ||||
| #### Prefetching-Mechanismus | ||||
| - Prefetching („Speichervorgriff“, vorausschauendes Lesen) & Caching | ||||
|   - Standard-Praxis bei moderner Datei-E/A | ||||
|   - 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) | ||||
|   - Ziel: Performanzverbesserungdurch Durchsatzerhöhung u. Latenzzeit-Verringerung | ||||
|   - Idee: Vorziehen möglichst vieler E/A-Anforderungen an Festplatte + zeitlich gleichmäßige Verteilung der verbleibenden | ||||
|   - Umsetzung: Caching (Zwischenspeichern) dieser vorausschauend gelesenen Blöcke in ungenutzten Hauptspeicherseitenrahmen ( pagecache ) | ||||
| - Folge: Inaktivitätsintervalle überwiegend sehr kurz $\rightarrow$ Energieeffizienz ...? | ||||
| - Zugriffsoperation: (durch Anwendung) | ||||
|   - access(x) ... greife (lesend/schreibend) auf den Inhalt von Festplattenblock x im Page Cache zu | ||||
| - Festplattenoperationen: | ||||
|   - fetch(x) ... hole Block x nach einem access(x) von Festplatte | ||||
|   - prefetch(x) ... hole Block x ohne access(x) von Festplatte | ||||
|   - 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 | ||||
| - Beispiel für solche Strategien: Anwendung ... | ||||
|   - mit Datenblock-Referenzstrom A, B, C, D, E, F, G, ... | ||||
|   - mit konstanter Zugriffsdauer: 10 Zeiteinheiten je Blockzugriff | ||||
|   - Cache-Kapazität: 3 Datenblöcke | ||||
|   - Zeit zum Holen eines Blocks bei Cache-Miss: 1 Zeiteinheit | ||||
| - Beispiel: Traditionelles Prefetching | ||||
|   - Fetch-on-demand-Strategie (kein vorausschauendes Lesen) | ||||
|   - Strategie entsprechend Prefetching- Regeln nach Cao et al. [CFKL95] (= traditionelle Disk-Prefetching- Strategie) | ||||
|   - traditionelle Prefetching-Strategie: bestimmt | ||||
|     - wann ein Datenblock von der Platte zu holen ist (HW-Zustand aktiv ) | ||||
|     - welcher Block zu holen ist | ||||
|     - welcher Block zu ersetzen ist | ||||
|   - Regeln für diese Strategie: | ||||
|     1. Optimales Prefetching: Jedes _prefetch_ sollte den nächsten Block im Referenzstrom in den Cache bringen, der noch nicht dort ist. | ||||
|     2. Optimales Ersetzen: Bei jedem ersetzenden _prefetch_ sollte der Block überschrieben werden, der am spätesten in der Zukunft wieder benötigt wird. | ||||
|     3. „Richte keinen Schaden an“: Überschreibe niemals Block A um Block B zu holen, wenn A vor B benötigt wird. | ||||
|     4. Erste Möglichkeit: Führe nie ein ersetzendes _prefetch_ aus, wenn dieses schon vorher hätte ausgeführt werden können. | ||||
| - Energieeffizientes Prefetching | ||||
|   - Optimale Ersetzungsstrategie und 3 unterschiedliche Prefetching-Strategien: | ||||
|   - Fetch-on-demand-Strategie: | ||||
|     - Laufzeit: 66 ZE für access(A) ... access(F) , 7 Cache-Misses | ||||
|     - Disk-Idle-Zeit: 6 Intervalle zu je 10 ZE | ||||
|   - Strategie entsprechend Prefetching-Regeln [CFKL95] (traditionelle Disk-Prefetching-Strategie): | ||||
|     - Laufzeit: 61 ZE für access(A) ... access(F) , 1 Cache-Miss | ||||
|     - Disk-Idle-Zeit: 5 Intervalle zu je 9 ZE und 1 Intervall zu 8 ZE (= 53 ZE) | ||||
|   - Energieeffiziente Prefetching-Strategie, die versucht Länge der Disk-Idle-Intervalle zu maximieren: | ||||
|     - gleiche Laufzeit und gleiche Anzahl Cache-Misses wie traditionelles Prefetching | ||||
|     - Disk-Idle-Zeit: 2 Intervalle zu 27 bzw. 28 ZE (= 55 ZE) | ||||
| - Auswertung: Regeln für energieeffiziente Prefetching-Strategie nach Papathanasiou elal.: [PaSc04] | ||||
|   1. Optimales Prefetching: Jedes _prefetch_ sollte den nächsten Block im Referenzstrom in den Cache bringen, der noch nicht dort ist. | ||||
|   2. Optimales Ersetzen: Bei jedem ersetzenden _prefetch_ sollte der Block überschrieben werden, der am spätesten in der Zukunft wieder benötigt wird. | ||||
|   3. „Richte keinen Schaden an“: Überschreibe niemals Block A um Block B zu holen, wenn A vor B benötigt wird. | ||||
|   4. Maximiere Zugriffsfolgen: Führe immer dann nach einem _fetch_ oder _prefetch_ ein weiteres _prefetch_ aus, wenn Blöcke für eine Ersetzung geeignet sind. (i.S.v. Regel 3) | ||||
|   5. Beachte Idle-Zeiten: Unterbrich nur dann eine Inaktivitätsperiode durch ein _prefetch_ , falls dieses sofort ausgeführt werden muss, um einen Cache-Miss zu vermeiden. | ||||
| 
 | ||||
| Allgemeine Schlussfolgerungen | ||||
| 1. Hardware-Spezifikation nutzen: Modi, in denen wenig Energie verbraucht wird | ||||
| 2. Entwicklung von Strategien, die langen Aufenthalt in energiesparenden Modi ermöglichen , und dabei Leistungsparameter in vertretbarem Umfang reduzieren | ||||
| 3. Implementieren dieser Strategien in Betriebssystemmechanismen zur Ressourcenverwaltung | ||||
| 
 | ||||
| ### Energieeffizientes Prozessormanagement | ||||
| Hardware-Gegebenheiten | ||||
| - z.Zt. meistgenutzte Halbleitertechnologie für Prozessor-Hardware: CMOS ( Complementary Metal Oxide Semiconductor) | ||||
| - Komponenten für Energieverbrauch: $P = P_{switching} + P_{leakage} + ...$ | ||||
|   - $P_{switching}$: für Schaltvorgänge notwendige Leistung | ||||
|   - $P_{leakage}$: Verlustleistung durch verschiedene Leckströme | ||||
|   - ...: weitere Einflussgrößen (technologiespezifisch) | ||||
| 
 | ||||
| #### Hardwareseitige Maßnahmen | ||||
| Schaltleistung: $P_{switching}$ | ||||
| - Energiebedarf kapazitiver Lade-u. Entladevorgänge während des Schaltens | ||||
| - für momentane CMOS-Technologie i.A. dominanter Anteil am Energieverbrauch | ||||
| - Einsparpotenzial: Verringerung von | ||||
|   1. Versorgungsspannung (quadratische Abhängigkeit!) | ||||
|   2. Taktfrequenz | ||||
| - Folgen: | ||||
|   1. längere Schaltvorgänge | ||||
|   2. größere Latenzzwischen Schaltvorgängen | ||||
| - Konsequenz: Energieeinsparung nur mit Qualitätseinbußen(direkt o. indirekt) möglich | ||||
|   - Anpassung des Lastprofils ( Zeit-Last-Kurve? Fristen kritisch? ) | ||||
|   - Beeinträchtigung der Nutzererfahrung( Reaktivität kritisch? Nutzungsprofil? ) | ||||
| 
 | ||||
| Verlustleistung: $P_{leakage}$ | ||||
| - Energiebedarf baulich bedingter Leckströme | ||||
| - Fortschreitende Hardware-Miniaturisierung $\Rightarrow$ zunehmender Anteil von $P_{leakage}$ an P | ||||
| - Beispielhafte Größenordnungen zum Einsparpotenzial: | ||||
|     | Schaltkreismaße | Versorgungsspannung | $P_{leakage}/P$ | | ||||
|     | --------------- | ------------------- | --------------- | | ||||
|     | 180 nm          | 2,5 V               | 0,              | | ||||
|     | 70 nm           | 0,7 V               | 0,              | | ||||
|     | 22 nm           | 0,4 V               | > 0,5           | | ||||
| - Konsequenz: Leckströme kritisch für energiesparenden Hardwareentwurf | ||||
| 
 | ||||
| #### Regelspielraum: Nutzererfahrung | ||||
| - Nutzererwartung: wichtigstes Kriterium zur (subjektiven) Bewertung von auf einem Rechner aktiven Anwendungen durch Nutzer  $\rightarrow$ Nutzerwartung bestimmt Nutzererfahrung | ||||
| - Typ einer Anwendung | ||||
|   - entscheidet über jeweilige Nutzererwartung | ||||
|     1. Hintergrundanwendung (z.B. Compiler); von Interesse: Gesamt-Bearbeitungsdauer, Durchsatz | ||||
|     2. Echtzeitanwendung(z.B. Video-Player, MP3-Player); von Interesse: „flüssiges“ Abspielen von Video oder Musik | ||||
|     3. Interaktive Anwendung (z.B. Webbrowser); von Interesse: Reaktivität, d.h. keine (wahrnehmbare) Verzögerung zwischen Nutzer-Aktion und Rechner-Reaktion | ||||
|   - Insbesondere kritisch: Echtzeitanwendungen, interaktive Anwendungen | ||||
| 
 | ||||
| Reaktivität | ||||
| - Reaktion von Anwendungen | ||||
|   - abhängig von sog. Reaktivität des Rechnersystems ≈ durchschnittliche Zeitdauer, mit der Reaktion eines Rechners auf eine (Benutzerinter-) Aktion erfolgt | ||||
| - Reaktivität: von Reihe von Faktoren abhängig, z.B.: | ||||
|   1. von **Hardware** an sich | ||||
|   2. von **Energieversorgung** der Hardware (wichtig z.B. Spannungspegel an verschiedenen Stellen) | ||||
|   3. von **Software-Gegebenheiten** (z.B. Prozess-Scheduling, Speichermanagement, Magnetplatten-E/A-Scheduling, Vorgänge im Fenstersystem, Arten des Ressourcen-Sharing usw.) | ||||
| 
 | ||||
| Zwischenfazit: Nutzererfahrung | ||||
| - bietet Regelspielraum für Hardwareparameter ( $\rightarrow$ Schaltleistung) $\rightarrow$ Versorgungsspannung, Taktfrequenz | ||||
| - Betriebssystemmechanismen zum energieeffizienten Prozessormanagement müssen mit Nutzererfahrung(jeweils erforderlicher Reaktivität) ausbalanciert werden (wie solche Mechanismen wirken: 2.2.3) | ||||
| - Schnittstelle zu anderen NFE: | ||||
|   - Echtzeitfähigkeit | ||||
|   - Performanz | ||||
|   - Usability | ||||
|   - ... | ||||
| 
 | ||||
| #### Energieeffizientes Scheduling | ||||
| - so weit besprochen: Beschränkung des durchschnittlichen Energieverbrauchs eines Prozessors | ||||
| - offene Frage zum Ressourcenmultiplexing: Energieverbrauch eines Threads/Prozesses? | ||||
| - Scheduling-Probleme beim Energiesparen: | ||||
|   1. Fairness (der Energieverteilung)? | ||||
|   2. Prioritätsumkehr? | ||||
| - Beispiel: Round Robin (RR) mit Prioritäten (Hoch, Mittel, Niedrig) | ||||
| - Problem 1: Unfaire Energieverteilung | ||||
|   - Beschränkung des Energieverbrauchs (durch Qualitätseinbußen, schlimmstenfalls Ausfall)ab einem oberen Schwellwert $E_{max}$ | ||||
|   - Problem: energieintensive Threads behindern alle nachfolgenden Threads trotz gleicher Priorität  $\rightarrow$ Fairnessmaß von RR (gleiche Zeitscheibenlänge T ) untergraben | ||||
|     -  | ||||
| - Problem 2: energieintensive Threads niedrigerer Priorität behindern später ankommende Threads höherer Priorität | ||||
|     -  | ||||
| 
 | ||||
| Energiebewusstes RR: Fairness | ||||
| - Begriffe: | ||||
|   - $E_i^{budget}$ ... Energiebudget von $t_i$ | ||||
|   - $E_i^{limit}$ ... Energielimit von $t_i$ | ||||
|   - $P_{limit}$ ... Leistungslimit: maximale Leistungsaufnahme [Energie/Zeit] | ||||
|   - $T$ ... resultierende Zeitscheibenlänge | ||||
| - Strategie 1: faire Energieverteilung (einheitliche Energielimits) | ||||
|   -  | ||||
|   - $1\leq i\leq 4: E_i^{limit} = P_{limit}* T$ | ||||
|   - (Abweichungen = Wichtung der Prozesse $\rightarrow$ bedingte Fairness) | ||||
| 
 | ||||
| Energiebewusstes RR: Reaktivität | ||||
| - faire bzw. gewichtete Aufteilung begrenzter Energie optimiert Energieeffizienz | ||||
| - Problem: lange, wenig energieintensive Threads verzögern Antwort-und Wartezeiten kurzer, energieintensiver Threads | ||||
|   - Lösung im Einzelfall: Wichtung per $E_i^{limit}$ | ||||
|   - globale Reaktivität ( $\rightarrow$ Nutzererfahrung bei interaktiven Systemen) ...? | ||||
| - Strategie 2: maximale Reaktivität (  $\rightarrow$ klassisches RR) | ||||
|   -  | ||||
| 
 | ||||
| Energiebewusstes RR: Reaktivität und Fairness | ||||
| - Problem: sparsame Threads werden bestraft durch Verfallen des ungenutzten Energiebudgets | ||||
| - Idee: Ansparen von Energiebudgets  $\rightarrow$ mehrfache Ausführung eines Threads innerhalb einer Scheduling-Periode | ||||
| - Strategie 3: Reaktivität, dann faire Energieverteilung | ||||
|   -  | ||||
| 
 | ||||
| ##### Implementierungsfragen | ||||
| - Scheduling-Zeitpunkte? | ||||
|   - welche Accounting-Operationen (Buchführung über Budget)? | ||||
|   - wann Accounting-Operationen? | ||||
|   - wann Verdrängung? | ||||
| - Datenstrukturen? | ||||
|   - ... im Scheduler  $\rightarrow$ Warteschlange(n)? | ||||
|   - ... im Prozessdeskriptor? | ||||
| - Kosten ggü. klassischem RR? (durch Prioritäten...?) | ||||
| 
 | ||||
| - Pro: | ||||
|   - Optimierung der Energieverteilung nach anwendungsspezifischen Schedulingzielen( $\rightarrow$ Strategien) | ||||
|   - Berücksichtigung von prozessspezifischen Energieverbrauchsmustern möglich:fördert Skalierbarkeit i.S.v. Lastadaptivität, indirekt auch Usability ( $\rightarrow$ Nutzererfahrung) | ||||
| - Kontra: | ||||
|   - zusätzliche sekundäre Kosten: Energiebedarf des Schedulers, Energiebedarf zusätzlicher Kontextwechsel, Implementierungskosten (Rechenzeit, Speicher) | ||||
|   - Voraussetzung hardwareseitig: Monitoring des Energieverbrauchs (erforderliche/realisierbare Granularität...? sonst: Extrapolation?) | ||||
| - **generelle Alternative:** energieintensive Prozesse verlangsamen  $\rightarrow$ Regelung der CPU-Leistungsparameter (Versorgungsspannung) (auch komplementär zum Schedulingals Maßnahme nach Energielimit-Überschreitung) | ||||
| - Beispiel: Synergie nichtfunktionaler Eigenschaften | ||||
|   - Performanz nur möglich durch Parallelität $\rightarrow$ Multicore-Hardware | ||||
|   - Multicore-Hardware nur möglich mit Lastausgleich und Lastverteilungauf mehrere CPUs | ||||
|   - dies erfordert ebenfalls Verteilungsstrategien: „Energy-aware Scheduling“ (Linux-Strategie zur Prozessorallokation -nicht zeitlichem Multiplexing!) | ||||
| 
 | ||||
| ### Systemglobale Energieeinsparungsmaßnahmen | ||||
| - Traditionelle Betriebssysteme: Entwurf so, dass zu jedem Zeitpunkt Spitzen-Performanzangestrebt | ||||
| - Beobachtungen: | ||||
|   - viele Anwendungen benötigen keine Spitzen-Performanz | ||||
|   - viele Hardware-Komponenten verbringen Zeit in Leerlaufsituationen bzw. in Situationen, wo keine Spitzen-Performanz erforderlich | ||||
| - Konsequenz (besonders für mobile Systeme) : | ||||
|   - Hardware mit Niedrigenergiezuständen(Prozessoren und Magnetplattenlaufwerke, aber auch DRAM, Netzwerkschnittstellen, Displays, ...) | ||||
|   - somit kann Betriebssystem **Energie-Management** realisieren | ||||
| 
 | ||||
| #### Hardwaretechnologien | ||||
| - DPM: Dynamic Power Management | ||||
|   - versetzt leerlaufende/unbenutzte Hardware-Komponenten selektiv in Zustände mit niedrigem Energieverbrauch | ||||
|   - Zustandsübergänge durch Power-Manager (in Hardware) gesteuert, dem bestimmte _DPM-_ Strategie (Firmware) zugrunde liegt, um gutes Verhältnis zwischen Performanz/Reaktivität und Energieeinsparung zu erzielen | ||||
| - DVS: Dynamic Voltage Scaling | ||||
|   - effizientes Verfahren zur dynamischen Regulierungvon Taktfrequenz gemeinsammit Versorgungsspannung | ||||
|   - Nutzung quadratischer Abhängigkeitder dynamischen Leistung von Versorgungsspannung | ||||
|   - Steuerung/Strategien: Softwareunterstützungnotwendig! | ||||
| 
 | ||||
| Dynamisches Energiemanagement (DPM)- Strategien (Klassen) bestimmt, wann und wie lange eine Hardware-Komponente sich in Energiesparmodusbefinden sollte | ||||
| - Greedy: Hardware-Komponente sofort nach Erreichen des Leerlaufs in Energiesparmodus, „Aufwecken“ durch neue Anforderung | ||||
| - Time-out: Energiesparmodus erst nachdem ein definiertes Intervall im Leerlauf, „Aufwecken“ wie bei Greedy-Strategien | ||||
| - Vorhersage: Energiesparmodus sofort nach Erreichen des Leerlaufs, wenn Heuristik vorhersagt,dass Kosten gerechtfertigt | ||||
| - Stochastisch: Energiesparmodus auf Grundlage eines stochastischen Modells | ||||
| 
 | ||||
| Spannungsskalierung (DVS) | ||||
| - Ziel: Unterstützung von DPM-Strategien durch Maßnahmen auf Ebene von Compiler, Betriebssystem und Applikationen: | ||||
|   - **Compiler** | ||||
|     - kann Informationen zur Betriebssystem-Unterstützung bezüglich Spannungs-Einstellung in Anwendungs-Code einstreuen, | ||||
|     - damit zur Laufzeit Informationen über jeweilige Arbeitslast verfügbar | ||||
| - **Betriebssystem (prädiktives Energiemanagement)** | ||||
|     - kann Benutzung verschiedener Ressourcen (Prozessor usw.) beobachten | ||||
|     - kann darüber Vorhersagen tätigen | ||||
|     - kann notwendigen Performanzbereich bestimmen | ||||
| - **Anwendungen** | ||||
|     - können Informationen über jeweils für sie notwendige Performanz liefern | ||||
| - $\rightarrow$ Kombination mit energieefizientemScheduling! | ||||
| 
 | ||||
| ## Speichereffizienz | ||||
| - ... heißt: Auslastung des verfügbaren Speichers | ||||
|   - oft implizit: Hauptspeicherauslastung (memoryfootprint) | ||||
|   - besonders für kleine/mobile Systeme: Hintergrundspeicherauslastung | ||||
| - Maße zur Konkretisierung: | ||||
|   - zeitliche Dimension: Maximum vs. Summe genutzten Speichers? | ||||
|   - physischer Speicherverwaltung?  $\rightarrow$ Belegungsanteil pAR | ||||
|   - virtuelle Speicherverwaltung?  $\rightarrow$ Belegungsanteil vAR | ||||
| - Konsequenzen für Ressourcenverwaltung durch BS: | ||||
|   - Taskverwaltung (Accounting, Multiplexing, Fairness, ...) | ||||
|   - Programmiermodell, API (besonders: dynamische Speicherreservierung) | ||||
|   - Sinnfrage und ggf. Strategien virtueller Speicherverwaltung (VMM) | ||||
| - Konsequenzen für Betriebssystem selbst: | ||||
|   - minimaler Speicherbedarfdurch Kernel | ||||
|   - minimale Speicherverwaltungskosten (durch obige Aufgaben) | ||||
| 
 | ||||
| ### Hauptspeicherauslastung | ||||
| -  | ||||
| 
 | ||||
| Problem: externe Fragmentierung | ||||
| -  | ||||
| - Lösungen: | ||||
|   - First Fit, Best Fit, WorstFit, Buddy | ||||
|   - Relokation | ||||
| - Kompromissloser Weg: kein Multitasking! | ||||
| 
 | ||||
| Problem: interne Fragmentierung | ||||
| -  | ||||
| - Lösung: | ||||
|   - Seitenrahmengröße verringern | ||||
|   - Tradeoff: dichter belegte vAR $\rightarrow$ größere Datenstrukturen für Seitentabellen! | ||||
| 
 | ||||
| - direkter Einfluss des Betriebssystems auf Hauptspeicherbelegung: | ||||
|   - $\rightarrow$ Speicherbedarf des Kernels | ||||
|   - statische(Minimal-) Größe des Kernels (Anweisungen + Daten) | ||||
|   - dynamischeSpeicherreservierung durch Kernel | ||||
|   - bei Makrokernel: Speicherbedarf von Gerätecontrollern (Treibern)! | ||||
| 
 | ||||
| weitere Einflussfaktoren: Speicherverwaltungskosten | ||||
| - VMM: Seitentabellengröße $\rightarrow$ Mehrstufigkeit | ||||
| - Metainformationen über laufende Programme: Größe von Taskkontrollblöcken( Prozess-/Threaddeskriptoren ...) | ||||
| - dynamische Speicherreservierung durch Tasks | ||||
| 
 | ||||
| ##### Beispiel 1: sparsam | ||||
| Prozesskontrollblock (PCB, Metadatenstruktur des Prozessdeskriptors) eines kleinen Echtzeit-Kernels („DICK“): | ||||
| ```cpp | ||||
| // Process Control Block (PCB) | ||||
| struct pcb { | ||||
|   char name[MAXLEN +1]; // process name | ||||
|   proc (*addr)(); // first instruction | ||||
|   int type; // process type | ||||
|   int state; // process state | ||||
|   long dline; // absolute deadline | ||||
|   int period; // period | ||||
|   int prt; // priority | ||||
|   int wcet; // worst-case execution time | ||||
|   float util; // processor utilization | ||||
|   int *context; | ||||
|   proc next; | ||||
|   proc prev; | ||||
| }; | ||||
| ``` | ||||
| 
 | ||||
| ##### Beispiel 2: eher nicht sparsam | ||||
| Linux Prozesskontrollblock (taskstruct): | ||||
| ```cpp | ||||
| struct task_struct { | ||||
|   volatile long state; /* - 1 unrunnable, 0 runnable, >0 stopped */ | ||||
|   void *stack; | ||||
|   atomic_t usage; | ||||
|   unsigned int flags; /* per process flags, defined below */ | ||||
|   unsigned int ptrace; | ||||
| #ifdef CONFIG_SMP | ||||
|   struct llist_node wake_entry; | ||||
|   int on_cpu; | ||||
| #endif | ||||
|   int on_rq; | ||||
| // SCHEDULING INFORMATION | ||||
|   int prio, static_prio, normal_prio; | ||||
|   unsigned int rt_priority; | ||||
|   const struct sched_class *sched_class; | ||||
| // Scheduling Entity | ||||
|   struct sched_entity se; | ||||
|   struct sched_rt_entity rt; | ||||
| #ifdef CONFIG_CGROUP_SCHED | ||||
|   struct task_group *sched_task_group; | ||||
| #endif | ||||
| #ifdef CONFIG_PREEMPT_NOTIFIERS | ||||
|   struct hlist_head preempt_notifiers; /* list of struct preempt_notifier */ | ||||
| #endif | ||||
|   unsigned char fpu_counter; | ||||
| #ifdef CONFIG_BLK_DEV_IO_TRACE | ||||
|   unsigned int btrace_seq; | ||||
| #endif | ||||
|   unsigned int policy; | ||||
|   cpumask_t cpus_allowed; | ||||
| #ifdef CONFIG_PREEMPT_RCU | ||||
|   int rcu_read_lock_nesting; | ||||
|   char rcu_read_unlock_special; | ||||
|   struct list_head rcu_node_entry; | ||||
|   struct rcu_node *rcu_blocked_node; | ||||
| #endif /* #ifdef CONFIG_TREE_PREEMPT_RCU */ | ||||
| #ifdef CONFIG_RCU_BOOST | ||||
|   struct rt_mutex *rcu_boost_mutex; | ||||
| #endif /* #ifdef CONFIG_RCU_BOOST */ | ||||
| #if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT) | ||||
|   struct sched_info sched_info; | ||||
| #endif | ||||
|   struct list_head tasks; | ||||
| #ifdef CONFIG_SMP | ||||
|   struct plist_node pushable_tasks; | ||||
| #endif | ||||
| // virtual address space reference | ||||
|   struct mm_struct *mm, *active_mm; | ||||
| #ifdef CONFIG_COMPAT_BRK | ||||
|   unsigned brk_randomized:1; | ||||
| #endif | ||||
| #if defined(SPLIT_RSS_COUNTING) | ||||
|   struct task_rss_stat rss_stat; | ||||
| #endif | ||||
| /* task state */ | ||||
|   int exit_state; | ||||
|   int exit_code, exit_signal; | ||||
|   int pdeath_signal; /* The signal sent when the parent dies */ | ||||
|   unsigned int jobctl; /* JOBCTL_*, siglock protected */ | ||||
|   unsigned int personality; | ||||
|   unsigned did_exec:1; | ||||
|   unsigned in_execve:1;/* Tell the LSMs that the process is doing an * execve */ | ||||
|   unsigned in_iowait:1; | ||||
| /* Revert to default priority/policy when forking */ | ||||
|   unsigned sched_reset_on_fork:1; | ||||
|   unsigned sched_contributes_to_load:1; | ||||
| #ifdef CONFIG_GENERIC_HARDIRQS | ||||
| /* IRQ handler threads */ | ||||
|   unsigned irq_thread; | ||||
| #endif | ||||
|   pid_t pid; | ||||
|   pid_t tgid; | ||||
| #ifdef CONFIG_CC_STACKPROTECTOR | ||||
| /* Canary value for the -fstack-protector gcc feature */ | ||||
|   unsigned long stack_canary; | ||||
| #endif | ||||
| // Relatives | ||||
|   struct task_struct __rcu *real_parent; /* real parent process */ | ||||
|   struct task_struct __rcu *parent; /* recipient of SIGCHLD, wait4() reports */ | ||||
| /* children/sibling forms the list of my natural children */ | ||||
|   struct list_head children; /* list of my children */ | ||||
|   struct list_head sibling; /* linkage in my parent's children list */ | ||||
|   struct task_struct *group_leader; /* threadgroup leader */ | ||||
|   struct list_head ptraced; | ||||
|   struct list_head ptrace_entry; | ||||
| /* PID/PID hash table linkage. */ | ||||
|   struct pid_link pids[PIDTYPE_MAX]; | ||||
|   struct list_head thread_group; | ||||
|   struct completion *vfork_done; /* for vfork() */ | ||||
|   int __user *set_child_tid; | ||||
| ... | ||||
|   unsigned long timer_slack_ns; | ||||
|   unsigned long default_timer_slack_ns; | ||||
|   struct list_head *scm_work_list; | ||||
| #ifdef CONFIG_FUNCTION_GRAPH_TRACER | ||||
| /* Index of current stored address in ret_stack */ | ||||
|   int curr_ret_stack; | ||||
| /* Stack of return addresses for return function tracing */ | ||||
|   struct ftrace_ret_stack *ret_stack; | ||||
| /* time stamp for last schedule */ | ||||
|   unsigned long long ftrace_timestamp; | ||||
| ... | ||||
| ``` | ||||
| 
 | ||||
| ### Hintergrundspeicherauslastung | ||||
| Einflussfaktoren des Betriebssystems: | ||||
| - statische Größe des Kernel-Images, welches beim Bootstrapping gelesen wird | ||||
| - statische Größe von Programm-Images (Standards wie ELF) | ||||
| - statisches vs. dynamisches Einbinden von Bibliotheken: Größe von Programmdateien | ||||
| - VMM: Größe des Auslagerungsbereichs (inkl. Teilen der Seitentabelle!) für Anwendungen | ||||
| - Modularisierung (zur Kompilierzeit) des Kernels: gezielte Anpassung an Einsatzdomäne möglich | ||||
| - Adaptivität (zur Kompilier-und Laufzeit) des Kernels: gezielte Anpassung an sich ändernde Umgebungsbedingungen möglich ($\rightarrow$ Cassini-Huygens-Mission) | ||||
| 
 | ||||
| 
 | ||||
| # Robustheit und Verfügbarkeit | ||||
| # Sicherheit | ||||
| # Echtzeitfähigkeit | ||||
| @ -162,10 +641,30 @@ Diskussion jeder Eigenschaft: (Bsp.: Echtzeitfähigkeit) | ||||
| 
 | ||||
| 
 | ||||
| # Literatur | ||||
| 
 | ||||
| - NFE in Betriebssystemen | ||||
|     - Eeles, Peter; Cripps, Peter: The Process of Software Architecting | ||||
| - Funktionale Eigenschaften eines Betriebssystem | ||||
|     - Tanebaum, Andrews; Bos, Herbert: Modern Operating Systems | ||||
|     - Tanebaum, Andrews; Woodhull, Alberts: Operating Systems Design and Implementation | ||||
|     - Stallings, William: Operating Systems: Internals and Design Principles | ||||
|     - Stallings, William: Operating Systems: Internals and Design Principles | ||||
| - Energieeffizienz | ||||
|   - GUPTA, RAJESHK.; IRANI, SANDY; SHUKLA, SANDEEPK.; SHUKLA, SANDEEPK.: Formal Methods for Dynamic Power Management | ||||
|   - RANGANATHAN, PARTHASARATHY: Recipe for efficiency: principles of power-aware computing | ||||
|   - SIMUNIC, TAJANA; BENINI, LUCA; GLYNN, PETER; DEMICHELI, GIOVANNI: Dynamic Power Management for Portable Systems | ||||
| - Effiziente Hauptspeicherverwaltung | ||||
|   - DINIZ, BRUNO; GUEDES, DORGIVAL; MEIRA, WAGNER, JR.; BIANCHINI, RICARDO: Limiting the Power Consumption of Main Memory | ||||
| - Traditionelles Festplatten-Prefetching | ||||
|   - CAO, PEI; FELTEN, EDWARDW.; KARLIN, ANNAR.; LI, KAI: A Study ofIntegrated Prefetching and Caching Strategies | ||||
| - Effizienter Betrieb von Festplatten | ||||
|   - PAPATHANASIOU, ATHANASIOSE.; SCOTT, MICHAELL.: Energy Efficient Prefetching and Caching | ||||
| - Energieeffizientes Scheduling | ||||
|   - KLEE, CHRISTOPH: Design and Analysis of Energy-Aware Scheduling Policies | ||||
| - Energieeffiziente Betriebssysteme | ||||
|   - LANG, CLEMENS: Components for Energy-Efficient Operating Systems | ||||
|   - YAN, LE; ZHONG, LIN; JHA, NIRAJK.: Towards a Responsive, Yet Power-efficient, Operating System: A Holistic Approach | ||||
|   - YAN, LE; ZHONG, LIN; JHA, NIRAJK.: User-perceived Latency Driven Voltage Scaling for Interactive Applications | ||||
| - Eingebettete Systeme | ||||
|   - MANLEY, JOHNH.: Embedded Systems, MARCINIAK, J. J.(Hrsg.) | ||||
| - TinyOS | ||||
|   - KELLNER, SIMON; BELLOSA, FRANK: Energy Accounting Support in TinyOS | ||||
|   - KELLNER, SIMON: Flexible Online Energy Accounting in TinyOS | ||||
							
								
								
									
										
											BIN
										
									
								
								Assets/AdvancedOperatingSystems-energiebewisstes-rr-2.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 23 KiB | 
| After Width: | Height: | Size: 23 KiB | 
							
								
								
									
										
											BIN
										
									
								
								Assets/AdvancedOperatingSystems-energiebewusstes-rr.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 22 KiB | 
							
								
								
									
										
											BIN
										
									
								
								Assets/AdvancedOperatingSystems-energiezustände-festplatte.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 35 KiB | 
							
								
								
									
										
											BIN
										
									
								
								Assets/AdvancedOperatingSystems-externe-fragmentierung.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 18 KiB | 
							
								
								
									
										
											BIN
										
									
								
								Assets/AdvancedOperatingSystems-interne-fragmentierung.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 46 KiB | 
							
								
								
									
										
											BIN
										
									
								
								Assets/AdvancedOperatingSystems-prioritätsumkehr.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 37 KiB | 
							
								
								
									
										
											BIN
										
									
								
								Assets/AdvancedOperatingSystems-round-robin-unfair.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 32 KiB | 
							
								
								
									
										
											BIN
										
									
								
								Assets/AdvancedOperatingSystems-speicherverwaltung.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 39 KiB |