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