26

有人可以解释一下 TLB(翻译后备缓冲区)未命中和缓存未命中之间的区别吗?

我相信我发现 TLB 指的是某种虚拟内存地址,但我并不太清楚这实际上意味着什么?

我理解当一块内存(缓存行的大小)被加载到(L3?)缓存中并且如果当前缓存行中没有保存所需的地址时会导致缓存未命中 - 这是缓存未命中。

4

3 回答 3

33

嗯,今天所有的现代操作系统都使用一种叫做虚拟内存的东西。CPU生成的每个地址都是虚拟的。存在将这种虚拟地址映射到物理地址的页表。TLB 只是页表条目的缓存。

另一方面,L1、L2、L3 缓存缓存主存内容。

当 CPU 请求的虚拟地址的映射virtual memory address => physical memory address不在 TLB 中时,就会发生 TLB 未命中。然后该条目必须从页表中提取到 TLB 中。

当 CPU 需要不在缓存中的内容时,就会发生缓存未命中。然后在主存储器 (RAM) 中查找数据。如果不存在,则必须从辅助存储器(硬盘)中获取数据。

于 2012-05-04T09:39:45.900 回答
2

在PC中加载第一个指令地址(即虚拟地址)后的以下顺序使TLB未命中和缓存未命中的概念非常清晰。

第一条指令 • 访问第一条指令

  • 拿启动电脑
  • 使用从 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

于 2014-05-02T17:26:09.700 回答
0

提到了这两个过程的方式。就性能而言,缓存未命中不一定会使 CPU 停顿。使用算法预取技术可以容忍少量缓存未命中。然而,TLB 未命中会导致 CPU 停顿,直到 TLB 已用新地址更新。换句话说,预取可以屏蔽缓存未命中,但不能屏蔽 TLB 未命中。

于 2014-06-20T07:54:57.810 回答