MESIプロトコル
出典: フリー百科事典『ウィキペディア(Wikipedia)』
MESIプロトコル(別名、イリノイ・プロトコル)とは、マルチプロセッサシステムでメモリやキャッシュメモリの同期をとるプロトコルであり、広く使われている。
インテルは、「486プロセッサで以前から使われていたライトスルーキャッシュに加えて、より効率的なライトバックキャッシュをサポートする」としてPentiumプロセッサでMESIプロトコルを採用した。
[編集] 概要
各キャッシュラインは以下の4状態のいずれかにある。状態はキャッシュラインのタグに含まれる。
- M - Modified(変更): 当該キャッシュだけに存在し、主記憶上の値から変更されている(dirty)。他のCPUがこのキャッシュラインに相当する主記憶をリードするのを許可する前に、キャッシュ機構はこのキャッシュラインをいずれかの時点で主記憶に書き戻さなければならない。
- E - Exclusive(排他): 当該キャッシュだけに存在するが、主記憶上の値と一致している(clean)。
- S - Shared(共有): システム内の他のキャッシュにも同じキャッシュラインが存在している(主記憶とも内容が一致)。
- I - Invalid(無効): このキャッシュラインは無効。
Invalid状態以外のキャッシュラインはリード要求を満たすことができる。Invalid状態のラインにリード要求が来た場合、主記憶から内容を読み込む必要がある(Shared か Exclusive 状態に遷移する)。
ライト要求を実行できるのは、Modified状態かExclusive状態の場合のみである。Shared状態なら、書き込みを行う前にシステム内の他のキャッシュ(の該当するキャッシュライン)を Invalid 状態にしなければならない。これは、通常ブロードキャスト操作で実行される。
キャッシュ機構は Modified状態以外のキャッシュラインをいつでも捨てて Invalid状態にすることができる。Modified状態のラインは必ず主記憶に書き戻さなければならない。
Modified状態のキャッシュラインを持つキャッシュ機構は、バス上の流れを監視して(バススヌープ)、対応する主記憶上の位置へのリード要求をインターセプトして、自身の持つキャッシュラインの内容を主記憶に書き戻し、そのキャッシュラインの状態を Shared に遷移させる。
Shared 状態のキャッシュラインを持つキャッシュ機構もバススヌープによって他のCPUからの無効化要求を受け取り、対応するラインを捨てる(Invalid状態に遷移させる)。
Exclusive状態のキャッシュラインを持つキャッシュ機構もバススヌープで他のCPUのトランザクションを監視し、対応するアドレス範囲へのアクセスがあったら Shared 状態へ遷移させる。
Modified状態とExclusive状態は、システム内のそのキャッシュラインの所有権を有しているため、明確である。Shared 状態はあいまいなところがあり、他のCPUのキャッシュが該当キャッシュラインを捨てたときに実際には Exclusive状態になるべき場合があるが、そのような遷移は通常行われない(そのためにはブロードキャストが必要だが、実際問題としてあまり意味が無い)。
そういった意味では Exclusive状態というのは若干日和見的な最適化である。Shared状態のキャッシュラインに変更を加える場合、無効化要求をブロードキャストする必要があると規定することで、Exclusive状態のキャッシュラインの更新はトランザクションを必要としないのである。
[編集] その他のキャッシュプロトコル
- MSIプロトコル: Exclusive状態を持たないキャッシュプロトコル。ライト要求を処理する際に、Shared状態からModified状態へ遷移し、他のCPUの該当キャッシュラインを無効化する。この場合、書き込みを行う場合には常に無効化のブロードキャストが必要となる。
- MOSIプロトコル:Exclusive状態の代わりに Owned(所有)状態のあるキャッシュプロトコル。ただし、Owned状態のキャッシュラインは dirty であり、主記憶への書き戻しが必要である。Modified状態のキャッシュラインに相当するアドレスに他のCPUがリード要求を発行したときに、Owned状態に遷移する。Owned状態のキャッシュラインを持つキャッシュ機構は、当該アドレス範囲へのリード要求に対して主記憶の代わりに応答する。すなわち、そのキャッシュラインは他のCPUでは Shared 状態となっている。Owned状態でさらに変更を加える際には、他のCPUに変更内容をブロードキャストし、当該キャッシュラインを Shared状態で持っているキャッシュの内容が不一致を起こさないようにしなければならない。
- MOESIプロトコル:MESIプロトコルに Owned状態を加えたキャッシュプロトコル。
MOSIプロトコルやMOESIプロトコルは、主記憶への書き込みよりもCPU間のやりとりの方が格段に高速と言える場合に効果を発揮する。そうでない場合、Owned状態のキャッシュラインの更新のたびに更新内容をブロードキャストするため、性能低下を招く可能性がある。