MESIプロトコルの状態 じょうたい 遷移 せんい 図 ず
MESIプロトコルのアクティビティ図 ず
MESIプロトコル (別名 べつめい 、イリノイ・プロトコル )とは、マルチプロセッサ システムでメモリ やキャッシュメモリ の同期 どうき をとるキャッシュコヒーレンシ とメモリ一貫 いっかん 性 せい のプロトコルであり、ライトバック方式 ほうしき のキャッシュで広 ひろ く使 つか われている。イリノイ・プロトコルという別名 べつめい はイリノイ大学 だいがく アーバナ・シャンペーン校 こう で開発 かいはつ されたことに由来 ゆらい する。
インテル は、「486 プロセッサで以前 いぜん から使 つか われていたライトスルーキャッシュに加 くわ えて、より効率 こうりつ 的 てき なライトバックキャッシュをサポートする」[ 1] としてPentium プロセッサでMESIプロトコルを採用 さいよう した。そのためパーソナルコンピュータでも広 ひろ く使 つか われている。
各 かく キャッシュラインは以下 いか の4状態 じょうたい のいずれかにある。状態 じょうたい はキャッシュラインのタグに含 ふく まれる(2bit で表 あらわ される)。
M - Modified(変更 へんこう ): 当該 とうがい キャッシュだけに存在 そんざい し、主 しゅ 記憶 きおく 上 じょう の値 ね から変更 へんこう されている(dirty )。他 た のCPUがこのキャッシュラインに相当 そうとう する主 しゅ 記憶 きおく をリードするのを許可 きょか する前 まえ に、キャッシュ機構 きこう はこのキャッシュラインをいずれかの時点 じてん で主 しゅ 記憶 きおく に書 か き戻 もど さなければならない。
E - Exclusive(排他 はいた ): 当該 とうがい キャッシュだけに存在 そんざい するが、主 しゅ 記憶 きおく 上 じょう の値 ね と一致 いっち している(clean )。
S - Shared(共有 きょうゆう ): システム内 ない の他 ほか のキャッシュにも同 おな じキャッシュラインが存在 そんざい している(主 しゅ 記憶 きおく とも内容 ないよう が一致 いっち )。
I - Invalid(無効 むこう ): このキャッシュラインは無効 むこう 。
任意 にんい の2つのキャッシュがあるとき、それぞれの対応 たいおう するキャッシュラインがとりうる状態 じょうたい の組合 くみあわ せは次 つぎ のようになる。
典型 てんけい 的 てき システムでは、複数 ふくすう のキャッシュがメインメモリの接続 せつぞく されたバス を共有 きょうゆう している。それぞれのキャッシュにはCPU が接続 せつぞく されており、それがリード要求 ようきゅう やライト要求 ようきゅう を発行 はっこう する。このようなシステムで全体 ぜんたい として共有 きょうゆう している主 しゅ 記憶 きおく へのアクセスを最小 さいしょう にすることが目的 もくてき である。
Invalid状態 じょうたい 以外 いがい のキャッシュラインはリード要求 ようきゅう を満 み たすことができる。Invalid状態 じょうたい のラインにリード要求 ようきゅう が来 き た場合 ばあい 、主 しゅ 記憶 きおく から内容 ないよう を読 よ み込 こ む必要 ひつよう がある(Shared か Exclusive 状態 じょうたい に遷移 せんい する)。
ライト要求 ようきゅう を実行 じっこう できるのは、Modified状態 じょうたい かExclusive状態 じょうたい の場合 ばあい のみである。Shared状態 じょうたい なら、書 か き込 こ みを行 おこな う前 まえ にシステム内 ない の他 ほか のキャッシュ(の該当 がいとう するキャッシュライン)を Invalid 状態 じょうたい にしなければならない。これは、通常 つうじょう ブロードキャスト操作 そうさ で実行 じっこう され、その操作 そうさ を Read For Ownership (RFO) と呼 よ ぶ。
キャッシュ機構 きこう は Modified状態 じょうたい 以外 いがい のキャッシュラインをいつでも捨 す てて Invalid状態 じょうたい にすることができる。Modified状態 じょうたい のラインは必 かなら ず主 しゅ 記憶 きおく に書 か き戻 もど さなければならない。
Modified状態 じょうたい のキャッシュラインを持 も つキャッシュ機構 きこう は、バス上 じょう の流 なが れを監視 かんし して(バススヌープ )、対応 たいおう する主 しゅ 記憶 きおく 上 じょう の位置 いち へのリード要求 ようきゅう をインターセプトして、それを再 さい 試行 しこう 状態 じょうたい にする。そして自身 じしん の持 も つキャッシュラインの内容 ないよう を主 おも 記憶 きおく に書 か き戻 もど し、そのキャッシュラインの状態 じょうたい を Shared に遷移 せんい させる。
Shared 状態 じょうたい のキャッシュラインを持 も つキャッシュ機構 きこう もバススヌープによって他 た のCPUからの無効 むこう 化 か 要求 ようきゅう を受 う け取 と り、対応 たいおう するラインを捨 す てる(Invalid状態 じょうたい に遷移 せんい させる)。
Exclusive状態 じょうたい のキャッシュラインを持 も つキャッシュ機構 きこう もバススヌープで他 た のCPUのトランザクションを監視 かんし し、対応 たいおう するアドレス範囲 はんい へのアクセスがあったら Shared 状態 じょうたい へ遷移 せんい させる。
Modified状態 じょうたい とExclusive状態 じょうたい は、システム内 ない のそのキャッシュラインの所有 しょゆう 権 けん を有 ゆう しているため、明確 めいかく である。Shared 状態 じょうたい はあいまいなところがあり、他 た のCPUのキャッシュが該当 がいとう キャッシュラインを捨 す てたときに実際 じっさい には Exclusive状態 じょうたい になるべき場合 ばあい があるが、そのような遷移 せんい は通常 つうじょう 行 おこな われない(そのためにはブロードキャストが必要 ひつよう だが、実際 じっさい 問題 もんだい としてあまり意味 いみ が無 な い)。
そういった意味 いみ では Exclusive状態 じょうたい というのは若干 じゃっかん 日和見 ひよりみ 的 てき な最適 さいてき 化 か である。Shared状態 じょうたい のキャッシュラインに変更 へんこう を加 くわ える場合 ばあい 、無効 むこう 化 か 要求 ようきゅう をブロードキャストする必要 ひつよう があると規定 きてい することで、Exclusive状態 じょうたい のキャッシュラインの更新 こうしん はトランザクションを必要 ひつよう としないのである。
Read For Ownership (RFO) はキャッシュコヒーレンシ プロトコルの操作 そうさ の1つで、リードと無効 むこう 化 か ブロードキャストを組 く み合 あ わせたものである。これはあるキャッシュラインに書 か き込 こ む際 さい 、そのキャッシュの当該 とうがい キャッシュラインがExclusive状態 じょうたい でもModified状態 じょうたい でもないときに行 おこな うもので、つまりそのキャッシュラインはMESIプロトコルではShared状態 じょうたい かInvalid状態 じょうたい である。この操作 そうさ により他 た の全 ぜん プロセッサの当該 とうがい キャッシュラインはInvalid状態 じょうたい へと遷移 せんい させられる。RFOトランザクションはそのメモリアドレスに書 か き込 こ むことを前提 ぜんてい としたリード操作 そうさ である。したがってこの操作 そうさ は排他 はいた 的 てき である。それによりそのキャッシュにはデータがもたらされ、他 た の全 ぜん プロセッサの当該 とうがい キャッシュラインは無効 むこう 化 か される。
MSIプロトコル はExclusive状態 じょうたい を持 も たないキャッシュプロトコル。MESIプロトコルでExclusive状態 じょうたい となるような状況 じょうきょう では、Shared状態 じょうたい となる。
Invalid状態 じょうたい のキャッシュラインにCPUからリードを行 おこな う場合 ばあい 、他 た のキャッシュの当該 とうがい キャッシュラインがModified状態 じょうたい でないことを保証 ほしょう しなければならないが、その方式 ほうしき はアーキテクチャによって異 こと なる。一般 いっぱん 的 てき な方式 ほうしき としてはリード要求 ようきゅう のブロードキャストがないかバススヌーピング で監 かん 視 し する。また、キャッシュ内 ない に各 かく キャッシュラインを最近 さいきん リードしたキャッシュがどれかを示 しめ す情報 じょうほう を格納 かくのう しておく方式 ほうしき もある。Modified状態 じょうたい のキャッシュラインを別 べつ のキャッシュが持 も っていた場合 ばあい 、その内容 ないよう を主 おも 記憶 きおく に書 か き戻 もど し、キャッシュライン自体 じたい はShared状態 じょうたい かInvalid状態 じょうたい へと遷移 せんい しなければならない。Modified状態 じょうたい のキャッシュラインが書 か き戻 もど されると、当該 とうがい キャッシュラインへは主 しゅ 記憶 きおく か他 た のShared状態 じょうたい のキャッシュから内容 ないよう を読 よ み込 こ み、Shared状態 じょうたい へと遷移 せんい する。
ライト要求 ようきゅう は当該 とうがい キャッシュラインがModified状態 じょうたい ならローカルにキャッシュに書 か き込 こ むだけで済 す む。Shared状態 じょうたい なら、他 た のキャッシュのShared状態 じょうたい のキャッシュラインを無効 むこう 化 か する必要 ひつよう がある。これもリードと同様 どうよう にバススヌーピングなどで実現 じつげん する。その上 うえ でModified状態 じょうたい に遷移 せんい してローカルにキャッシュにライトを行 おこな う。Invalid状態 じょうたい の場合 ばあい 、他 た のキャッシュのShared状態 じょうたい とModified状態 じょうたい のキャッシュラインを無効 むこう 化 か しなければならない。別 べつ のキャッシュの当該 とうがい キャッシュラインがModified状態 じょうたい なら、そのキャッシュラインの内容 ないよう を主 おも 記憶 きおく に書 か き戻 もど すか、ライト要求 ようきゅう したキャッシュに対 たい して内容 ないよう を送 おく る。なお、一般 いっぱん にCPUのライト要求 ようきゅう はせいぜいワード単位 たんい までであり、キャッシュラインは複数 ふくすう ワードという構成 こうせい が一般 いっぱん 的 てき であるため、Invalid状態 じょうたい でのライト要求 ようきゅう の場合 ばあい 、書 か き込 こ みの前 まえ に当該 とうがい キャッシュライン全体 ぜんたい を読 よ み込 こ んでおく必要 ひつよう がある。
任意 にんい の2つのキャッシュがあるとき、それぞれの対応 たいおう するキャッシュラインがとりうる状態 じょうたい の組合 くみあわ せは次 つぎ のようになる。
MOSIプロトコル はExclusive状態 じょうたい の代 か わりに Owned(所有 しょゆう )状態 じょうたい のあるキャッシュプロトコル。Exclusive状態 じょうたい がないため、MSIプロトコルにOwned状態 じょうたい を加 くわ えたものと見 み たほうがよい(つまりExclusive状態 じょうたい はShared状態 じょうたい に包含 ほうがん されている)。
Owned状態 じょうたい のキャッシュラインは dirty であり、主 しゅ 記憶 きおく への書 が き戻 もど しが必要 ひつよう である。Modified状態 じょうたい のキャッシュラインに相当 そうとう するアドレスに他 た のCPUがリード要求 ようきゅう を発行 はっこう したときに、Owned状態 じょうたい に遷移 せんい する。Owned状態 じょうたい のキャッシュラインを持 も つキャッシュ機構 きこう は、当該 とうがい アドレス範囲 はんい へのリード要求 ようきゅう に対 たい して主 しゅ 記憶 きおく の代 か わりに応答 おうとう する。すなわち、そのキャッシュラインは他 た のCPUでは Shared 状態 じょうたい となっている。Owned状態 じょうたい でさらに変更 へんこう を加 くわ える際 さい には、他 た のキャッシュのShared状態 じょうたい の当該 とうがい キャッシュラインを無効 むこう 化 か して自身 じしん はModified状態 じょうたい へ遷移 せんい するか、他 た のキャッシュに更新 こうしん 内容 ないよう を送 おく ってShared状態 じょうたい を維持 いじ させる(アーキテクチャによって異 こと なる)。
任意 にんい の2つのキャッシュがあるとき、それぞれの対応 たいおう するキャッシュラインがとりうる状態 じょうたい の組合 くみあわ せは次 つぎ のようになる。
MOESIプロトコル はMESIプロトコルに Owned状態 じょうたい を加 くわ えたキャッシュプロトコル。AMD64 で採用 さいよう されている[ 2] 。
任意 にんい の2つのキャッシュがあるとき、それぞれの対応 たいおう するキャッシュラインがとりうる状態 じょうたい の組合 くみあわ せは次 つぎ のようになる。
MESIプロトコルに比 くら べると、dirty なキャッシュラインを持 も っている状態 じょうたい で他 た のキャッシュからリード要求 ようきゅう があっても主 しゅ 記憶 きおく に書 か き戻 もど す必要 ひつよう がないという点 てん が優 すぐ れている。代 か わりにOwned状態 じょうたい のキャッシュラインは他 た のプロセッサに直接 ちょくせつ 変更 へんこう の加 くわ わったデータを送 おく ることができる。これは、キャッシュ間 あいだ のやりとりが主 しゅ 記憶 きおく とのやりとりよりも高速 こうそく な場合 ばあい に有利 ゆうり で、例 たと えばマルチコアCPUでCPU毎 ごと にL2キャッシュがある場合 ばあい などが相当 そうとう する。
しかし、キャッシュラインが clean な場合 ばあい 、Invalid状態 じょうたい のキャッシュがリード要求 ようきゅう したとき応答 おうとう するのは主 しゅ 記憶 きおく であり、Shared状態 じょうたい やExclusive状態 じょうたい のキャッシュラインは応答 おうとう しない。