首页 文章

TLB未命中缓存未命中?

提问于
浏览
21

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

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

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

3 回答

  • 29

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

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

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

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

  • 0

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

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

    • 拿起启动电脑

    • 使用从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

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

相关问题