【问题标题】:Is TLB used at all in the instruction fetching pipeline取指令流水线中是否完全使用了TLB
【发布时间】:2018-09-20 00:22:08
【问题描述】:

在指令获取管道中是否使用了 TLB?

此架构/微架构是否依赖?

【问题讨论】:

  • realworldtech.com/sandy-bridge/3 显示了 Sandybridge、Nehalem 和 Bulldozer 的指令获取阶段。请注意显示在 L1 I-cache 旁边的 L1iTLB;它会检查每个提取块(至少在逻辑上;CPU 可能会在它停留在同一个 4k 页面内时通过不重新检查来进行优化。)无论如何,所有在虚拟地址空间中具有指令的架构都会在某个时候使用 TLB,或者一次当获取进入一个虚拟缓存或每次获取一个物理缓存时。

标签: cpu-architecture tlb


【解决方案1】:

通常,支持分页的处理器(通常包括一种排除执行权限的机制,即使不与读取权限分开)将访问 TLB 作为指令获取的一部分。

只要在将块插入指令缓存时检查权限,虚拟标记的指令缓存就不需要这样的权限检查(这通常会涉及 TLB 访问,尽管权限缓存可以与虚拟标记一起使用)标记的 L2 缓存;这包括预取到指令缓存中),权限域包含在虚拟标签中(通常与地址空间标识符相同,无论如何这对于避免缓存刷新很有用),并且系统软件确保删除了块当执行权限被撤销(或权限域/地址空间标识符被重新用于不同的权限域/地址空间)。

(通常,虚拟标记的缓存不需要翻译后备缓冲区;权限映射的缓存就足够了,或者可以使用标记和权限域的指示来缓存权限。在访问之前将使用 TLB 的内存,但缓存命中不需要转换。权限缓存比转换缓存更便宜,因为粒度可以更大,并且表达权限信息所需的位更少。)

物理标记的指令高速缓存需要地址转换来确定命中,但这可以通过推测访问是命中(可能使用方式预测)而显着延迟。命中确定甚至可以延迟到指令提交/结果写回的时间,但早期处理通常更好。

由于指令访问通常具有很大的空间局部性,因此非常小的 TLB 可以提供不错的命中率,而相当快、较大的备用 TLB 可以降低未命中成本。这样的 microTLB 可以通过过滤掉大部分指令访问来促进数据和指令访问之间共享 TLB。

显然,不支持分页的架构不会使用 TLB(尽管它可能会使用内存保护单元来检查是否允许访问或使用不同的转换机制,例如添加偏移量可能带有边界检查) .面向单地址空间操作系统的架构可能会使用虚拟标记缓存,因此仅在缓存未命中时访问 TLB。

【讨论】:

  • 拆分TLB设计效率特别高。取指时的 TLB 未命中是相当灾难性的。但是,与 dTLB 或统一 TLB 相比,单独的 iTLB 的未命中率要低得多。 iTLB 的低未命中率非常重要,以至于 L1 iTLB 比 L1 dTLB 更大,甚至具有更高的关联性(特别是当有多个硬件线程时,在这种情况下 iTLB 可以在线程之间静态或动态分区)。操作系统或运行时级别的内存管理也会对拆分 TLB 设计的效率产生重大影响。
  • 例如,如果运行时(如 JVM 或 CLR)使用单个内存管理器来分配子页面块来存储动态生成的代码和堆对象,则页面映射可以缓存在 iTLB 和dTLB,从而降低了拆分 TLB 设计的有效性,使其更像一个统一的 TLB。幸运的是,事实并非如此。
猜你喜欢
  • 2013-09-08
  • 2012-06-01
  • 2019-06-13
  • 2015-09-09
  • 2013-02-17
  • 2015-12-17
  • 2013-11-22
  • 1970-01-01
相关资源
最近更新 更多