キャッシュメモリの動き
- 命令を読み出して、命令の内容を元に、メモリからレジスタにデータを読み出す。
- レジスタ上のデータを元に計算する
- 計算結果をメモリに書き戻す
...
メモリからレジスタにデータを読み出す際は、まずキャッシュメモリにキャッシュラインという単位でデータを読み出した上で、そのデータをレジスタに読み出します。キャッシュラインのサイズはCPUごとに決まっています。この処理はハードウェアによるものでカーネルは関与しません。
気づき
レジスタに読み出される時はキャッシュラインという単位でデータが移動するのか。
ダーティ
メモリへの書き込みの前にキャッシュメモリに書きます。この時キャッシュラインには、メモリから読み出してからデータが変更されたことを示す印をつけます。このような印をつけられたキャッシュラインを「ダーティである」と表現します。
気づき
CPUに書き戻されたデータはダーティという印をつけられるのか。そうすることで処理済かどうかを判断する
キャッシュメモリ内に存在しないデータにアクセスする場合
既存のキャッシュラインのうちの一つを破棄して、空いたキャッシュラインに新しいデータを入れます。
破棄するデータがダーティではない場合
キャッシュライン上のデータを一つ破棄した上で、当該アドレスのデータを今空けたキャッシュラインにコピーします。
破棄するデータがダーティではない場合
対応するデータを書き込んでクリーンにした上で破棄します。
気づき
キャッシュ内に無いデータばかりアクセスするとスラッシングが起きて性能が落ちる。
参照の局所性
CPUが使うデータが全てキャッシュメモリに存在する場合、CPSがメモリからレジスタにデータを読み出す命令実行じに、キャッシュメモリにしかアクセスせずに済みます。
時間的局所性
ある時点でアクセスしたメモリは、近い将来に再びアクセスする可能性が高い。典型的にはループ処理の中におけるループ内のコード。
空間的局所性
ある時点でメモリアクセスすると、近い将来にそれに近い場所のデータにアクセスする可能性が高い。典型的には配列要素への全走査時における配列のデータ。
気づき
以上の参照の局所性があることによって処理の高速化が起こるのか。
階層型キャッシュメモリ
最近のCPUはキャッシュメモリが階層化されていることがあります。
...
レジスタから遠くなり、容量が多く、低速になっています。
キャッシュメモリの効果を見てみる
気づき
cat /sys/devices/system/cpu/cpu0/cache/index0/size
48K
バッファサイズが2の5乗[kiB]の過ぎ始めてからアクセス速度が下がる
レジスタに一番近いcpu0が48kバイトがなのでスラッシングが起き始めて速度が落ちているのか
出典
感想
キャッシュメモリのことは単語の意味程度しか理解していなかった。
しかし
少し細い動きを知ることができた。