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.
| Merkmal | MSI | MESI | MOESI |
|---|---|---|---|
| Anzahl der Zustände | 3 (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 ab | Gleich | Gleich |
| Shared (S) | Andere Caches halten die Zeile möglicherweise auch. Inhalt identisch mit dem Speicher | Gleich | Andere Caches halten die Zeile möglicherweise auch. Inhalt kann vom Speicher abweichen (wenn eine Zeile im Zustand O existiert) |
| Exclusive (E) | Nicht vorhanden | Nur dieser Cache hält die Zeile; Inhalt identisch mit dem Speicher | Vorhanden (wie bei MESI) |
| Owned (O) | Nicht vorhanden | Nicht vorhanden | Inhalt 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ält | Zeile wird im Zustand S geladen | Zeile wird im Zustand E geladen | Zeile wird im Zustand E geladen |
| Anschließendes Schreiben | Für den Wechsel von S nach M muss eine Anfrage zum Invalidieren der anderen Kopien auf den Bus o. Ä. gesendet werden | Wechsel von E nach M ohne Kommunikation | Wechsel von E nach M ohne Kommunikation |
| Ein anderer Kern liest eine M-Zeile | Rückschreiben in den Speicher, beide wechseln nach S | Rü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 Speicher | Jedes Mal, wenn ein anderer Kern eine geänderte Zeile liest | Jedes Mal, wenn ein anderer Kern eine geänderte Zeile liest | Kann aufgeschoben werden, bis die O-Zeile verdrängt wird |
| Zustandsbits und Komplexität | 2 Bit. Am einfachsten | 2 Bit. Mittel | 3 Bit. Am komplexesten |
Die Zahlenwerte sind typische Größenordnungen und variieren je nach Prozessgeneration und Produkt.