有人可以解释TLB(翻译后备缓冲区)未命中和缓存未命中之间的区别吗?
我相信我发现TLB指的是某种虚拟内存地址,但我并不清楚这究竟是什么意思?
我理解当一块内存(缓存行的大小)被加载到(L3?)缓存中并且如果当前缓存行中没有保存所需的地址时,会导致缓存未命中 - 这是缓存未命中。
答案 0 :(得分:30)
嗯,今天的所有现代操作系统都使用虚拟内存。 CPU生成的每个地址都是虚拟的。有一些页表将这些虚拟地址映射到物理地址。 TLB只是页表条目的缓存。
另一方面,L1,L2,L3缓存高速缓存主存储器内容。
当CPU请求的虚拟地址的virtual memory address => physical memory address
映射不在TLB中时,会发生TLB未命中。然后必须从页表中将该条目提取到TLB中。
当CPU需要不在缓存中的内容时,会发生缓存未命中。然后在主存储器(RAM)中查找数据。如果不存在,则必须从辅助存储器(硬盘)获取数据。
答案 1 :(得分:2)
在PC中加载第一个指令地址(即虚拟地址)之后的以下序列使得TLB未命中和高速缓存未命中的概念非常清楚。
第一条指令 •访问第一条指令
分配页面框架,从磁盘读取页面,更新PTE,在iTLB中加载PTE,重新启动提取 •现在您拥有物理地址
访问Icache:小姐
来源https://software.intel.com/en-us/articles/recap-virtual-memory-and-cache
答案 2 :(得分:0)
正如两个过程的提到的那样。在性能上,高速缓存未命中并不一定会使CPU停顿。使用算法预取技术可以容忍少量的高速缓存未命中。然而,TLB未命中导致CPU停止,直到用新地址更新TLB。换句话说,预取可以屏蔽高速缓存未命中但不能屏蔽TLB未命中。