TLB(トランスレーションルックアサイドバッファ)ミスとキャッシュミスの違いを誰かに説明してもらえますか?
TLBはある種の仮想メモリアドレスを指していることがわかったと思いますが、これが実際に何を意味するのかはっきりしていませんでしたか?
メモリのブロック(キャッシュラインのサイズ)が(L3?)キャッシュにロードされ、必要なアドレスが現在のキャッシュライン内に保持されていない場合、キャッシュミスが発生することを理解しています。これはキャッシュミスです。
さて、今日の最新のオペレーティングシステムはすべて、仮想メモリと呼ばれるものを使用しています。 CPUによって生成されるすべてのアドレスは仮想です。このような仮想アドレスを物理アドレスにマップするページテーブルがあります。また、TLBはページテーブルエントリの単なるキャッシュです。
一方、L1、L2、L3キャッシュは、メインメモリの内容をキャッシュします。
TLBミスは、CPUが要求した仮想アドレスのvirtual memory address => physical memory address
のマッピングがTLBにない場合に発生します。次に、そのエントリをページテーブルからTLBにフェッチする必要があります。
キャッシュミスは、CPUがキャッシュにないものを必要とする場合に発生します。次に、データはプライマリメモリ(RAM)で検索されます。そこにない場合は、データをセカンダリメモリ(ハードディスク)からフェッチする必要があります。
PCに最初の命令アドレス(つまり仮想アドレス)をロードした後の次のシーケンスは、TLBミスとキャッシュミスの概念を非常に明確にします。
最初の命令•最初の命令へのアクセス
ページフレームの割り当て、ディスクからのページの読み取り、PTEの更新、iTLBへのPTEのロード、フェッチの再開•これで物理アドレスが得られました
Icacheへのアクセス:ミス
ソース https://software.intel.com/en-us/articles/recap-virtual-memory-and-cache
両方のプロセスの方法が言及されているように。パフォーマンスの面では、キャッシュミスは必ずしもCPUをストールさせるわけではありません。アルゴリズムによるプリフェッチ技術を使用すると、少数のキャッシュミスを許容できます。ただし、TLBミスにより、TLBが新しいアドレスで更新されるまでCPUがストールします。言い換えると、プリフェッチはキャッシュミスをマスクできますが、TLBミスはマスクできません。