Cache
Cache Vorlage:Lautschrift bezeichnet in der EDV einen besonders schnellen Puffer-Speicher, der bei CPUs meist direkt auf dem Prozessor integriert ist. Bei Festplatten liegt er auf der Steuerplatine (siehe auch Festplattencache). In ihm werden Daten und Programminstruktionen zwischengelagert, so dass diese bei einem Zugriff durch die CPU schnell zur Bearbeitung bereitstehen. Ziel des Cache-Speichers ist die Verringerung der Anzahl der Speicherzugriffe.
Den Namen verdankt der Cache der Tatsache, dass er als Teil des Steuerwerks im Verborgenen arbeitet. Nur selten spricht ein Programmierer den Cache explizit an, etwa um ihn zu leeren (Flush).
Wörtlich aus dem Englischen übersetzt bedeutet Cache (gesprochen: kæʃ, wie das Bargeld - cash, entlehnt aus dem französischen cacher - verbergen, caché - verborgen) soviel wie „geheimes Lager“. Aus den Quotes-of-the-day eines Linux Betriebssystems: „Cache: A very expensive part of the memory system of a computer that no one is supposed to know it is there.“
Das Funktionieren des Caches beruht auf der so genannten Lokalitätseigenschaft.
Der Prozessor Cache
Jeder moderne Prozessor besitzt ein oder mehrere Caches um häufig wiederkehrende Aufgaben wesentlich schneller erledigen zu können.
Arbeitsweise
Der Cache beinhaltet nur einen kleinen Anzahl an Datenkopien aus dem viel langsameren Hauptspeicher (Blöcke). Daher ist es sinnvoll immer nur die Blöcke im Cache zu halten, die oft benutzt werden. Dazu gibt es verschiedene Ersetzungsstrategien. Die am häufigsten verwendete Variante ist dabei LRU (Least Recently Used - Ersetzung des am wenigsten gebrauchten Elements.)
Aufgrund des erwähnten kleinen Cachespeicherplatzes treten bei Lese/Schreib-Anforderungen des Prozessors folgende Fälle auf:
- Cache-Hit: Der angeforderte Block wurde im Cache gefunden und kann dort sofort bearbeitet werden. Dies bedeutet einen erheblichen Performancegewinn.
- Cache-Miss: Der angeforderte Block ist nicht im Cache. Der Block muss somit aus dem Hauptspeicher geladen werden und wird gegen einen anderen im Cache ersetzt. In der Mikrorechnertechnik werden 3 Arten von Cache-Misses unterschieden:
- Compulsory: Der erste Schreib/Lesezugriff auf einen Block ist aus Prinzip ein Miss.
- Capacity: Der Cache ist voll (Ersetzung eines Blockes notwendig oder grösserer Cache)
- Conflict: Abhängig vom gewählten Ersetzungsverfahren, kann es passieren, das die Stelle wo ein Block eingelagert werden soll bereits belegt ist.
Problem: Eine Änderung auf dem Cache führt zwangsläufig zu einer Inkonsistenz, da diese Änderung nicht mehr mit dem Block im Hauptspeicher übereinstimmt. Zur Lösung existieren 2 Techniken:
- Write Through: Wird ein Cacheelement geändert wird auch gleichzeitig sein Pendant im Hauptspeicher geändert. (Nachteil: Verlust des Geschwindigkeitsvorteil des Caches, da ja immer auf den Hauptspeicher gewartet werden muss)
- Write Back: Der geänderte Cache-Block wird erst im Hauptspeicher aktualisiert, wenn es ersetzt wird. (Nachteil: Inkonsistenzprobleme bei Mehrprozessorsystemen)
In modernen Prozessoren sind aufgrund beider Nachteile beide Varianten implementiert.
Write-Miss Problem: Ist ein Block im Cache schon ersetzt worden auf die der Prozessor jetzt schreibend zugreifen will, hat er 2 Möglichkeiten:
- Fetch on Write: Der Block wird einfach vorher nochmal in den Cache eingelesen damit der Prozessor darauf wieder schreibend zugreifen kann.
- Write Around: Der Block wird unter Umgehung des Caches direkt im Hauptspeicher geändert.
Adressierungstechnik
Es existieren 3 Verfahren um Daten im Cache abzulegen:
- Direct Mapped: Ein eingelagerter Block kann sich nur an einer Stelle befinden (Abbildung auf genau eine Speicherzelle). Die Adressberechnung erfolgt dabei über eine einfache Modulo Funktion.
- Fully Associative: Hier kann sich ein Block an jeder beliebigen Stellen befinden. Der Block ist somit inhaltsadressierbar.
- Set Associative: Der Cachespeicher wird hierbei in meherere Sets aufgeteilt. Diese Sets haben feste Plätze im Cache. Ein neuer Block kann nun innerhalb eines Sets beliebig platziert werden. Mengen-Assoziative Caches vereinen somit Direct-Mapped mit der Voll-Assoziativen Technik:
- 1-way set associative = direct mapped
- n-way set associative = fully associative
Heutige Caches implementieren das Mengen-Assoziative Verfahren.
Cachelevel
Der Level-1-Cache hält die aktuellen Adressen, Befehle und Zwischenergebnisse auf Vorrat, damit diese nicht langwierig aus „entfernterem“ Speicher aufgerufen werden müssen. Dieser Cache liegt stets direkt im Prozessorkern und hat in der Regel eine Größe von 8 bis 256 KB.
Der Level-2-Cache puffert größere aktuell zu verarbeitete Datenbestände, auch unter Umständen ganze Programmabschnitte. In der günstigsten Anordnung liegt dieser Cache wie der Level-1-Cache auf dem Prozessorchip (on-Die) und wird mit der vollen Prozessortaktrate angesprochen. Liegt der L2-Cache außerhalb der CPU, also z.B. auf einer „entfernteren“ Platine, so muss die Taktrate in der Regel halbiert werden. Der L2-Cache ist in der Regel zwischen 512 und 2048 KB groß.
Insbesondere wenn der L2-Cache on-Die vorliegt, kann eine weitere Stufe, der Level-3-Cache noch einmal eine Beschleunigung des Speicherzugriffs bedeuten.
Stufung des Datenzugriffs im Computer
…sortiert von schnell nach „langsam“:
- 1. die Daten liegen in einem Register des Prozessors
- 2. die Daten liegen im Level-1-Cache des Prozessors
- 3. die Daten liegen im Level-2-Cache
- a) on-Die
- b) nicht on-Die, auf einer „entfernteren“ Platine
- 4. die Daten liegen im Level-3-Cache (nicht on-Die)
- 5. die Daten müssen aus dem regulären Arbeitsspeicher gelesen werden
- 6. die Daten müssen extern gelesen werden (von z.B. der Festplatte)
- a) die Daten liegen in einem Laufwerks-Cache (Speicher in der Ansteuerungselektonik (Controller oder im Laufwerksgehäuse))
- b) die Daten werden magnetisch/optisch gelesen
- 7. die Daten müssen noch (z.B. per Scanner oder Tastatur) eingegeben werden.
Festplatten Caches
Moderne Festplatten besitzen ebenfalls einen eigenen eingebauten Cache (meist 1-8MB groß). Er sorgt hier für enorm reduzierte Anfragezeiten bei Cache-Hits (wenige Nanosekunden im Vergleich zu einigen Millisekunden). Siehe dazu Festplattencache.
Speicher Caches
Selbst heutige Speicher (SD-RAM, DDR-RAM, RDRAM, ...) besitzen selber nocheinmal einen schnelleren Cache. Der Grund ist, dass der Hauptspeicher fast aller PC's mit dynamischem Speicher bestückt ist, welcher zwar billiger aber Aufgrund seiner Refreshzyklen auch langsamer ist. Desshalb besitzt jeder RAM-Baustein einen kleinen Cache in Form eines statischen Speichers.
Software Caches
Das Wort "Cache" trifft man auch in der Software an. Hier beschreibt es dasselbe Prinzip wie bei der Hardwareimplementierung: Daten werden für einen schnelleren Zugriff auf ein schnelleres Medium zwischengespeichert.
Beispiele:
- Browser-Cache: (Netz -> Festplatte)
- Anwendungen: (Festplatte -> Hauptspeicher)