MSI vs. MESI vs. MOESI: Kohärenzprotokolle im Vergleich

MSI, MESI und MOESI sind Protokolle, die den Cache-Zeilen der einzelnen Caches eines Mehrkernsystems Zustände zuweisen, damit die Daten derselben Adresse nicht inkonsistent werden. MSI ist die Grundform mit nur drei Zuständen: Modified, Shared und Invalid. MESI ergänzt Exclusive (nur dieser Cache hält die Zeile, Inhalt identisch mit dem Speicher), wodurch beim Schreiben auf Daten, die kein anderer Kern hält, die Buskommunikation entfällt. MOESI fügt zusätzlich den Zustand Owned hinzu, sodass geänderte Daten mit anderen Caches geteilt werden können, ohne sie in den Speicher zurückzuschreiben.

MerkmalMSIMESIMOESI
Anzahl der Zustände3 (M, S, I)4 (M, E, S, I)5 (M, O, E, S, I)
Modified (M)Nur dieser Cache hält die Zeile; Inhalt weicht vom Speicher abGleichGleich
Shared (S)Andere Caches halten die Zeile möglicherweise auch. Inhalt identisch mit dem SpeicherGleichAndere Caches halten die Zeile möglicherweise auch. Inhalt kann vom Speicher abweichen (wenn eine Zeile im Zustand O existiert)
Exclusive (E)Nicht vorhandenNur dieser Cache hält die Zeile; Inhalt identisch mit dem SpeicherVorhanden (wie bei MESI)
Owned (O)Nicht vorhandenNicht vorhandenInhalt weicht vom Speicher ab, wird aber von anderen Caches im Zustand S geteilt. Trägt die Verantwortung für das Rückschreiben in den Speicher
Lesen von Daten, die kein anderer Kern hältZeile wird im Zustand S geladenZeile wird im Zustand E geladenZeile wird im Zustand E geladen
Anschließendes SchreibenFür den Wechsel von S nach M muss eine Anfrage zum Invalidieren der anderen Kopien auf den Bus o. Ä. gesendet werdenWechsel von E nach M ohne KommunikationWechsel von E nach M ohne Kommunikation
Ein anderer Kern liest eine M-ZeileRückschreiben in den Speicher, beide wechseln nach SRückschreiben in den Speicher, beide wechseln nach S (Daten werden teils direkt aus dem Cache übergeben)Daten werden ohne Rückschreiben übergeben; der eigene Cache wechselt nach O, der andere nach S
Rückschreiben in den SpeicherJedes Mal, wenn ein anderer Kern eine geänderte Zeile liestJedes Mal, wenn ein anderer Kern eine geänderte Zeile liestKann aufgeschoben werden, bis die O-Zeile verdrängt wird
Zustandsbits und Komplexität2 Bit. Am einfachsten2 Bit. Mittel3 Bit. Am komplexesten

Die Zahlenwerte sind typische Größenordnungen und variieren je nach Prozessgeneration und Produkt.

Wann welche Variante?

MSI
Als Grundform zum Erlernen der Kohärenzmechanismen; wenn die Zustandsübergänge so einfach wie möglich sein sollen.
MESI
Wenn viele Lese- und Schreibzugriffe auf Daten erfolgen, die nur ein Kern nutzt. Dank des Zustands E entfällt bei Lesen-dann-Schreiben die Kommunikation. Bildet die Grundlage der Protokolle vieler Mehrkern-CPUs.
MOESI
Wenn Kerne geänderte Daten häufig untereinander weitergeben; wenn Rückschreibvorgänge in den Speicher reduziert und Speicherbandbreite gespart werden soll.

Häufige Fragen

Was bringt der Zustand E bei MESI?

Liest ein Kern Daten, die kein anderer Kern hält, gelangt die Zeile in den Zustand E und kann bei einem anschließenden Schreibzugriff ohne Benachrichtigung anderer Kerne nach M wechseln. Bei MSI wird die Zeile im gleichen Fall im Zustand S geladen, sodass bei jedem Schreiben eine Invalidierungsanfrage nötig ist. Bei Lesen-dann-Schreiben auf Daten, die nur ein Thread nutzt, verringert sich so die Buskommunikation.

Was bringt der Zustand O bei MOESI?

Liest ein anderer Kern geänderte Daten (Zustand M), werden sie bei MESI erst in den Speicher zurückgeschrieben und dann geteilt. Bei MOESI werden die Daten ohne Rückschreiben direkt zwischen den Caches übergeben, und der ursprüngliche Cache behält im Zustand O die Verantwortung für das Rückschreiben. So werden Schreibzugriffe auf den Speicher reduziert.

Was ist der Unterschied zwischen den Zuständen E und M?

In beiden Fällen hält nur der eigene Cache die Zeile. Im Zustand E ist der Inhalt identisch mit dem Speicher, daher ist beim Verdrängen kein Rückschreiben nötig. Im Zustand M wurde die Zeile geändert und weicht vom Speicher ab, daher muss sie beim Verdrängen zurückgeschrieben werden.

Werden diese Protokolle mit Snooping oder mit Verzeichnissen eingesetzt?

Mit beidem. MSI, MESI und MOESI legen fest, wie die Zustände der Zeilen definiert sind; das ist unabhängig davon, wie andere Caches benachrichtigt werden (Snooping, das einen gemeinsamen Bus o. Ä. überwacht, oder verzeichnisbasiert, wobei die Besitzer der Zeilen protokolliert werden).

