Ü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