cache coherency protocols

23
$ 2014/08/26 鴨島

Upload: jun-kamoshima

Post on 27-Jun-2015

297 views

Category:

Software


0 download

DESCRIPTION

shallow dive into cache coherency protocols, such as MESI/ MOESI

TRANSCRIPT

Page 1: Cache Coherency Protocols

$2014/08/26 鴨島 潤

Page 2: Cache Coherency Protocols

$?

$ = cash ≒ cache

Page 3: Cache Coherency Protocols

キャッシュとは• 遅いメインメモリへのアクセス結果をCPUから近いところに保存しておき、次回アクセス時にはその結果を返す機構

• アクセスの連続性に着目

Page 4: Cache Coherency Protocols

伝統的なキャッシュ機構• L1/L2/L3/L4キャッシュ階層

• 32bytes - 64bytes単位での管理

• キャッシュライン

• write-through/write-back

• write-throughは書き込みを常に次のレベルのキャッシュに伝搬、write-backはフラグだけつけておいて後のタイミングで伝搬

Page 5: Cache Coherency Protocols

L2$

L1D$ L1I$

REG

MEM

BUS

Page 6: Cache Coherency Protocols

シングルプロセッサでは これでうまく行く…

Page 7: Cache Coherency Protocols

マルチプロセッサにおける キャッシュ自分がキャッシュに保持しているデータが、他のプロセッサから書き換えられていたらどうしよう?

自分がメインメモリから読もうとしているデータ、他のプロセッサに最新のコピーがあるんじゃないの?

Page 8: Cache Coherency Protocols

この先は、write-back 前提で行きます

Page 9: Cache Coherency Protocols

write-backキャッシュのステート• invalid/not-present

• キャッシュ上に存在しないか、無効化操作を行った状態

• clean

• 読み込み後に変更されていないか、書き込み内容を次のレベルに反映済みの状態

• dirty

• 書き込みを行って、その内容が次のレベルに反映されていない状態

Page 10: Cache Coherency Protocols

モダンなキャッシュ• スヌープキャッシュ

• CPU間でキャッシュの情報を融通し合う

• キャッシュプロトコル

• キャッシュの情報をやり取りするためのプロトコル

Page 11: Cache Coherency Protocols

L2$

L1D$ L1I$

REG

MEM

L2$

L1D$ L1I$

REG

BUS

Page 12: Cache Coherency Protocols

L2$

L1D$ L1I$

REG

MEM

L2$

L1D$ L1I$

REG

BUS

Page 13: Cache Coherency Protocols

キャッシュプロトコルの例: MESI• 各々のキャッシュラインは以下のステートのどれかを持つ

• MODIFIED, EXCLUSIVE, SHARED, INVALID

• 各コアはバスでつながっており、バスに流れた内容を読むことができる

• IA-32アーキテクチャはMESIを採用

Page 14: Cache Coherency Protocols

INVALIDステート

メモリの中身がどのキャッシュにも存在しないか、データが古くなっていることがわかっている状態 !まったくアクセスされていないか、キャッシュ無効化操作を行うことによってINVALIDに遷移する

I

Page 15: Cache Coherency Protocols

EXCLUSIVEステート

メインメモリからの読み込み後、他のコアから同じラインへのアクセスを行っていない状態 !

他のコアからは、INVALIDに見える

E

Page 16: Cache Coherency Protocols

SHAREDステート

他のコアがEXCLUSIVEで保有しているラインへアクセス要求を出すと、そのコアも含めてSHAREDに遷移する

!書き込みを行おうとするとMODIFIEDに遷移し、他のコアが保有するラインはINVALIDになる

S

Page 17: Cache Coherency Protocols

MODIFIEDステート

ローカルで書き込みを行った状態。他のステートに遷移する際に、必ず次のレベルに書き戻しを行う !

他のコアからは、EXCLUSIVEのときと同じくINVALIDに見える

M

Page 18: Cache Coherency Protocols

シングルコアとの共通点• INVALID, SHARED, MODIFIEDはそれぞれ

invalid/not-present, clean, dirtyに相当する

• EXCLUSIVEの意味は?

Page 19: Cache Coherency Protocols

EXCLUSIVEの存在意義• あるコアがとあるラインを(今後の書き込みのために)占有したい場合、バスにリクエストを出す

• このときそのラインは当該コアからはEステート、別のコアではIステートに遷移する

• 「自分がキャッシュに保持しているデータが、他のプロセッサから書き換えられていたらどうしよう?」問題の解

Page 20: Cache Coherency Protocols

MESIプロトコルにおいて 見落としがちな点あるコアがラインに読み込みリクエストを出すと、別のコアがMODIFIEDなラインを書き戻すかもしれない

!書き込みを行う前に、Eステートに遷移してラインの内容をキャッシュに持ってくることになる(Read-for-Ownership)

Page 21: Cache Coherency Protocols

MOESIプロトコル• AMD64で採用

• Oは「OWNED」

• MODIFIEDなラインを他のコアが読み込み要求した際に、メモリを介さず直接ラインデータを送れるようになっている

Page 22: Cache Coherency Protocols

OWNEDステート

MODIFIEDなラインに他のコアから読み出しがあった際にOWNEDに遷移する

!他のコアからはSHAREDに見える

!dirtyなデータを他のコアに直接送れる

O

Page 23: Cache Coherency Protocols

参考• コンピュータアーキテクチャの話 14 キャッシュの構造や働き(上級編) - MOESIプロトコル

• http://news.mynavi.jp/column/architecture/014/

• Cache coherency primer

• http://fgiesen.wordpress.com/2014/07/07/cache-coherency/