1つのキャッシュについて
1.1キャッシュキャッシュマッピングルール
ビューキャッシュタグが一致し、セットインデックス
|タグ|セットインデックス|オフセットブロック|
| 20ビット| 7ビット| 5ビット|
1.2キャッシュ構成
フルアソシアティブキャッシュ
関連するキャッシュ・グループの
キャッシュは4ウェイセットに関連付けられています
四方セットアソシエイト:
キャッシュ128は、キャッシュセット(0で表される基と関連していないが、0は完全連想フルアソシアティブキャッシュを表す)を含む
。各キャッシュは4つのキャッシュSETライン(4、同じデータがキャッシュ内の4つの位置でもよいが含まバッファ)
各キャッシュラインサイズが32バイトであります
PIPTインデックス物理アドレス物理アドレスラベル
VIPT仮想アドレスインデックス物理アドレスラベル
VIVT仮想アドレスの仮想アドレスタグインデックス
2キャッシュ・コヒーレンシMESIプロトコル
メモリ管理の最小単位として適合キャッシュラインに
2.1 MESIプロトコル状態
独占&変性された変性:他のCPUのキャッシュはライトバックキャッシュメモリに必要スワップアウトされ、無効である
排他的な独占:他のCPUのキャッシュが無効である、
このコンテンツ共有シェアをレポート:他のCPUのキャッシュが共通の読み取りを共有することができますキャッシュは
無効無効:有効にするに読み込む必要、キャッシュが無効であることを示し、
2.2 MESIプロトコルメッセージ
読み:特定のキャッシュを読むために示し
レスポンスをお読みください。chacheまたは他のメモリは、応答コマンドをお読みください。
無効化:CPUは、後続のすべての無効化CPUを受信アクノリッジ、無効として、他のデータ・キャッシュに通知します。
アクノリッジ無効:他のすべてのキャッシュは、データ無効化除去した後に送信される応答コマンドを受信します。
無効を読む:+無効を読んで、応答し、すべてのCPUを読ん無効アクノリッジ受け取ることを期待しています。
ライトバック:ライトバック時の問題の修正状態のキャッシュライン。
2.3 MESI状態遷移
状態遷移|ターゲット状態 原状 |
変更されました | 排他的 | 共有 | 無効 |
変更されました | M-> E 書き戻し操作を実行 キャッシュラインのデータがメモリに書き戻されます |
M-> S 読み込み要求を受け 読み取り応答を送信します |
M-> I 無効化要求が受信された読みます 最新のデータを提供し、読み取りレスポンスを送信 データをクリア 無効アクノリッジを送信 |
|
排他的 | E-> M キャッシュラインは、データを書き込み、CPU |
E-> S 読み込み要求を受け 読み取り応答を送信します |
E-> I 受信したリード無効化 最新のデータを提供し、読み取りレスポンスを送信 データをクリア 無効アクノリッジを送信 |
|
共有 | S-> M アトミックなread-modify-write操作を実行 送信無効化 受信無効アクノリッジ |
S-> E 送信無効化 受信無効アクノリッジ |
S-> I 無効化を受け取ります データをクリア 無効アクノリッジを送信 |
|
無効 | I-> M アトミックなread-modify-write操作を実行 読み取り無効を送信 最新のデータ転送への読み取り応答を受信します 受信無効アクノリッジ |
I-> E 読み取り無効を送信 最新のデータ転送への読み取り応答を受信します 受信無効アクノリッジ |
I-> S 読み取りを送ります 最新のデータ転送への読み取り応答を受信します |
3. MESIプロトコルの最適化問題発生します
3.1ストアバッファの導入
メモリキャッシュへの書き込みをされていない場合、それは最初のストア・バッファに書き込まれます
これは、実際の書かれた順序を確認するために、他のCPUの書き込み順序は同じ問題ではない可能性があります。
3.2無効化キューの導入
CPUはアクノリッジ無効化無効化キューに直接戻り無効に無効化コマンドを受信します。
データを読むための読み取り操作が失敗した原因が、無効化キュー内のコマンドキューイングの障害が発生します。
4メモリバリア
記載されている問題を解決する方法については4.1メモリバリア
書き込みメモリバリア:マーク現在のストアバッファ内のすべての項目は、マークされている場合、後続のストアバッファストア内の項目は、ストアに保存されますが、キャッシュに直接書き込むことはありません。
店舗WMB前に最初に完了した後、WMB後に店を完了しなければならないCPUの実行現象。
メモリバリアを読む:無効化キューのメッセージの処理が完了しています。
実行現象は、CPUの負荷が人民元前に完了した後、元の後に負荷を完了しなければならないです。
4.2 Linuxの定義メモリバリア
Linuxの定義されたミューテックスプリミティブ(スピンロック、リーダ・ライタロックセマフォ、RCU ...)必要な暗黙のメモリバリアプリミティブです。
4.2.1コンパイラの最適化バリア障壁()
主な問題コンパイラの最適化リメイク
4.2.2メモリの最適化の障壁
コンパイラの並び替え命令にマクロメモリの最適化コンパイラの最適化の障壁を含む内部の障壁
書き込みメモリバリア(smp_wmb())、読み取りメモリバリア(smp_rmb())、メモリバリア(smp_mb()):
主にCPU間の相互作用を確保するために使用されます
smp_read_barrier_depends()依存性を示す(例えば、動作は、メモリアドレスに直前の操作後に採取された)のみ空でないアルファで実現されます。
mmiowb():保護MMIO書き込み操作シーケンスのスピンロック保護。いくつかのCPUアーキテクチャプラットフォームは、メモリバリア操作スピンロックが既にMMIを確保するために書き込まれ、その後、マクロは空です。TODO:特定のMMIOを理解していません
版本メモリバリアアップ:WMB()、人民元()、メガバイト()、read_barrier_depends()。
主にCPUと周辺の相互作用を確実にするために使用されます
5プロセッサ関連
5.1 ARM
DMB(データメモリバリア):あなたが観察された順序を制約する、メモリ動作(店舗又は店舗+負荷)の種類と範囲(単一のプロセッサ、プロセッサ内部、外部世界のセット)を指定することができます。
DSB(データ同期バリア):実行上の実際の制約。
ISB(命令同期バリア):キャッシュ・リフレッシュ・コマンド、実行後修飾命令の可視部分の前にいることを保証します。
参考文献:
http://www.wowotech.net/kernel_synchronization/Why-Memory-Barriers.html
http://www.wowotech.net/kernel_synchronization/why-memory-barrier-2.html