Verständnis prüfen

Welche Kombination der vier Zustände des Cache-Kohärenz-Protokolls MESI ist richtig?

  1. AMemory, Execute, Store, Index
  2. BModified, Exclusive, Shared, Invalid
  3. CMiss, Evict, Swap, Idle
Antwort und Erläuterung anzeigen

Antwort: B. Modified, Exclusive, Shared, Invalid

Bei MESI befindet sich jede Cache-Zeile in einem der Zustände Modified (verändert, nur dieser Kern besitzt sie), Exclusive (unverändert, nur dieser Kern besitzt sie), Shared (mehrere Kerne besitzen denselben Inhalt) oder Invalid (ungültig). Der Zustand wechselt jedes Mal, wenn der Kern liest oder schreibt oder von Lese- und Schreibvorgängen anderer Kerne erfährt, und verhindert so Inkonsistenzen bei Daten derselben Adresse.

Was bedeutet es, wenn sich eine Cache-Zeile beim MESI-Protokoll im Zustand Modified (M) befindet?

  1. ANur dieser Kern besitzt die Zeile, und ihr Inhalt unterscheidet sich vom Hauptspeicher (Rückschreiben nötig)
  2. BMehrere Kerne besitzen denselben Inhalt, der auch mit dem Hauptspeicher übereinstimmt
  3. CDer Inhalt der Zeile ist nicht nutzbar, und zum Lesen muss sie erneut geholt werden
Antwort und Erläuterung anzeigen

Antwort: A. Nur dieser Kern besitzt die Zeile, und ihr Inhalt unterscheidet sich vom Hauptspeicher (Rückschreiben nötig)

Im M-Zustand hat dieser Kern geschrieben und besitzt als einziger den aktuellen Wert. Der Wert im Hauptspeicher ist veraltet, daher muss der aktuelle Wert beim Verdrängen der Zeile oder wenn ein anderer Kern lesen will, zurückgeschrieben oder direkt übergeben werden. In eine Zeile im M-Zustand kann beliebig oft geschrieben werden, ohne andere Kerne zu informieren; schreibt derselbe Kern aufeinanderfolgend, ist die Verarbeitung daher schnell.

Was geschieht beim MESI-Protokoll, wenn der Kern in eine Zeile im Zustand Exclusive (E) schreibt?

  1. AAllen anderen Kernen wird eine Invalidierungsanforderung gesendet, bevor geschrieben wird
  2. BSchreiben ist nicht möglich, daher wird erst in den Hauptspeicher geschrieben und neu gelesen
  3. CAndere Kerne müssen nicht informiert werden, und die Zeile wechselt direkt in den M-Zustand
Antwort und Erläuterung anzeigen

Antwort: C. Andere Kerne müssen nicht informiert werden, und die Zeile wechselt direkt in den M-Zustand

Der E-Zustand bedeutet, dass nur dieser Kern die Zeile besitzt und ihr Inhalt mit dem Hauptspeicher übereinstimmt. Da bekannt ist, dass keine anderen Kerne Kopien haben, kann beim Schreiben ohne Invalidierungsmitteilung in den M-Zustand gewechselt werden. Der Vorteil des E-Zustands ist, dass bei der häufigen Verarbeitung, Daten, die nur ein Kern verwendet, erst zu lesen und dann zu schreiben, Kommunikation eingespart wird. Beim Schreiben aus dem S-Zustand müssen dagegen andere Kopien ungültig gemacht werden.

  1. Was geschieht bei einem Kohärenzprotokoll vom Invalidierungstyp, wenn ein Kern in eine Zeile im Zustand Shared (S) schreibt?
  2. Was geschieht allgemein beim MESI-Protokoll, wenn Kern 1 eine Zeile lesen will, die Kern 0 im Zustand Modified (M) hält?
  3. Welche Aussage zum Snooping-Verfahren der Cache-Kohärenz ist richtig?

Übungsfragen zu Multicore und Synchronisation

Wichtige Begriffe erklärt

MESI-Protokoll
Kohärenzprotokoll, das jede Cache-Line in einem der vier Zustände Modified, Exclusive, Shared und Invalid verwaltet. Beim Schreiben werden die Kopien anderer Kerne ungültig gemacht.
Cache-Kohärenz
Mechanismus in Mehrkern-CPUs, der die Konsistenz sicherstellt, wenn mehrere Kerne Daten derselben Adresse in ihren Caches halten. Schreibt ein Kern, werden z. B. die veralteten Kopien in anderen Kernen für ungültig erklärt.
Snooping
Kohärenzverfahren, bei dem jeder Cache Lese- und Schreibzugriffe anderer Kerne auf dem gemeinsamen Bus überwacht und den Zustand seiner eigenen Zeilen ändert. Eignet sich bei wenigen Kernen.
Cache-Zeile (Cache Line)
Einheit, in der Daten zwischen Cache und der darunterliegenden Hierarchieebene gelesen und geschrieben werden. Auch Cache-Block genannt. Bei vielen CPUs 64 Byte; die niederwertigen Adressbits geben die Position (Offset) in der Zeile an.
Verzeichnisbasiertes Kohärenzprotokoll (Directory)
Kohärenzverfahren, das in einer Tabelle vermerkt, welcher Kern welche Zeile besitzt, und nur die betroffenen Kerne benachrichtigt. Wird in Systemen mit vielen Kernen eingesetzt.

Verwandte Vergleiche