Übersicht
Hauptspeicher
1
Einleitung
2
Hauptspeicher
3
Caches, Cache-Kohärenz
Dr.-Ing. Volkmar Sieh
Einleitung Platzierungsstrategien
Institut für Informatik 3: Rechnerarchitektur Friedrich-Alexander-Universität Erlangen-Nürnberg
Ersetzungsstrategien Schreibstrategien
WS 2008/2009
Hinweise 4
Virtueller Speicher
Hauptspeicher– 1/79– 2008-10-13
Übersicht
Hauptspeicher– 2/79– 2008-10-13
Speicher
1
Einleitung
2
Hauptspeicher
3
Caches, Cache-Kohärenz
Processor-Memory-Gap:
Einleitung Platzierungsstrategien Ersetzungsstrategien Schreibstrategien Hinweise 4
Virtueller Speicher
Hauptspeicher– 3/79– 2008-10-13
Hauptspeicher– 4/79– 2008-10-13
Speicher
Speicher
Interessante Zahlen: Register SRAM DRAM Platten
Vorteile sehr schnell schnell höhere Integration billig, viel Speicher
Nachteile sehr teuer teuer, große Chips Refresh notwendig langsam, laut, mechanisch
MByte / Dollar: Kosten für Speicher Zugriffslatenzzeit: Dauer, bis das erste Byte gelesen/geschrieben wird Speicherbandbreite: Anzahl der Bytes, die maximal pro Zeiteinheit geschrieben bzw. gelesen werden können
Hauptspeicher– 5/79– 2008-10-13
Speicher
Hauptspeicher– 6/79– 2008-10-13
Speicherhierarchie
Kosten, Latenz und Bandbreite variieren sehr stark. Beispiel: Hauptspeicher: 1GByte, 125 EUR (GByte/125 EUR) 20ns ca. 512MByte/s
Festplatte: 400GByte, 275 EUR (GByte/0.69 EUR) 10ms ca. 40MByte/s
Hauptspeicher– 7/79– 2008-10-13
Hauptspeicher– 8/79– 2008-10-13
Speicherhierarchie Pentium
Speicherhierarchie
Beispiel: Pentium
kleiner, schneller Speicher nahe dem Prozessor großer, langsamer Speicher weiter entfernt Wenn Caching gut funktioniert, hat Hierarchie Zugriffszeit nahe dem schnellsten Speicher Größe nahe dem größten Speicher
Hauptspeicher– 9/79– 2008-10-13
Hierarchie-Management
Register Memory durch Compiler bzw. Assembler-Programmierer
Cache Main-Memory durch Hardware
Main-Memory Disk durch Hardware und Betriebssystem (Paging) durch Programmierer (Files)
Hauptspeicher– 11/79– 2008-10-13
Hauptspeicher– 10/79– 2008-10-13
Caches - Begriffe
Hit/Treffer: wenn auf ein Datum zugegriffen wird, das im Cache vorhanden ist Miss/Fehler: wenn auf ein Datum zugegriffen wird, das nicht im Cache vorhanden ist Hit-/Treffer-Rate: Wahrscheinlichkeit, dass ein benötigtes Datum im Cache vorhanden ist Miss-/Fehler-Rate: 1 − Hit − Rate
Hauptspeicher– 12/79– 2008-10-13
Caches - Begriffe
Mittlere Effektive Zugriffszeit Zugriffszeiten Annahmen:
Hit-Time: Zeitdauer, bis Datum im Hit-Fall geliefert wird
i = 1, 2, ..., n Hierarchiestufen
Miss-Penalty: Zeit, die im Miss-Fall zusätzlich gebraucht wird
Stufe i − 1 ist schneller und kleiner als Stufe i
Hinweis: Hit-Time « Miss-Penalty
Informationen in Stufe i − 1 befinden sich auch immer in Stufe i H(i) ist die Präsenz-Wahrscheinlichkeit für Stufe i hi ist die Wahrscheinlichkeit, dass die Daten in Stufe i, jedoch nicht in Stufe i − 1 sind (relative Trefferhäufigkeit für Stufe i)
Hauptspeicher– 13/79– 2008-10-13
Mittlere Effektive Zugriffszeit
Es gilt:
Mittlere Effektive Zugriffszeit
Es ist Ti =
hi = H(i) − H(i − 1) für i > 1 Mittlere Effektive Zugriffszeit: E [T (n)] =
Hauptspeicher– 14/79– 2008-10-13
n P i=1
k=1
tk mit tk ist die Zugriffszeit der Stufe k
Mit H(0) = 0 und H(n) = 1 gilt E [T (n)] =
hi ∗ Ti
i P
i n P P i=1 k=1
mit der Zeit Ti , die benötigt wird, um die gewünschte Information auf Stufe i vorzufinden
Hauptspeicher– 15/79– 2008-10-13
E [T (n)] =
n P i=1
tk ∗ (H(i) − H(i − 1))
(1 − H(i − 1)) ∗ ti
Hauptspeicher– 16/79– 2008-10-13
Übersicht
Hauptspeichermodule
1
Einleitung
2
Hauptspeicher
3
Caches, Cache-Kohärenz
SIMM: single inline memory
Einleitung
DIMM: dual inline memory
Platzierungsstrategien
DDR: double data rate memory
Ersetzungsstrategien Schreibstrategien
...
Hinweise 4
Virtueller Speicher
Hauptspeicher– 17/79– 2008-10-13
Hauptspeichermodule
Hauptspeicher– 19/79– 2008-10-13
Hauptspeicher– 18/79– 2008-10-13
Hauptspeichermodule
Hauptspeicher– 20/79– 2008-10-13
Hauptspeichermodule
Hauptspeicher
Dynamische RAMs haben Zugriffszeit: Zeit, die benötigt wird, die Adresse und die dazugehörigen Daten zu übermitteln Zykluszeit: minimal erlaubte Zeit vom Beginn eines Zugriffs bis zum Beginn des nächsten Bei DRAMs: Zugriffszeit < Zykluszeit
Hauptspeicher– 21/79– 2008-10-13
Hauptspeicher - Interleaving
Hauptspeicher– 22/79– 2008-10-13
Hauptspeicher - Interleaving Speicherzugriffe erfolgen in den überwiegenden Fällen auf aufeinanderfolgende Speicheradressen. => zeitlich aufeinander folgende Zugriffe beziehen sich dann auf verschiedene Speichermodule.
Hauptspeicher– 23/79– 2008-10-13
Hauptspeicher– 24/79– 2008-10-13
Hauptspeicher - Interleaving
Hauptspeicher - Interleaving
Vorteil: schnellerer Zugriff auf aufeinander folgende Speicherzellen (z.B. bei Burst-Zugriffen) Nachteil: Speicherriegel müssen alle gleiche Größe haben
Hauptspeicher– 25/79– 2008-10-13
Übersicht
Hauptspeicher– 26/79– 2008-10-13
Caches
1
Einleitung
2
Hauptspeicher
Hauptspeicherzugriffe sind langsam
Caches, Cache-Kohärenz
was sind die wichtigsten Daten?
3
die wichtigsten Daten in der CPU zwischenspeichern die Daten, die demnächst (wieder) gebraucht werden
Einleitung
welche Daten werden (vermutlich) demnächst gebraucht?
Platzierungsstrategien Ersetzungsstrategien Schreibstrategien
verschiedene Platzierungs-, Ersetzungs- und Rückschreibstategien
Hinweise 4
die Daten, die zuletzt häufig gebraucht wurden („temporale Lokalität”) die Daten, die nahe den zuletzt gebraucht Daten liegen („räumliche Lokalität”)
Virtueller Speicher
Hauptspeicher– 27/79– 2008-10-13
Hauptspeicher– 28/79– 2008-10-13
Cache-Position
Virtueller Cache
Hauptspeicher– 29/79– 2008-10-13
Virtueller Cache
Hauptspeicher– 30/79– 2008-10-13
Physikalischer Cache
Virtueller Cache: Vorteil: Adress-Umrechnung durch MMU vielfach nicht nötig Nachteil: bei Kontextwechseln (MMU rechnet Adressen anders um) Cache-Flush notwendig
Hauptspeicher– 31/79– 2008-10-13
Hauptspeicher– 32/79– 2008-10-13
Physikalischer Cache
L1-Caches Intel
Physikalischer Cache: Vorteil: bei Kontextwechseln (MMU rechnet Adressen anders um) kein Cache-Flush notwendig Nachteil: Adress-Umrechnung durch MMU immer nötig
Hauptspeicher– 33/79– 2008-10-13
Caches-Blöcke
Hauptspeicher– 34/79– 2008-10-13
Caches
Hinweis: Es werden i.a. nicht einzelne Bytes gecacht, sondern zusammenhängende Blöcke mit mehreren Bytes (z.B. 32 Bytes) Ausnutzung der räumlichen Lokalität Ausnutzung der Breite des externen Datenbusses Ausnutzung der Burst-Möglichkeit von externen Bussen geringerer Aufwand bei der Speicherung der zugehörigen Adressen
Hauptspeicher– 35/79– 2008-10-13
Platzierungsstrategie: wenn ein Datum aus dem Hauptspeicher zwsichengespeichert werden soll, muss ein Platz im Cache ausgewählt werden Ersetzungsstrategie: wenn der Cache gefüllt ist, muss ein altes Datum aus dem Cache entfernt werden, bevor ein neues Datum aufgenommen werden kann Schreibstrategie: wann werden im Cache modifizierte Daten in den Hauptspeicher zurückgeschrieben
Hauptspeicher– 36/79– 2008-10-13
Caches
Direct-Mapped Caches
Platzierungsstrategien: Direct-Mapped: jeder Adresse im Hauptspeicher ist genau eine Speicherzelle des Caches zugeordnet N-Set-Associative: jeder Adresse im Hauptspeicher ist genau eine von N Speicherzellen des Caches zugeordnet
Ein „direct-mapped cache” mit E Einträgen bildet die Adresse im Cache (CA) aus der Adresse im Speicher (MA) durch Berechnung von CA = MA mod E
Full-Associative: jeder Adresse des Hauptspeichers kann jede Speicherzelle des Caches zugeordnet werden
Hauptspeicher– 37/79– 2008-10-13
Direct-Mapped Caches
Hauptspeicher– 38/79– 2008-10-13
Direct-Mapped Caches
D.h. dass jeder Speicheradresse genau eine Cache-Adresse zugeordnet ist. Jeder Cache-Adresse entsprechen jedoch i.a. mehrere Speicheradressen. Daher muss zusätzlich zum gecachten Wert noch die Adresse des Wertes im Hauptspeichers vermerkt werden. Da ein Teil der Adresse schon in der Adresse des Caches implizit enthalten ist, reicht sogenanntes „Tag”: CA = MA mod E , Tag = MA/E
Hauptspeicher– 39/79– 2008-10-13
Hauptspeicher– 40/79– 2008-10-13
Direct-Mapped Caches
N-Set-Associative Caches
Direct-Mapped Caches: Vorteil: sehr einfach => große Caches möglich Nachteil: in vielen Situationen wertlos (wenn mehrfach nacheinander auf Speicherzelle X und X + k ∗ E zugegriffen wird) => N-Set-Associative Caches
Hauptspeicher– 41/79– 2008-10-13
N-Set-Associative Caches
Definition „N-Set-Associative Cache”:
Hauptspeicher– 42/79– 2008-10-13
N-Set-Associative Caches
Jedes Datum kann an N Stellen im Cache gespeichert werden.
Ist ein Datum an mehreren Stellen speicherbar, müssen mehrere Tags gleichzeitig untersucht werden.
(mit: E ist ganzzahliges Vielfaches von N)
=> N-Set-Associative Caches benötigen N Vergleicher
Hauptspeicher– 43/79– 2008-10-13
Hauptspeicher– 44/79– 2008-10-13
N-Set-Associative Caches
Full-Associative Caches
Spezialfall N = E : Jedes Datum kann in jeder Cache-Speicherzelle gespeichert werden: „voll-assoziativer Cache”
Hauptspeicher– 45/79– 2008-10-13
Caches
Hauptspeicher– 46/79– 2008-10-13
Ersetzungsstrategien
Ist der Cache voll, muss vor dem Einlagern eines neuen Adress-/Werte-Paares ein altes aus dem Cache verworfen werden. Daumenregel:
Zwei gängige Verfahren gibt es:
sehr großer Cache => direct-mapped mittlerer Cache => N-set-associative sehr kleiner Cache => full-associative
zufällig: hier wird irgendein zufälliges Paar ausgewählt LRU: (least recently used) hier wird das am längsten nicht mehr benutzte Paar überschrieben das Zufallsverfahren ist in manchen Situationen besser als das LRU-Verfahren
Hauptspeicher– 47/79– 2008-10-13
Hauptspeicher– 48/79– 2008-10-13
LRU-Ersetzung
LRU-Ersetzung
Vereinfachtes (Pseudo-) LRU für vier und mehr Einträge: LRU für zwei Einträge ist einfach: ein Bit kennzeichnet den jeweils zuletzt benutzten Eintrag
jeweils zwei Einträge werden paarweise mit je einem Bit über LRU verwaltet
echtes LRU für vier und mehr Einträge ist (zu) aufwändig
jeweils zwei auf diese Art verwaltete LRU-Paare werden jeweils wieder mit je einem Bit über LRU verwaltet ...
Hauptspeicher– 49/79– 2008-10-13
LRU-Ersetzung
Hauptspeicher– 50/79– 2008-10-13
LRU-Ersetzung
Anzahl der zusätzlichen Pseudo-LRU-Bits: 4-set-associative: 3 Bits 8-set-associative: 7 Bits 16-set-associative: 15 Bits ... N-set-associative: N − 1 Bits i.a. werden nur Assoziativitätsgrade bis höchstens 8 oder 16 verwendet
Hauptspeicher– 51/79– 2008-10-13
Hauptspeicher– 52/79– 2008-10-13
Schreibstrategien
Schreibstrategien
Es sind verschiedene Fälle zu bedenken: A: es werden einige wenige Daten in Speicherzellen geschrieben, die sehr bald wieder gelesen werden (Beispiel: Zugriff auf lokale Variablen, Rücksprungadressen) B: es werden große Datenbereiche geschrieben, die erst später gelesen werden (Beispiel: Initialisierung großer Datenstrukturen)
im Fall A ist es sinnvoll, die Daten in den Cache zu schreiben („Write-Using-Cache”) im Fall B ist es nicht sinnvoll („Write-Around-Cache”; Daten im Cache u.U. invalidieren) im Fall C verhindert Caching u.U. die korrekte Funktion
C: es wird auf I/O-Register zugegriffen
Hauptspeicher– 53/79– 2008-10-13
Schreibstrategien
Hauptspeicher– 54/79– 2008-10-13
Write-Through
Im Cache modifizierte Daten müssen letztendlich auch im Hauptspeicher modifiziert werden. Zwei Möglichkeiten:
Write-Through:
Write-Through: beim Schreiben werden die Daten sofort im Cache und im Hauptspeicher modifiziert
u.U. werden häufig beschriebene Werte unnötig häufig auch im Hauptspeicher modifiziert (z.B. lokale Variablen, Rückkehradressen)
Write-Back: erst, wenn das Datum im Cache überschrieben werden würde, findet ein Update des Hauptspeicherwertes statt
andere Bus-Master (z.B. DMA oder andere CPUs) sehen immer den „richtigen” Speicherinhalt („Cache-Kohärenz”)
Hauptspeicher– 55/79– 2008-10-13
Hauptspeicher– 56/79– 2008-10-13
Write-Back
Snooping
Write-Back: häufig beschriebene Werte werden im besten Fall praktisch gar nicht im Hauptspeicher modifiziert (z.B. lokale Variablen, Rückkehradressen) andere Bus-Master (z.B. DMA oder andere CPUs) sehen u.U. nicht mehr aktuelle Speicherinhalte => spezielle „flush”Befehle notwendig („Cache-Kohärenz” nicht gegeben)
wird der Inhalt des Hauptspeichers durch externe Bus-Master (DMA oder andere CPUs) modifiziert, enthält ein CPU-Cache u.U. nicht mehr aktuelle Werte Problem durch „Snooping” lösbar Cache „lauscht” am Bus, welche Speicherzellen modifiziert werden und updated oder invalidiert u.U. eigene Cache-Zeilen
Hauptspeicher– 57/79– 2008-10-13
Snooping
Hauptspeicher– 58/79– 2008-10-13
Caches
wird ein Wert aus dem Hauptspeicher durch externe Bus-Master (DMA oder andere CPUs) gelesen, bekommt der Leser u.U. falsche Ergebnisse, wenn ein anderer CPU-Cache bereits modifizierte Werte enthält Problem durch „Snooping” lösbar Cache „lauscht” am Bus, welche Speicherzellen gelesen werden und liefert u.U. den neuen Wert
Harvard-Architektur: getrennte Wege für Daten und Instruktionen => getrennte Daten- („D-Cache”) und Instruktions-Caches („I-Cache”). I-Cache einfacher als D-Cache da read-only keine Probleme mit Cache-Kohärenz Voraussetzung: kein selbstmodifizierender Code!
Hauptspeicher– 59/79– 2008-10-13
Hauptspeicher– 60/79– 2008-10-13
Performance
Bespiel
Beispiel: Performance, Mittlere Speicherzugriffszeit:
Hit-Time = 1 Takt
Zeit = HitTime + MissRate ∗ MissPenalty
Miss-Rate = 5% Miss-Penalty = 20 Takte => Mittlere Speicherzugriffszeit = 1 + 0.05 ∗ 20 Takte = 2 Takte
Hauptspeicher– 61/79– 2008-10-13
Verbesserung der Cache-Performance
Hauptspeicher– 62/79– 2008-10-13
Miss-Gründe
Zeit = HitTime + MissRate ∗ MissPenalty Verbesserungen: Compulsory: auf ein Datum wird das erste Mal zugegriffen Reduzierung der Hit-Time Reduzierung der Miss-Rate Reduzierung des Miss-Kosten Reduzierung der Miss-Kosten heisst Reduzierung der Zugriffszeit auf tiefere Cache-Ebenen:
Capacity: ein Datum wurde zwischenzeitlich aus Platzgründen aus dem Cache entfernt Conflict: ein Datum wurde zwischenzeitlich im Cache mit einem Datum mit ähnlicher Adresse überschrieben
Zeiti = HitTime + MissRate ∗ Zeiti+1
Hauptspeicher– 63/79– 2008-10-13
Hauptspeicher– 64/79– 2008-10-13
Cache-Block-Size
Cache-Block-Size
kleine Blöcke Design Trade-Off: Block- oder Seiten-Größe viele kleine Blöcke
temporale Lokalität wird gut genutzt räumliche Lokalität wird nicht genutzt kleinere Miss-Penalty
große Blöcke
einige Blöcke mittlerer Größe wenige große Blöcke
räumliche Lokalität wird gut genutzt temporale Lokalität wird nicht genutzt Blöcke werden aufgrund von Konflikten früh überschrieben größere Miss-Penalty
=> „mittlere” Blockgrößen
Hauptspeicher– 65/79– 2008-10-13
Ping-Pong-Effekt
Hauptspeicher– 66/79– 2008-10-13
Cache-Block-Size
„Ping-Pong-Effekt”: zwei (oder mehrere) Einträge verdrängen sich jeweils abwechselnd gegenseitig => Cache ist wirkungslos u.U. gefährlich, wenn eine Instruktion mehrere Daten gleichzeitig benötigt, diese sich aber gegenseitig aus dem Cache verdrängen (=> Hardware-Stall!) Beispiel: IA86 braucht bis zu 10 verschiedene Daten für eine einzelne Instruktion
Hauptspeicher– 67/79– 2008-10-13
Hauptspeicher– 68/79– 2008-10-13
Cache-Block-Size
Reduzierung der Misses Instruktionen: Umordnen der Prozeduren und Schleifen zur Reduzierung der Conflict-Misses
Daten: Merging Arrays Verbesserung der räumlichen Lokalität z.B. durch Nutzung eines Arrays mit Strukturen statt mehrerer Arrays. Loop Interchange Umsortieren von Schleifen um auf Daten in der Reihenfolge zuzugreifen, in der sie im Speicher liegen Loop Fusion Verschmelzen von Schleifen, die die gleiche Anfangs- und Endwerte haben sowie auf gemeinsame Variablen zugreifen Blocking temporale Lokalität durch den wiederholten Zugriff auf „Blöcke” erhöhen anstatt ganze Spalten bzw. Reihen abzuarbeiten Hauptspeicher– 69/79– 2008-10-13
Übersicht
Hauptspeicher– 70/79– 2008-10-13
Virtueller Speicher
1
Einleitung
2
Hauptspeicher
3
Caches, Cache-Kohärenz Einleitung Platzierungsstrategien Ersetzungsstrategien Schreibstrategien
die Organisation des Gesamtspeichers: Hierarchie von Speicherebenen Gesamtspeicher enthält Speicher unterschiedlicher Größe und Zugriffsgeschwindigkeit Speicherverwaltung notwendig, Hardware-Unterstützung durch Memory-Management-Unit (MMU)
Hinweise 4
Virtueller Speicher
Hauptspeicher– 71/79– 2008-10-13
Hauptspeicher– 72/79– 2008-10-13
Virtueller Speicher
MMU
Der Hauptspeicher kann als Cache für den Plattenspeicher dienen
Memory Management Unit (MMU)
Vorteil: Illusion eines großen physikalischen Speichers MMU hilft zusätzlich bei: Programm-Relokation Speicherschutz
Hauptspeicher– 73/79– 2008-10-13
Paging
Hauptspeicher– 74/79– 2008-10-13
Paging
Wenn benötigte Daten auf Platte liegen Laden der Daten in freie Page im Hauptspeicher mittels DMA Umschalten auf anderen laufbereiten Prozess wenn DMA fertig ist, kommt Interrupt im Interrupt-Handler Page-Tabelle des Prozesses updaten beim Zurückschalten auf den Prozess sind die Daten dann vorhanden
Hauptspeicher– 75/79– 2008-10-13
Hauptspeicher– 76/79– 2008-10-13
Paging
Adressumsetzung
Miss Penalty groß => Blöcke (Pages) sollten relativ groß sein (z.B. 4 kByte) Reduzierung der Page-Fault-Häufigkeit wichtig => sehr gute Ersetzungsstrategie notwendig Page Faults können in Software gelöst werden; keine Extra-Hardware notwendig Write-Through viel zu teuer => Write-Back
Hauptspeicher– 77/79– 2008-10-13
Typische Parameter für Caches und Virtuellen Speicher
Parameter Blockgröße Hit-Dauer Miss Penalty Miss Rate Speichergröße
First-Level-Cache 16-128 Bytes 1-2 Zyklen 8-100 Zyklen 0.5-10% 8-64 kByte
Virtueller Speicher 4-64 kBytes 40-100 Zyklen 70000-6000000 Zyklen 0.00001-0.001% 16-8192 MBytes
Hauptspeicher– 79/79– 2008-10-13
Hauptspeicher– 78/79– 2008-10-13