Cache -Kohärenz


Im Rechnerarchitektur, Cache -Kohärenz ist die Einheitlichkeit gemeinsamer Ressourcendaten, die in mehreren gespeichert werden Lokale Caches. Wenn Kunden in einem System pflegen Caches Von einer gemeinsamen Speicherressource können Probleme mit inkohärenten Daten auftreten, was insbesondere bei der Fall ist CPUs in einem Multiprozessierung System.
Betrachten Sie in der Abbildung rechts, dass beide Clients eine zwischengespeicherte Kopie eines bestimmten Speicherblocks aus einer früheren Lektüre haben. Angenommen, der Client in den unteren Aktualisierungen/Änderungen in diesem Speicherblock kann der Client oben ohne Benachrichtigung über die Änderung mit einem ungültigen Speichercache belassen werden. Die Cache -Kohärenz soll solche Konflikte verwalten, indem eine kohärente Ansicht der Datenwerte in mehreren Caches aufrechterhalten wird.

Überblick
In einem geteilte Erinnerung Multiprozessorsystem mit einem separaten Cache -Speicher für jeden Prozessor ist es möglich, viele Kopien gemeinsamer Daten zu haben: eine Kopie im Hauptspeicher und eine im lokalen Cache jedes Prozessors, der es angefordert hat. Wenn eine der Kopien von Daten geändert wird, müssen die anderen Kopien diese Änderung widerspiegeln. Die Cache -Kohärenz ist die Disziplin, die sicherstellt, dass die Änderungen der Werte der gemeinsam genutzten Operanden (Daten) rechtzeitig im gesamten System propagiert werden.[1]
Im Folgenden sind die Anforderungen für die Cache -Kohärenz:[2]
- Propagation schreiben
- Änderungen an den Daten in einem Cache müssen an andere Kopien (dieser Cache -Zeile) in den Peer -Caches ausgegeben werden.
- Transaktionserialisierung
- Lese/schreibt an einen einzelnen Speicherort, muss von allen Prozessoren in derselben Reihenfolge angezeigt werden.
Theoretisch kann die Kohärenz an der Last/des Speichers durchgeführt werden Die Granularität. In der Praxis wird es jedoch im Allgemeinen in der Granularität von Cache -Blöcken durchgeführt.[3]
Definition
Kohärenz definiert das Verhalten von Leads und schreibt an einen einzelnen Adressort.[2]
Eine Art von Daten, die gleichzeitig in verschiedenen Cache -Speicher auftreten, wird als Cache -Kohärenz oder in einigen Systemen als globaler Speicher bezeichnet.
Beachten Sie in einem Multiprozessor -System, dass mehr als ein Prozessor eine Kopie des Speicherorts X zwischengespeichert hat. Die folgenden Bedingungen sind erforderlich, um eine Cache -Kohärenz zu erreichen:[4]
- In einer Readung eines Prozessors P zu einem Ort X, der einem Schreiben desselben Prozessors P zu X folgt, ohne dass ein anderer Prozessor zwischen dem Schreiben und den von P erstellten Leseanweisungen auf X geschrieben werden, muss X immer den Wert zurückgeben Geschrieben von P.
- In einer Readung eines Prozessors P1 bis zu Ort X, der einem Schreiben von einem anderen Prozessor P2 bis X folgt, wobei keine anderen Schreibvorgänge an x von einem Prozessor zwischen den beiden Zugriffsern und mit dem Lese- und Schreiben ausreichend getrennt sind, muss X immer Geben Sie den von P2 geschriebenen Wert zurück. Dieser Zustand definiert das Konzept der kohärenten Sicht des Gedächtnisses. Die Propagierung der Schreibvorgänge an den gemeinsamen Speicherort stellt sicher, dass alle Caches eine kohärente Sicht auf das Gedächtnis haben. Wenn der Prozessor P1 den alten Wert von x auch nach dem Schreiben von P2 liest, können wir sagen, dass das Gedächtnis inkohärent ist.
Die oben genannten Bedingungen erfüllen die für die Cache -Kohärenz erforderlichen Verbreitungskriterien. Sie sind jedoch nicht ausreichend, da sie die Transaktionsserialisierungsbedingung nicht erfüllen. Um dies besser zu veranschaulichen, betrachten Sie das folgende Beispiel:
Ein Mehrprozessorsystem besteht aus vier Prozessoren - P1, P2, P3 und P4, die alle zwischengespeicherte Kopien einer gemeinsam genutzten Variablen enthalten S der Anfangswert 0. Prozessor P1 ändert den Wert von S (in seiner zwischengespeicherten Kopie) bis 10, nachdem der Prozessor P2 den Wert von ändert S in seiner eigenen zwischengespeicherten Kopie auf 20. Wenn wir nur eine Schreibausbreitung sicherstellen, werden P3 und P4 sicherlich die Änderungen feststellen S von P1 und P2. P3 kann jedoch die Änderung von P1 sehen, nachdem die von P2 vorgenommene Änderung angezeigt wurde und daher 10 auf eine Lektüre zu S. P4 hingegen kann Änderungen von P1 und P2 in der Reihenfolge sehen, in der sie vorgenommen werden, und kehren daher 20 für eine Lektüre an zurück zu S. Die Prozessoren P3 und P4 haben nun eine inkohärente Sichtweise des Speichers.
Um die Transaktionsserialisierung zu erfüllen und damit die Cache -Kohärenz zu erreichen, muss die folgende Bedingung zusammen mit den beiden vorangegangenen in diesem Abschnitt erwähnten Voraussetzungen erfüllt sein:
- Schreiben an denselben Ort müssen sequenziert werden. Mit anderen Worten, wenn Ort X zwei verschiedene Werte A und B empfangen hat, können die Prozessoren in dieser Reihenfolge in dieser Reihenfolge nie als B als B als A gelesen werden, und dann muss der Ort X mit den Werten a und gesehen werden B in dieser Reihenfolge.[5]
Die alternative Definition eines kohärenten Systems erfolgt über die Definition von Sequentielle Konsistenz Speichermodell: "Das cache -kohärente System muss anscheinend alle Ladungen und Speichern von Threads in a ausführen Single Speicherort in einer Gesamtreihenfolge, die die Programmreihenfolge jedes Threads respektiert ".[3] Somit besteht der einzige Unterschied zwischen dem cache -kohärenten System und dem nacheinander konsistenten System in der Anzahl der Adressspeicher, über das die Definition spricht (Einzelspeicherort für ein cache -kohärentes System und alle Speicherorte für ein nacheinander konsistentes System).
Eine andere Definition lautet: "Ein Multiprozessor ist konsistent, wenn alle an denselben Speicherort in einer sequentiellen Reihenfolge geschrieben werden."[6]
Selten, aber vor allem in Algorithmen kann sich die Kohärenz stattdessen auf die beziehen Referenzort. Mehrere Kopien derselben Daten können in verschiedenen Cache gleichzeitig vorhanden sein. Wenn Prozessoren ihre eigenen Kopien frei aktualisieren dürfen, kann sich eine inkonsistente Ansicht des Speichers ergeben.
Kohärenzmechanismen
Die beiden häufigsten Mechanismen zur Gewährleistung von Kohärenz sind schnüffeln und Verzeichnisbasiert, jeder hat ihre eigenen Vorteile und Nachteile. Snooping -basierte Protokolle sind in der Regel schneller, wenn genug Bandbreite ist verfügbar, da alle Transaktionen eine Anforderung/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 übertragen werden, was bedeutet, dass die Größe des (logischen oder physischen) Busses und die Bandbreite, die es bietet, wachsen muss, wenn das System größer wird. Verzeichnisse hingegen haben tendenziell längere Latenzen (mit einer 3 HOP -Anfrage/Vorwärts/Reaktion), verwenden jedoch viel weniger Bandbreite, da Nachrichten auf Punkt und nicht übertragen werden. Aus diesem Grund verwenden viele der größeren Systeme (> 64 Prozessoren) diese Art von Cache -Kohärenz.
Snooping
- Erstmals 1983 eingeführt,[7] Snooping ist ein Prozess, bei dem die einzelnen Caches Adresslinien für Zugriff auf Speicherorte überwachen, die sie zwischengespeichert haben.[4] Das Schreibpalidatprotokolle und Schreibprotokolle Verwenden Sie diesen Mechanismus.
- Für den Snooping -Mechanismus reduziert ein Snoop -Filter den Snooping -Verkehr, indem es eine Vielzahl von Einträgen beibehält, die jeweils eine Cache -Linie darstellen, die möglicherweise einem oder mehrerer Knoten gehört. Wenn der Austausch eines der Einträge erforderlich ist, wählt der Snoop -Filter für den Austausch des Eintrags aus, der die Cache -Linie oder Zeilen der wenigsten Knoten darstellt, wie aus einem Anwesenheitsvektor in jedem der Einträge bestimmt. Eine zeitliche oder andere Art von Algorithmus wird verwendet, um die Auswahl zu verfeinern, wenn mehr als eine Cache -Linie den wenigsten Knoten gehört.[8]
Verzeichnisbasiert
- In einem Verzeichnis basierten System werden die gemeinsam genutzten Daten in ein gemeinsames Verzeichnis platziert, das die Kohärenz zwischen Caches aufrechterhält. Das Verzeichnis fungiert als Filter, durch den der Prozessor um Erlaubnis bitten muss, einen Eintrag aus dem Primärspeicher in seinen Cache zu laden. Wenn ein Eintrag geändert wird, aktualisiert das Verzeichnis die anderen Caches mit diesem Eintrag entweder oder ungültig.
Verteilter gemeinsamer Speicher Systeme ahmen diese Mechanismen nach, um die Konsistenz zwischen Speicherblöcken in lose gekoppelten Systemen aufrechtzuerhalten.[9]
Kohärenzprotokolle
Kohärenzprotokolle wenden die Cache -Kohärenz in Multiprozessorsystemen an. Die Absicht ist, dass zwei Kunden niemals unterschiedliche Werte für dieselben gemeinsam genutzten Daten sehen dürfen.
Das Protokoll muss die grundlegenden Anforderungen an Kohärenz umsetzen. Es kann für das Zielsystem oder die Anwendung maßgeschneidert werden.
Protokolle können auch als Snoopy oder Verzeichnisbasiert eingestuft werden. In der Regel verwendeten frühe Systeme verzeichnisbasierte Protokolle, in denen ein Verzeichnis die gemeinsam genutzten Daten und die Anteilsschützer verfolgen würde. In Snoopy -Protokollen werden die Transaktionsanforderungen (zum Lesen, Schreiben oder Upgrade) an alle Prozessoren gesendet. Alle Prozessoren schnüffeln die Anfrage und reagieren angemessen.
Schreiben Sie die Propagation in Snoopy -Protokollen können durch eine der folgenden Methoden implementiert werden:
- Schreibinvalidat
- Wenn ein Schreibvorgang an einen Ort beobachtet wird, an dem ein Cache eine Kopie hat, wird der Cache -Controller seine eigene Kopie des Snooped -Speicherorts ungültig, was eine Lektüre aus dem Hauptspeicher des neuen Wertes bei seinem nächsten Zugriff erzwingt.[4]
- Schreibdatum
- Wenn ein Schreibvorgang an einen Ort beobachtet wird, an dem ein Cache eine Kopie hat, aktualisiert der Cache -Controller seine eigene Kopie des Snooped -Speicherorts mit den neuen Daten.
Wenn das Protokollentwurf feststellt, dass wenn eine Kopie der gemeinsam genutzten Daten geändert wird, alle anderen Kopien "aktualisiert" werden müssen, um die Änderung widerzuspiegeln, dann handelt es sich um ein Protokoll für ein Schreibdatum. Wenn das Entwurf besagt, dass ein Schreiben in eine von einem Prozessor vorgeschlagene Kopie von anderen Prozessoren ihre zwischengespeicherten Kopien verwerfen oder ungültig machen muss, dann handelt es sich um ein Protokoll für Schreibinvalidate.
Die Skalierbarkeit ist jedoch ein Mangel an Broadcast -Protokollen.
Verschiedene Modelle und Protokolle wurden zur Aufrechterhaltung der Kohärenz entwickelt, wie z. MSI, Mesi (auch bekannt als Illinois), Mosi, Moesi, Mersi, Mesif, Schreiben, Synapse, Berkeley, Firefly und Drachenprotokoll.[1] In 2011, Arm Ltd schlug das Amba 4 Ace vor[10] zum Umgang mit Kohärenz in SOCS. Die Spezifikation der Amba Chi (kohärente Hub -Schnittstelle)[11] aus Arm Ltd, was zur AMBA5 -Gruppe von Spezifikationen gehört, definiert die Schnittstellen für die Verbindung vollständig kohärenter Prozessoren.
Siehe auch
- Konsistenzmodell
- Verzeichnisbasierte Kohärenz
- Speicherbarriere
- Ungleichmäßiger Speicherzugriff (Numa)
- Falsche Teilen
Verweise
- ^ a b E. Thomadakis, Michael (2011). Die Architektur des Nehalem-Prozessors und der Nehalem-EP-SMP-Plattformen (PDF). Texas A & M Universität. p. 30. archiviert von das Original (PDF) Am 2014-08-11.
- ^ a b Yan, Solihin. Grundlagen der parallelen Multicore -Architektur. OCLC 884540034.
- ^ a b Sorin, Daniel J.; Hill, Mark D.; Wood, David Allen (2011-01-01). Eine Grundierung zur Gedächtniskonsistenz und zur Cache -Kohärenz. Morgan & Claypool Publishers. OCLC 726930429.
- ^ a b c Patterson und Hennessy. Computerorganisation und Design - 4. Ausgabe. ISBN 978-0-12-374493-7.
- ^ Neupane, Mahesh (16. April 2004). "Cache -Kohärenz" (PDF). Archiviert von das Original (PDF) Am 20. Juni 2010.
- ^ Steinke, Robert C.;Nutt, Gary J. (2004-09-01)."Eine einheitliche Theorie der gemeinsamen Gedächtniskonsistenz". J. ACM. 51 (5): 800–849. Arxiv:CS/0208027. doi:10.1145/1017460.1017464. ISSN 0004-5411. S2CID 3206071.
- ^ "Ravishankar, Chinya; Goodman, James (28. Februar 1983)." Cache -Implementierung für mehrere Mikroprozessoren "" (PDF). Verfahren von IEEE Compcon: 346–350.
- ^ Rasmus Ulfsnes (Juni 2013). "Design eines Snoop-Filters für Snoop-basierte Cache-Kohärenzprotokolle" Archiviert 2014-02-01 am Wayback -Maschine (PDF). diva-portal.org.Norwegische Universität für Wissenschaft und Technologie.Abgerufen 2014-01-20.
- ^ https://people.ecs.berkeley.edu/~pattrsn/252f96/lecture18.pdf[Bare URL PDF]
- ^ Kriouile (16. September 2013). Formale Analyse der ACE-Spezifikation für cache-kohärente Systeme auf Chip.In formalen Methoden für industrielle kritische Systeme. Springer Berlin Heidelberg. ISBN 978-3-642-41010-9.
- ^ Ltd, Arm. "Amba | Amba 5". Armentwickler. Abgerufen 2021-04-27.
Weitere Lektüre
- Patterson, David; Hennessy, John (2009). Computerorganisation und Design (4. Aufl.). Morgan Kaufmann. ISBN 978-0-12-374493-7.
- Handy, Jim (1998). Das Cache -Speicherbuch (2. Aufl.). Morgan Kaufmann. ISBN 9780123229809.
- Sorin, Daniel;Hill, Mark;Wood, David (2011). Eine Grundierung zur Gedächtniskonsistenz und zur Cache -Kohärenz (PDF).Morgan und Claypool. ISBN 978-1608455645. Abgerufen 20. Oktober 2017.
- Steinke, Robert C.;Nutt, Gary J. (1. September 2004)."Eine einheitliche Theorie der gemeinsamen Gedächtniskonsistenz". Journal of the ACM. 51 (5): 800–849. Arxiv:CS/0208027. doi:10.1145/1017460.1017464. S2CID 3206071.