コヒーレンシプロトコル

最近、コヒーレンシプロトコルについて調べていたのでまとめる。

MSI、MESI、MOSI、MOESIはマイナビジャーナルの記事がとても参考になるので、そっちを参照することとする。「マイナビ MESI」とかで検索すれば出る。

各プロトコルの内容を理解した後、ひとつ疑問が出る。L2キャッシュなど多階層のキャッシュの場合はどうするのだ。特に、最近のプロセッサは最下位層のL2かL3をコア共通で持っていることがある。そういう場合はどうするのか。
調べてもL1キャッシュしかない場合のことしか想定していないのが多い。
いろいろ調べた結果、「Cache Coherence Techniques Silvia Lametti」というpdfがコヒーレンシのことについてよく書かれていて参考になった。

前提として、インクルーシブキャッシュを用いる。これにより最下位の共有キャッシュを見るだけで、上位層のデータの存在を確かめられる。
また、MOSI、MOESIプロトコルではキャッシュ同士でデータを転送し合うということを行っていたけれど、共有キャッシュの場合、L1 キャッシュでキャッシュミスが発生した場合,共有キャッシュにアクセスされる。だから、L1キャッシュ間での転送を行えないと思う。
大事な点は、Modified-But-Stale という状態を共有キャッシュに追加する必要がある点だ(stale とは古いとか無効の意味)。

インテルのNehalemだとMESIFらしい。 FはForward。

coherency

その他カテゴリの記事