Cache-Kohärenz

Ein Cache kann verwendet werden, um die Leistung beim Zugriff auf eine bestimmte Ressource zu verbessern. Wenn es, wie in der Abbildung gezeigt, mehrere solcher Caches für dieselbe Ressource gibt, kann dies zu Problemen führen. Cache-Kohärenz oder Cache-Kohärenz bezieht sich auf eine Reihe von Möglichkeiten, um sicherzustellen, dass alle Caches der Ressource die gleichen Daten haben und dass die Daten in den Caches sinnvoll sind (Datenintegrität genannt). Cache-Kohärenz ist ein Sonderfall der Speicherkohärenz.

Es kann Probleme geben, wenn es viele Caches einer gemeinsamen Speicherressource gibt, da die Daten im Cache möglicherweise keinen Sinn mehr machen oder ein Cache nicht mehr die gleichen Daten wie die anderen hat. Ein häufiger Fall, in dem das Problem auftritt, ist der Cache von CPUs in einem Multiprozessorsystem. Wie in der Abbildung zu sehen ist, könnte, wenn der obere Client über eine Kopie eines Speicherblocks aus einem früheren Lesevorgang verfügt und der untere Client diesen Speicherblock ändert, der obere Client, ohne es zu wissen, mit einem ungültigen Speicher-Cache zurückbleiben. Cache-Kohärenz ist dazu da, solche Konflikte zu verwalten und die Konsistenz zwischen Cache und Speicher aufrechtzuerhalten.

Mehrere Caches von gemeinsam genutzten RessourcenZoom
Mehrere Caches von gemeinsam genutzten Ressourcen

Definition

Die Kohärenz definiert das Verhalten von Lese- und Schreibvorgängen an derselben Speicherstelle. Die Caches sind kohärent, wenn alle der folgenden Bedingungen erfüllt sind:

  1. Wenn ein Prozessor P eine Stelle X liest, muss P nach dem Schreiben an diese Stelle den Wert erhalten, den er geschrieben hat, wenn kein anderer Prozessor einen anderen Wert an diese Stelle geschrieben hat. Dies gilt auch für Monoprozessorsysteme, d.h. der Speicher ist in der Lage, einen geschriebenen Wert zu behalten.
  2. Angenommen, es gibt zwei Prozessoren, P1 und P2, und P1 schrieb einen Wert X1, und danach schrieb P2 einen Wert X2, wenn P1 den Wert liest, muss er den von P2 geschriebenen Wert erhalten, X2, und nicht den von ihm geschriebenen Wert, X1, wenn es keine anderen Schreibvorgänge zwischen den beiden gibt. Dies bedeutet, dass die Ansicht des Speichers kohärent ist. Wenn Prozessoren nach dem von P2 vorgenommenen Schreibvorgang den gleichen alten Wert lesen können, wäre der Speicher nicht kohärent.
  3. Es kann immer nur ein Schreibzugriff auf eine bestimmte Stelle im Speicher erfolgen. Wenn es mehrere Schreibvorgänge gibt, müssen diese nacheinander erfolgen. Mit anderen Worten, wenn die Speicherstelle X von zwei beliebigen Prozessoren zwei verschiedene Werte A und B in dieser Reihenfolge erhalten hat, können die Prozessoren die Speicherstelle X niemals als B lesen und sie dann als A lesen.

Diese Bedingungen werden unter der Annahme definiert, dass die Lese- und Schreiboperationen sofort ausgeführt werden. Bei Computer-Hardware geschieht dies jedoch aufgrund der Speicherlatenz und anderer Aspekte der Architektur nicht. Ein Schreibvorgang von Prozessor X wird möglicherweise nicht von einem Lesevorgang von Prozessor Y gesehen, wenn der Lesevorgang innerhalb einer sehr kleinen Zeitspanne nach dem Schreibvorgang erfolgt. Das Speicherkonsistenzmodell definiert, wann ein geschriebener Wert von einem nachfolgenden Lesebefehl der anderen Prozessoren gesehen werden muss.

