web-dev-qa-db-ja.com

TLBミスとキャッシュミス?

TLB(トランスレーションルックアサイドバッファ)ミスとキャッシュミスの違いを誰かに説明してもらえますか?

TLBはある種の仮想メモリアドレスを指していることがわかったと思いますが、これが実際に何を意味するのかはっきりしていませんでしたか?

メモリのブロック(キャッシュラインのサイズ)が(L3?)キャッシュにロードされ、必要なアドレスが現在のキャッシュライン内に保持されていない場合、キャッシュミスが発生することを理解しています。これはキャッシュミスです。

24
mezamorphic

さて、今日の最新のオペレーティングシステムはすべて、仮想メモリと呼ばれるものを使用しています。 CPUによって生成されるすべてのアドレスは仮想です。このような仮想アドレスを物理アドレスにマップするページテーブルがあります。また、TLBはページテーブルエントリの単なるキャッシュです。

一方、L1、L2、L3キャッシュは、メインメモリの内容をキャッシュします。

TLBミスは、CPUが要求した仮想アドレスのvirtual memory address => physical memory addressのマッピングがTLBにない場合に発生します。次に、そのエントリをページテーブルからTLBにフェッチする必要があります。

キャッシュミスは、CPUがキャッシュにないものを必要とする場合に発生します。次に、データはプライマリメモリ(RAM)で検索されます。そこにない場合は、データをセカンダリメモリ(ハードディスク)からフェッチする必要があります。

32
Hindol

PCに最初の命令アドレス(つまり仮想アドレス)をロードした後の次のシーケンスは、TLBミスとキャッシュミスの概念を非常に明確にします。

最初の命令•最初の命令へのアクセス

  • 開始PCを取ります
  • PCから抽出したVPNを使用してiTLBにアクセスします:iTLBmiss
  • ITLBmissハンドラーを呼び出す
  • PTEアドレスを計算する
  • PTEがL1データとL2キャッシュにキャッシュされている場合は、PTEアドレスで検索します。そこでも見逃します。
  • メインメモリのページテーブルにアクセスします:PTEが無効です:ページフォールト
  • ページフォールトハンドラーを呼び出す
  • ページフレームの割り当て、ディスクからのページの読み取り、PTEの更新、iTLBへのPTEのロード、フェッチの再開•これで物理アドレスが得られました

  • Icacheへのアクセス:ミス

  • より高いレベルに補充リクエストを送信します:どこでも見逃します
  • メモリコントローラー(ノースブリッジ)に要求を送信します
  • メインメモリにアクセスする
  • キャッシュラインの読み取り
  • キャッシュラインがプロセッサに戻るときに、すべてのレベルのキャッシュを補充します
  • ブロックオフセットを使用してキャッシュラインから適切な命令を抽出します•これは、命令/データアクセスで可能な最長のレイテンシです。

ソース https://software.intel.com/en-us/articles/recap-virtual-memory-and-cache

2
bharat

両方のプロセスの方法が言及されているように。パフォーマンスの面では、キャッシュミスは必ずしもCPUをストールさせるわけではありません。アルゴリズムによるプリフェッチ技術を使用すると、少数のキャッシュミスを許容できます。ただし、TLBミスにより、TLBが新しいアドレスで更新されるまでCPUがストールします。言い換えると、プリフェッチはキャッシュミスをマスクできますが、TLBミスはマスクできません。

0
sir_osthara