2つの異なるソースから読み取った内容によると、次の目的でキャッシュの色付けが必要です(必要でしたか?)
-
エイリアシングの問題に対処する:同じ物理アドレスを持つ2つの異なる仮想アドレスが異なるキャッシュセットにマッピングされないようにする。 ( CS Stack Exchange Answer による)
-
仮想メモリの空間的局所性プロパティを活用する:仮想メモリの2つの隣接するブロック(必ずしも物理メモリで隣接している必要はありません)が同じキャッシュインデックスにマップされないことを保証します。 (ウィキペディアによると)
これらは根本的に異なる定義であり、理解していません。キャッシュカラーリングの動機、必要な色の数を選択するメカニズムを理解できないようです。それらは本当に同じですか?
仮想メモリの空間的局所性が主な動機である場合、キャッシュのインデックスが最初に仮想メモリから取得されるVIPTキャッシュに本当に必要なキャッシュの色付け?または、キャッシュの色付けは、エイリアスを回避するためにVIPTキャッシュで単に使用されますか?
回答
エイリアスの回避と過度のキャッシュ競合の回避の両方が、ページの色付けを使用する正当な理由です。エイリアスを回避するためにページの色付けを要求することは、ページの割り当てに必須の制約を課すため、人気がありません。一般的に、最新の非埋め込みプロセッサでは、エイリアスを回避するためにページの色付けは必要ありません。
ハードウェアでのエイリアスの問題の回避iハードウェアの複雑さが増すため、以前のプロセッサ(およびおそらく最近の組み込みプロセッサ)はソフトウェアに負担をかけることを選択しました。ハードウェアは、(たとえば)次の方法でページオフセットのビットよりも多くのインデックス+オフセットビットを持つキャッシュのエイリアスの問題を回避できます。
- キャッシュミスの代替セットをチェックする(AMDの場合のように) Athlon;エイリアスが検出されると、ブロックは現在の仮想インデックスに移動されました)
- (タグ)を含むL2のL1のインデックス作成に使用される仮想アドレスビットを含みます(L1ミスおよびL2ヒットの場合、仮想アドレスビットはリクエストの対応するビットと一致します。アクションは不要です。ビットが一致しない場合、プローブする適切なセットがわかります[ブロックがL1にあるかどうかは、コヒーレンスを減らすためにL2タグにも格納できます。オーバーヘッドがあるため、一部のプローブは回避される可能性があります])
- セット予測を使用して、インデックス作成に使用される余分な物理アドレスビットを推測します(TLBアクセス後に誤予測が発見され、修正されます)
- 可能性のあるエイリアスを見つけるためのキャッシュミスでの逆変換(物理から仮想)(PA-RISC実装では逆変換が使用されたと思います) コヒーレンスの場合はオン)
ページの色付けが不要なため、ページの色付けを使用して競合を減らす(単純なモジュロを2の累乗で行うキャッシュの場合)人気は低くなります。正しさのために。特定の色が不足すると、パフォーマンスが低下する可能性があるだけで、ページの色が誤って表示される可能性があります。ページの色付けのこの理論的根拠は、色付けされるビット数の制約が少ないことも意味します。 (あまり実用的ではない)理想は、最後のレベルのキャッシュのすべての物理インデックスビットを対応する仮想アドレスビットと一致させることですが、4ビットだけに色を付けるだけでも、競合の問題を大幅に減らすことができます。
注目に値するかもしれません。エイリアス回避のためのカラーリングは、仮想アドレスビットを物理アドレスビットと一致させる必要はありません。すべての潜在的なエイリアスがインデックス作成に使用される同じ仮想アドレスビットを共有している限り、エイリアスの問題は回避されます。ただし、物理アドレスビットと仮想アドレスビットを一致させると便利な場合があります(物理的にアドレス指定されたキャッシュレベルで予測可能な競合が発生します)。