MSI・MESI・MOESIの違い:状態の数・Exclusive状態・Owned状態・通信を比較
MSI・MESI・MOESIは、マルチコアの各キャッシュが持つラインに状態をつけて、同じアドレスのデータが食い違わないようにするプロトコルです。MSIはModified・Shared・Invalidの3つの状態だけの基本形です。MESIはExclusive(自分だけが持ち、メモリと同じ内容)を加え、ほかのコアが持っていないデータへの書き込みで、バスへの通信を省けます。MOESIはさらにOwned状態を加え、書き換えたデータをメモリに書き戻さないまま、ほかのキャッシュと共有できます。
| 項目 | MSI | MESI | MOESI |
|---|---|---|---|
| 状態の数 | 3つ(M、S、I) | 4つ(M、E、S、I) | 5つ(M、O、E、S、I) |
| Modified(M) | 自分だけが持ち、内容はメモリと違う | 同じ | 同じ |
| Shared(S) | ほかのキャッシュも持っている可能性がある。内容はメモリと同じ | 同じ | ほかのキャッシュも持っている可能性がある。内容はメモリと違うこともある(O状態のラインがあるとき) |
| Exclusive(E) | なし | 自分だけが持ち、内容はメモリと同じ | あり(MESIと同じ) |
| Owned(O) | なし | なし | 内容はメモリと違うが、ほかのキャッシュもSで共有している。メモリへの書き戻しの責任を持つ |
| ほかに持つコアがないデータを読んだとき | S状態で入る | E状態で入る | E状態で入る |
| そのデータに書き込むとき | SからMに変えるため、ほかのコピーを無効にする要求をバスなどに出す | EからMへ、通信なしで変われる | EからMへ、通信なしで変われる |
| Mのラインをほかのコアが読んだとき | メモリに書き戻し、両方ともS状態になる | メモリに書き戻し、両方ともS状態になる(データはキャッシュから直接渡すこともある) | 書き戻さずにデータを渡し、自分はO状態、相手はS状態になる |
| メモリへの書き戻し | 変更されたラインがほかのコアに読まれるたびに起こる | 変更されたラインがほかのコアに読まれるたびに起こる | O状態のラインが追い出されるときまで遅らせられる |
| 状態を表すビット数と複雑さ | 2ビット。最も簡単 | 2ビット。中くらい | 3ビット。最も複雑 |
数値は代表的な目安で、世代や製品によって異なります。