MOESI プロトコル(MOESI: モエシ)
英語表記: MOESI Protocol
概要
MOESIプロトコルは、マルチコアプロセッサ環境において、複数のCPUコアがそれぞれ持つローカルキャッシュメモリの内容の一貫性(キャッシュコヒーレンシ)を維持するための重要な仕組みです。これは、広く使われているMESIプロトコル(Modified, Exclusive, Shared, Invalid)を拡張し、「Owned(所有)」状態を追加することで、特にキャッシュ間でのデータ転送効率を高めることを目的としています。「CPUの仕組み(命令セット, パイプライン) → マルチコアと SMT → キャッシュコヒーレンシ」という文脈の中で、並列処理の性能を決定づける、非常に重要な調整役を担っています。
詳細解説
キャッシュコヒーレンシの必要性とMOESIの役割
現代のCPUは、複数のコア(マルチコア)を持ち、さらに一つのコア内で複数のスレッドを並列処理するSMT(Simultaneous Multi-Threading)技術を採用しています。これらのコアは、高速化のためにメインメモリよりも遥かに速いキャッシュメモリをそれぞれ独立して持っていますが、ここで問題となるのが「キャッシュコヒーレンシ」です。あるコアがデータを変更したにもかかわらず、別のコアが古いキャッシュデータを使ってしまうと、プログラムは誤動作してしまいます。これは、並列処理の信頼性を根本から揺るがす問題ですので、絶対に避けなければなりません。
MOESIプロトコルは、このコヒーレンシ問題を解決するために、キャッシュライン(キャッシュメモリの最小単位)が現在どのような状態にあるかを定義し、その状態に基づいてコア間のデータのやり取りやメインメモリへの書き込みを厳格に制御しています。私たちが普段、マルチコアPCでサクサクと作業ができるのは、このプロトコルが裏で常にデータの整合性を監視してくれているおかげなのですね。
MOESIの5つの状態
MOESIは、キャッシュラインが取りうる以下の5つの状態の頭文字を取っています。この5つの状態を理解することが、MOESIプロトコルの動作を把握する鍵となります。
- Modified (M: 変更済み)
- データがこのコアのキャッシュでのみ存在し、かつメインメモリの内容よりも新しい状態に変更されていることを示します。このデータをメインメモリへ書き戻す責任(ライトバック)はこのコアにあります。
- Owned (O: 所有)
- MOESIプロトコルの核心となる追加状態です。この状態にあるデータは、メインメモリの内容とは異なっていますが、他のコアもそのデータをShared(共有)状態として持っていることを示します。M状態との大きな違いは、O状態では変更されたデータが他のコアに共有されていても良い、という点です。
- O状態のコアは、他のコアからの読み出し要求があった際、低速なメインメモリではなく、自身のキャッシュから