TLB未命中缓存未命中?

时间:2012-05-04 09:34:37

标签: performance caching operating-system cpu-architecture tlb

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

我相信我发现TLB指的是某种虚拟内存地址,但我并不清楚这究竟是什么意思?

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

3 个答案:

答案 0 :(得分:30)

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

另一方面,L1,L2,L3缓存高速缓存主存储器内容。

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

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

答案 1 :(得分:2)

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

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

  • 拿起PC
  • 使用从PC中提取的VPN访问iTLB:iTLBmiss
  • 调用iTLBmiss处理程序
  • 计算PTE地址
  • 如果PTEs缓存在L1数据和L2缓存中,请使用PTE地址查找它们:您也会错过
  • 主内存中的访问页表:PTE无效:页面错误
  • 调用页面错误处理程序
  • 分配页面框架,从磁盘读取页面,更新PTE,在iTLB中加载PTE,重新启动提取 •现在您拥有物理地址

  • 访问Icache:小姐

  • 将补充请求发送到更高级别:您无处不在
  • 向内存控制器(北桥)发送请求
  • 访问主内存
  • 读取缓存行
  • 在缓存行返回处理器时重新填充所有级别的缓存
  • 使用块偏移量从缓存行中提取适当的指令 •这是指令/数据访问中可能的最长延迟

来源https://software.intel.com/en-us/articles/recap-virtual-memory-and-cache

答案 2 :(得分:0)

正如两个过程的提到的那样。在性能上,高速缓存未命中并不一定会使CPU停顿。使用算法预取技术可以容忍少量的高速缓存未命中。然而,TLB未命中导致CPU停止,直到用新地址更新TLB。换句话说,预取可以屏蔽高速缓存未命中但不能屏蔽TLB未命中。