MOESI adds Owned: a dirty sharer that forwards data without writing back. MESIF adds Forward: one designated clean sharer that answers instead of memory.
Both keep single-writer semantics. They differ only in which cache answers a read without touching memory.
Protocol | Extra state | Saving | Cost |
|---|---|---|---|
MSI | None; baseline | Simplest to verify | Every private write pays invalidations |
MESI | E: clean exclusive | Silent upgrades for private data | Needs sharer tracking at miss time |
MOESI | O: dirty shared forwarder | No writeback on dirty-to-shared transfers | Dirty sharing complicates eviction |
MESIF | F: clean designated forwarder | One responder, fewer memory fetches | Forwarder election on every sharing change |
Snooping broadcasts every miss to every cache. A directory tracks sharers per line and probes only them.
Broadcast is simple and fast at small core counts. Its probe traffic grows with cores, while directory traffic grows with sharers.
Axis | Snoop broadcast | Directory |
|---|---|---|
Probe fanout per miss | Every other core | Only recorded sharers |
State cost | None beyond cache tags | Sharer bits on every line |
Best when | Few cores, mostly private lines | Many cores with real sharing |
Organization and protocol are separate axes. Any of MSI, MESI, MOESI, or MESIF can ride either fabric.
Sharer bits cost area on every line. Assume 2^20 lines and 16 cores.
Directory sharer state, 16 cores, 1 048 576 lines:
bits = 1 048 576 x 16 = 16 777 216 bits
bytes = 16 777 216 / 8 = 2 097 152 B, about 2 MBOwned state saves memory writebacks. Assume 64 B lines and 5 successive reads of one Modified line by 5 different cores.
Five dirty-to-shared transfers, 64 B lines:
MESI: 5 writebacks x 64 B + 5 fetches x 64 B = 320 + 320 = 640 B through memory
MOESI: 5 dirty forwards x 64 B = 320 B cache to cache, 0 writebacks until eviction
saving = 640 - 320 = 320 B of memory traffic, one halfBroadcast sends 15, one per other core. The directory sends 8 targeted probes plus 8 acknowledgements.
MESI performs 5 writebacks plus 5 memory fetches. MOESI performs 0 writebacks until eviction and forwards cache to cache.