Cache-Kohärenz-Mechanismen

  • Verzeichnisbasierte Kohärenzmechanismen führen ein zentrales Verzeichnis der zwischengespeicherten Blöcke.
  • Snooping ist der Prozess, bei dem jeder Cache die Adressleitungen auf Zugriffe auf Speicherplätze überwacht, die sich in seinem Cache befinden. Wenn ein Schreibvorgang an einer Stelle beobachtet wird, von der ein Cache eine Kopie besitzt, invalidiert der Cache-Controller seine eigene Kopie der geschnüffelten Speicherstelle.
  • Beim Snarfing beobachtet ein Cache-Controller sowohl die Adresse als auch die Daten in dem Versuch, seine eigene Kopie einer Speicherstelle zu aktualisieren, wenn ein zweiter Master eine Stelle im Hauptspeicher ändert.

Verteilte gemeinsam genutzte Speichersysteme ahmen diese Mechanismen nach, so dass sie die Konsistenz zwischen Speicherblöcken in lose gekoppelten Systemen aufrechterhalten können.

Die beiden häufigsten Arten von Kohärenz, die typischerweise untersucht werden, sind Schnüffeln und Verzeichnis-basiert. Jede hat ihre eigenen Vor- und Nachteile. Snooping-Protokolle neigen dazu, schneller zu sein, wenn genügend Bandbreite zur Verfügung steht, da alle Transaktionen eine Anfrage/Antwort sind, die von allen Prozessoren gesehen wird. Der Nachteil ist, dass Snooping nicht skalierbar ist. Jede Anfrage muss an alle Knoten in einem System gesendet werden. Wenn das System größer wird, müssen die Größe des (logischen oder physischen) Busses und die von ihm bereitgestellte Bandbreite wachsen. Verzeichnisse hingegen neigen dazu, längere Latenzen zu haben (bei einer 3-Hop-Anfrage/Weiterleitung/Antwort), benötigen aber viel weniger Bandbreite, da die Nachrichten Punkt-zu-Punkt und nicht übertragen werden. Aus diesem Grund verwenden viele der größeren Systeme (>64 Prozessoren) diese Art der Cache-Kohärenz.

Fragen und Antworten

F: Was ist Cache-Kohärenz?


A: Cache-Kohärenz bedeutet, dass alle Caches einer Ressource die gleichen Daten enthalten und dass die Daten in den Caches konsistent sind (Datenintegrität).

F: Was ist der Zweck der Cache-Kohärenz?


A: Der Zweck der Cache-Kohärenz besteht darin, Konflikte zwischen mehreren Caches einer gemeinsamen Speicherressource zu verwalten und die Konsistenz zwischen Cache und Speicher aufrechtzuerhalten.

F: Welche Folgen kann es haben, wenn keine Cache-Kohärenz vorhanden ist?


A: Ohne Cache-Kohärenz machen die Daten im Cache möglicherweise keinen Sinn mehr, oder ein Cache verfügt nicht mehr über dieselben Daten wie die anderen, was zu Inkonsistenzen und Fehlern führen kann.

F: Was ist ein häufiger Fall, in dem Probleme mit der Cache-Kohärenz auftreten?


A: Ein häufiger Fall, in dem Probleme mit der Cache-Kohärenz auftreten, ist der Cache von CPUs in einem Multiprozessorsystem.

F: Wie funktioniert die Cache-Kohärenz?


A: Cache-Kohärenz funktioniert, indem sichergestellt wird, dass alle Caches einer Ressource dieselben Daten haben und dass die Daten in den Caches durch verschiedene Methoden konsistent sind.

F: Was versteht man unter Speicherkohärenz?


A: Speicherkohärenz bezieht sich auf die Konsistenz von Daten in einer gemeinsamen Speicherressource.

F: Wie kann Cache-Kohärenz die Leistung verbessern?


A: Cache-Kohärenz kann die Leistung verbessern, indem sie einen schnelleren und effizienteren Zugriff auf eine bestimmte Ressource ermöglicht.

AlegsaOnline.com - 2020 / 2023 - License CC3