cache coherency protocols
DESCRIPTION
shallow dive into cache coherency protocols, such as MESI/ MOESITRANSCRIPT
$2014/08/26 鴨島 潤
$?
$ = cash ≒ cache
キャッシュとは• 遅いメインメモリへのアクセス結果をCPUから近いところに保存しておき、次回アクセス時にはその結果を返す機構
• アクセスの連続性に着目
伝統的なキャッシュ機構• L1/L2/L3/L4キャッシュ階層
• 32bytes - 64bytes単位での管理
• キャッシュライン
• write-through/write-back
• write-throughは書き込みを常に次のレベルのキャッシュに伝搬、write-backはフラグだけつけておいて後のタイミングで伝搬
L2$
L1D$ L1I$
REG
MEM
BUS
シングルプロセッサでは これでうまく行く…
マルチプロセッサにおける キャッシュ自分がキャッシュに保持しているデータが、他のプロセッサから書き換えられていたらどうしよう?
自分がメインメモリから読もうとしているデータ、他のプロセッサに最新のコピーがあるんじゃないの?
この先は、write-back 前提で行きます
write-backキャッシュのステート• invalid/not-present
• キャッシュ上に存在しないか、無効化操作を行った状態
• clean
• 読み込み後に変更されていないか、書き込み内容を次のレベルに反映済みの状態
• dirty
• 書き込みを行って、その内容が次のレベルに反映されていない状態
モダンなキャッシュ• スヌープキャッシュ
• CPU間でキャッシュの情報を融通し合う
• キャッシュプロトコル
• キャッシュの情報をやり取りするためのプロトコル
L2$
L1D$ L1I$
REG
MEM
L2$
L1D$ L1I$
REG
BUS
L2$
L1D$ L1I$
REG
MEM
L2$
L1D$ L1I$
REG
BUS
キャッシュプロトコルの例: MESI• 各々のキャッシュラインは以下のステートのどれかを持つ
• MODIFIED, EXCLUSIVE, SHARED, INVALID
• 各コアはバスでつながっており、バスに流れた内容を読むことができる
• IA-32アーキテクチャはMESIを採用
INVALIDステート
メモリの中身がどのキャッシュにも存在しないか、データが古くなっていることがわかっている状態 !まったくアクセスされていないか、キャッシュ無効化操作を行うことによってINVALIDに遷移する
I
EXCLUSIVEステート
メインメモリからの読み込み後、他のコアから同じラインへのアクセスを行っていない状態 !
他のコアからは、INVALIDに見える
E
SHAREDステート
他のコアがEXCLUSIVEで保有しているラインへアクセス要求を出すと、そのコアも含めてSHAREDに遷移する
!書き込みを行おうとするとMODIFIEDに遷移し、他のコアが保有するラインはINVALIDになる
S
MODIFIEDステート
ローカルで書き込みを行った状態。他のステートに遷移する際に、必ず次のレベルに書き戻しを行う !
他のコアからは、EXCLUSIVEのときと同じくINVALIDに見える
M
シングルコアとの共通点• INVALID, SHARED, MODIFIEDはそれぞれ
invalid/not-present, clean, dirtyに相当する
• EXCLUSIVEの意味は?
EXCLUSIVEの存在意義• あるコアがとあるラインを(今後の書き込みのために)占有したい場合、バスにリクエストを出す
• このときそのラインは当該コアからはEステート、別のコアではIステートに遷移する
• 「自分がキャッシュに保持しているデータが、他のプロセッサから書き換えられていたらどうしよう?」問題の解
MESIプロトコルにおいて 見落としがちな点あるコアがラインに読み込みリクエストを出すと、別のコアがMODIFIEDなラインを書き戻すかもしれない
!書き込みを行う前に、Eステートに遷移してラインの内容をキャッシュに持ってくることになる(Read-for-Ownership)
MOESIプロトコル• AMD64で採用
• Oは「OWNED」
• MODIFIEDなラインを他のコアが読み込み要求した際に、メモリを介さず直接ラインデータを送れるようになっている
OWNEDステート
MODIFIEDなラインに他のコアから読み出しがあった際にOWNEDに遷移する
!他のコアからはSHAREDに見える
!dirtyなデータを他のコアに直接送れる
O
参考• コンピュータアーキテクチャの話 14 キャッシュの構造や働き(上級編) - MOESIプロトコル
• http://news.mynavi.jp/column/architecture/014/
• Cache coherency primer
• http://fgiesen.wordpress.com/2014/07/07/cache-coherency/