Technische Informatik 1 6 – Speicherhierarchie © Lothar Thiele Computer Engineering and Networks Laboratory
Arbeitsprinzipien
6 ‐ 2
Übersicht Speicherhierarchie Ziele: Dem Benutzer möglichst viel Speicherkapazität zur Verfügung stellen. Möglichst kleine Zugriffszeit. Möglichst kostengünstig.
SSD (solid state drive) HDD (hard disk drive) Zugriffszeit 0.25‐0.5ns 0.5‐2.5ns 50‐70ns 0.1‐20ms Grösse ~ 1kByte ~ 16MByte ~ 32GByte ~ 1000GByte Kosten/Mbyte 0.5 – 1.0$ 0.01–0.02$ 0.00005–0.0005$ 6 ‐ 3
Plattenspeicher (Hard Disk Drive)
6 ‐ 4
DRAM Architektur DRAM (dynamisch)
SRAM (statisch)
6 ‐ 5
Technologische Trends DRAM (dynamic random access memory) Speicherbausteine: Zugriffszeit sinkt mit etwa 6% pro Jahr Speicherkapazität steigt mit etwa 45% pro Jahr
6 ‐ 6
Technologische Trends Zugriffszeit DRAM vs. Zykluszeit Prozessor
Lücke
6 ‐ 7
Ebenen der Speicherhierarchie verantwortlich für Übertragung Blockgrösse Zugriffszeit
Cache Architektur
schneller
Programm, Compiler 1‐8 Bytes, 1 Taktzyklus Cache Steuerung (Hardware) 16‐128 Bytes, 10‐1000 Taktzyklen
Hauptspeicher Betriebssystem (Software) 4000 ‐ 64000 Bytes, 10M‐100 M Taktzyklen
sekundärer Speicher Anwendungsprogramm (Software) Mbytes, ‐
virtueller Speicher
CD/DVD/Magnetband
grösser
6 ‐ 8
Lokalität Die Effizienz der hierarchischen Speicherarchitektur basiert auf dem Prinzip der Lokalität: Programme greifen in einem kleinen Zeitintervall auf einen relativ kleinen, noch nicht referenzierten Teil des Adressraumes zu. Dies gilt sowohl für Instruktionen als auch für Daten. Es werden zwei unterschiedliche Arten der Lokalität unterschieden: Zeitliche Lokalität: Falls ein Datum oder eine Instruktion referenziert wird, so wird sie bald wieder referenziert. Örtliche Lokalität: Falls ein Datum oder eine Instruktion referenziert wird, werden bald Daten oder Instruktionen mit nahgelegenen Adressen referenziert.
6 ‐ 9
Lokalität Zeitliche Lokalität: Falls ein Datum oder eine Instruktion referenziert wird, so wird sie bald wieder referenziert. Speichern von kürzlich benutzten Informationen näher am Prozessor, d.h. in einer oberen Ebene. Örtliche Lokalität: Falls ein Datum oder eine Instruktion referenziert wird, werden bald Daten oder Instruktionen mit nahgelegenen Adressen referenziert.
Bewege Blöcke aus aufeinanderfolgenden Daten näher zum Prozessor, falls eines von Ihnen benutzt wird.
6 ‐ 10
Arbeitsprinzipien Daten werden nur zwischen aufeinanderfolgenden Ebenen kopiert. Übertragungseinheit oder Blockgrösse (z.B. Datenblock, Seite): Die kleinste Informationseinheit, die in den zwei benachbarten Hierarchieebenen vorhanden oder nicht vorhanden sein kann. Beispiel: Cache / Hauptspeicher Adresse
Prozessor
Daten (schreiben) Daten (lesen)
6 ‐ 11
Arbeitsprinzipien 1. Datenanfrage an die obere Ebene. 2. Feststellen in der oberen Ebene, ob die gesuchten Daten vorhanden sind
Treffer (hit): Daten sind in der oberen Ebene vorhanden Fehlzugriff (miss): Daten müssen durch eine Datenanfrage aus der nächst unteren Ebene besorgt werden.
3. Weiterleiten der gesuchten Daten an die anfragende Ebene. Cache
virtueller Speicher
6 ‐ 12
Terminologie Hit‐Rate: Relativer Anteil der Speicherzugriffe, die in der oberen Ebene erfolgreich sind. Hit‐Zeit: Zugriffszeit zur oberen Ebene: Hit_Zeit = Zugriffszeit + Zeit_zur_Bestimmung_von_hit_miss
Miss‐Rate: Relativer Anteil der Speicherzugriffe, die in der oberen Ebene nicht erfolgreich sind: Miss_Rate = 1 ‐ (Hit_Rate)
Miss‐Strafe: Miss_Strafe = Zeit_zum_Finden_eines_Blocks_in_der_unteren_Ebene + Zeit_zum_Übertragen_zur_oberen_Ebene
Mittlere Zugriffszeit: Mittlere_Zugriffszeit = Hit_Zeit + Miss_Strafe ∙ Miss_Rate
6 ‐ 13
Implementierungsalternativen Wo kann ein Block platziert werden, wie wird er gefunden ? direkte Abbildung teilassoziativ vollassoziativ
Welcher Block sollte bei einem Miss ersetzt werden ? zufällig am längsten unbenutzt
Was geschieht beim Schreiben eines Blocks ? durchgängiges Schreiben zurückkopieren 6 ‐ 14
Cache Architekturen
6 ‐ 15
Direkte Abbildung
5 Bit lange Speicheradresse [4 … 0] : 32 Daten im Hauptspeicher Teiladresse [2 … 0] : Cache Index (Adresse im Cache Speicher) Teiladresse [4 … 3] : Cache Tag (Marke zur Identifikation der Datenadresse) 6 ‐ 16
Direkte Abbildung
6 ‐ 17
Beispiele direkte Abbildung Cachegrösse: Wie gross ist ein direkter Cache für 64 kByte Nutzdaten, Blockgrösse = 1 Wort = 4 Byte, byteweise Adressierung, Adresslänge 32 Bit? 64 kByte = 216 Byte = 214 Worte Cachegrösse = 214 (32 + (32 ‐ 2 ‐ 14) + 1) Bit = 803 kBit 100 kByte
Beispiel: Zugriffssequenz (8 Cacheblöcke, 32 Speicherblöcke):
6 ‐ 18
Beispiele direkte Abbildung
6 ‐ 19
Vergrösserung der Blockgrösse Cacheblock: Cachedaten, die ihren eigenen Tag besitzen. Vergrösserung der Blockgrösse: Vorteile: Ausnutzung der örtlichen Lokalität sowie effizientere Speicherung. Nachteile: weniger unabhängige Cacheblöcke im Cache und höhere Miss‐Strafe (Zeit zum Ersetzen eines Blocks ist grösser)
Speichergrösse: L Bit breite Adresse, byteweise Adressierung, Cache mit 2N Byte Nutzdaten, 2M Byte pro Block Teiladressen: [L‐1 … N] Tag, [N‐1 … M] Cache Index, [M‐1 … 0] Block+Byte offset Cachegrösse: (1 + (L‐N) + 82M) 2(N‐M) Bit = 2N Byte + (1 + L – N) 2(N‐M) Bit
6 ‐ 20
Vergrösserung der Blockgrösse Diagramm eines Caches mit direkter Abbildung, 16 kByte Nutzdaten, Blockgrösse 16 Worte, byteweise Adressierung, 32 Bit Adresslänge:
6 ‐ 21
Vergrösserung der Blockgrösse: Vorteile und Nachteile Grosse Blöcke nutzen die örtliche Lokalität besser. Auf der anderen Seite gibt es bei grossen Blockgrösse nur wenige Blöcke im Cache. Programme arbeiten nicht nur auf nebeneinanderliegenden Daten (Datencache) und springen auch zwischen verschiedenen Softwarekomponenten (Instruktionscache).
6 ‐ 22
Assoziativer Cache Probleme bei direkter Abbildung: Häufiger Miss aufgrund eines Konfliktes (mehrere Speicherblöcke werden auf einen Cacheindex abgebildet). Ungünstige festgelegte Ersetzungsstrategie bei einem Miss. Abhilfe: grösserer Cache oder mehrere Einträge pro Index (assoziativer Cache).
Assoziativer Cache: K Einträge pro Index (K‐fache Assoziativität), K direkte Caches arbeiten parallel Der Cacheindex selektiert eine Menge von Blöcken, die Tags werden mit dem entsprechenden Adressanteil parallel verglichen, die Daten werden entsprechend dem Resultat des Vergleiches selektiert.
6 ‐ 23
Vergleich von Cachestrukturen 1‐fach assoziativ
2‐fach assoziativ
4‐fach assoziativ
8‐fach assoziativ vollassoziativ
6 ‐ 24
Diagramm eines teilassoziativen Caches
6 ‐ 25
Vorteil der Assoziativität
6 ‐ 26
Ersetzungstrategien Direkte Abbildung: Jeder Speicherblock kann nur auf einen Cacheblock abgebildet werden ‐> keine Auswahl möglich
Assoziativer Cache: Jeder Speicherblock kann auf einen von K Cacheblöcken abgebildet werden; bei vollassoziativem Cache: in irgendeinen Cacheblock.
Einige Ersetzungsstrategien: Zufällige Auswahl des zu ersetzenden Blocks. Der am längsten unbenutzte Block wird ersetzt. Hardware speichert die jeweiligen Zugriffszeiten und ermittelt den ältesten Block (aufwändig).
6 ‐ 27
Schreibalternativen Was passiert beim Schreiben vom Cache? Wie werden Informationen im Cache und im Hauptspeicher konsistent gehalten? Zurückkopieren („write back“): Prozessor schreibt nur in den Cache; falls der Block bei einem Miss ersetzt wird, wird er in den Hauptspeicher kopiert. Ein “dirty bit” für jeden Cacheblock zeigt an, ob der Block zurückkopiert werden muss. Aufwändige Steuerung aber kleiner Bandbreitenbedarf zwischen Hauptspeicher und Cache. Schreibgeschwindigkeit richtet sich nach der des Caches und nicht des Hauptspeichers. Cache und Hauptspeicher können für lange Zeit inkonsistent sein (problematisch für Ein/Ausgabe von Daten und Mehrprozessor‐ und Multicoresysteme).
6 ‐ 28
Schreibalternativen Durchgängiges Schreiben („write through“): Mit jedem Schreibvorgang wird auch der Hauptspeicher beschreiben. Verlieren wir nicht den Vorteil eines Caches? Verwendung eines Pufferspeichers zwischen Prozessor und Speicher: Prozessor schreibt in Cache und Pufferspeicher; Pufferspeicher wird kontinuierlich in den Hauptspeicher übertragen. Voraussetzung: mittlere_Speicherrate