[パタヘネ:読書メモ]第5章 容量と速度の両立:記憶階層の利用 その4

5.5 記憶階層間に共通する概念


CPUのL1,L2キャッシュや、仮想記憶など複数の記憶階層間でキャッシュが行われるが、各階層間で似たような技術が使われている。
一方、各記憶階層ではそれぞれ要件(記憶量・速度・キャッシュ場所を求めるのに許容される時間etc)が異なる為、使われる戦略は微妙に異なる。


キャッシュの連想度を上げると、必要なキャッシュが追い出される確率が下がるので、ミス率は低下する傾向にある。但し、キャッシュサイズが大きい時はそもそもキャッシュエントリが競合する確率が低いので、連想度向上の価値が”相対的に”下がる。



キャッシュ方式の戦略


キャッシュ方式には、ダイレクトマップ、セットアソシエイティブ、フルアソシエイティブが有る。

フルアソシエイティブは、検索が大変だけどキャッシュミス率が低いという特徴がある。
この為、CPUのキャッシュにフルアソシエイティブを使用するのは難しい(電子回路的に組むのが難しいので)


一方、ディスクのキャッシュ(仮想記憶)の場面では、フルアソシエイティブのが有効になる。
ディスク-メモリ間は速度差が大きいので面倒な事をするだけの価値があるし、ディスクぐらいアクセス速度が遅くなるとキャッシュ場所の探索を回路ではなく、ソフトウェアで実装する事が出来るから。


キャッシュから追い出すブロックの決定方法


セットアソシエイティブや、フルアソシエイティブでは、キャッシュすべき場所が使用されている場合、どのブロックを追い出すべきかという問題がある。
LRUで決定できれば原理だけど、ハードウェア的にLRUを実装するのは難しいので、LRU風な近似解を使う場合もある。
追い出す対象をランダムで決める方式は、実装が簡単だけどキャッシュのミス率が上がる欠点がある。

と書くと、能力的にはLRUの方がメリットがありそうだけど、前述したようにキャッシュサイズが増えれば相対的にミス率は下がるので、ランダムで対象ブロックを決定してしまった方が速い場合もある。

一方、仮想記憶の場合は、キャッシュミスのコストが高いので、手間を掛けてもLRU的な仕組みを採用するだけの価値がある。


キャッシュ内容の反映方法


キャッシュ内容の反映方法には、ライトスルーとライトバックがある。
今までの話と同様、仮想記憶の場合は、手間が掛かるけどパフォーマンスが良いライトバックが採用される。



キャッシュミス率の分類


これまで、”キャッシュのミス率”と表現しているけど、これは3つに分けることが出来る

初期参照ミス(compulsory miss)
    システム起動時に、キャッシュにデータがロードされていない事に起因するミス
 
    キャッシュのブロックサイズを増やせば、改善できる。
    (だが、ブロックサイズが増えすぎるとミスペナルティが増す為、考慮が必要)
 
 
 
容量性ミス(capacity miss)
    キャッシュ容量が足りない事に起因するミス
 
    これは、キャッシュ容量を増やせばミス率が改善できる
    (容量を増やしすぎると遅くなるので、考慮が必要)
 
 
競合性ミス(conflict miss)
    ダイレクトマップや、セットアソシエイティブ方式で、
    キャッシュ先ブロックの領域が不足する事に起因するミス
 
    連想度を増やせばミス率が改善できる。
    (だが、連想度が増すと遅くなるので考慮が必要)




キャッシュのヒット率を上げるためには、発生した理由別のミス率を求めて、それぞれに対応した対処が必要となる.

各ミス率に対して、改善策はあるがデメリットも同時についてくるため、何かを大量に増やせば性能が際限なく向上していくという意味にはならない。
(バランスを取る事が必要となる)


関連記事

コメントを残す

メールアドレスが公開されることはありません。