繁体   English   中英

TLB 是否包含在内?

[英]Is TLB inclusive?

现代 x86 CPU(例如 Skylake 或其他 Lakes)是否包含 TLB 层次结构?

例如, prefetchtn将数据带入级别缓存n + 1以及 DTLB 中的相应 TLB 条目。 它也会包含在 STLB 中吗?

AFAIK,在英特尔 SnB 系列 2 级 TLB 上是一级 iTLB 和 dTLB 的受害者缓存。 (我在最初阅读它的地方找不到这个和 IDK 的来源。所以请谨慎对待。我原本以为这是一个众所周知的事实,但这可能是我发明的一个误解!)

我认为这在英特尔的优化手册中的某处有记录,但似乎没有。

如果这是正确的,那么在条目从 dTLB 中逐出后一段时间后,您将获得基本相同的好处,但不会在重复条目上浪费空间。

因此,例如,如果您将代码和数据保存在同一页面中,则在执行代码时可能会出现 iTLB 未命中,然后在 STLB 中也未命中的 dTLB 未命中,如果该代码从同一页面加载数据,则会执行另一个页面遍历. (这是因为我们不将只读数据与 x86 上的代码保存在同一页面中;它没有代码大小优势,并且由于在两个 TLB 中具有相同的页面而浪费了 iTLB + dTLB 覆盖范围。)


但也许我错了; Travis (@BeeOnRope) 建议使用数据预取来降低 iTLB 未命中成本; 他假设 page walker 填充了 STLB 和 dTLB 中的条目。 (在 Core 2(?) 及更高版本上,TLB-miss software-prefetch 可以触发 walk 而不是放弃。)

我认为 L2 预取对于否则会错过 DRAM 的代码可能非常有效。 是的,您不会加热 ITLB 或 L1I,但会加热 L2 和 STLB,因此第一次执行需要十几个周期。

这适用于九个STLB 它实际上不必是包容性的,只是不是排他性的或受害者缓存。 (例如,L2 缓存是 NINE wrt。L1i 缓存和 L1d 缓存。它们通过它获取,但是可以从 L2 中逐出行而不强制从任一 L1 缓存中逐出。)


更多详细信息与来源链接:


核心 2 不同: https://www.realworldtech.com/nehalem/8/说它有一个很小的 16 入口 L1dTLB 仅用于负载,并使用 L2 DTLB 进行存储以及 L1dTLB 未命中负载。

Nehalem 改变了这一点(64 项 DTLB),同时将 memory 层次结构重组为仍在客户端(非服务器)芯片上使用的内容:大型共享包容性 LLC 和 256k 私有 L2。 (当然仍然是通常的拆分 32k L1i/d) intel core i7 处理器中使用了哪种缓存映射技术?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM