【问题标题】:Is TLB inclusive?TLB 是否包含在内?
【发布时间】:2020-07-25 09:34:18
【问题描述】:

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

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

【问题讨论】:

    标签: assembly x86 cpu-architecture tlb


    【解决方案1】:

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

    我认为这在 Intel's optimization manual 的某处有记录,但似乎没有。

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

    因此,例如,如果您将代码和数据保存在同一页面中,则在执行代码时可能会出现 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,因此第一次执行需要十几个周期。

    这适用于NINE STLB;它实际上不必是包含,只是不是独占或受害者缓存。 (例如,L2 缓存是 NINE wrt。L1i 缓存和 L1d 缓存。它们通过它获取,但是可以从 L2 中逐出行,而无需从任一 L1 缓存中强制逐出。)


    更多详情及来源链接:


    Core 2 不同:https://www.realworldtech.com/nehalem/8/ 说它有一个微型 16 条目 L1dTLB,仅用于加载,并使用 L2 DTLB 进行存储以及 L1dTLB 未命中加载。

    Nehalem 改变了这一点(64 项 DTLB),并将内存层次结构重新组织为客户端(非服务器)芯片上仍在使用的内容:大型共享包容性 LLC 和 256k 私有 L2。 (当然仍然是通常的拆分 32k L1i/d)Which cache mapping technique is used in intel core i7 processor?

    【讨论】:

    • 不幸的是,它没有记录在英特尔的优化手册中。至少搜索关键字victiminclusive 没有给出任何与tlb 相关的结果。您是如何发现 TLB 行为的?是个人研究吗?实际上,我发现了一个与主题无关的新事物——LLC 是非包容性的,因为 Skylake 是中级缓存的受害者。
    • 我试图解决的原始问题是使用prefetcht1 将代码预取到 L2。有a topic on Intel official forum 正是描述了这一点。以下是 Travis D. 所写的内容: 我认为 L2 预取对于否则会错过 DRAM 的代码可能非常有效。是的,您不会加热 ITLB 或 L1I,但会加热 L2 和 STLB,因此第一次执行需要十几个周期
    • 话虽如此,您关于英特尔 SnB 系列二级 TLB 是一级 iTLB 和 dTLB 的受害者缓存的提议对我来说并不明显,需要一些证明。
    • @SomeName:我原以为这是众所周知的事实,但既然你指出了这一点,我也没有在英特尔的优化手册中找到它。我搜索了“DTLB”和“STLB”,以防他们在不使用“受害者”一词的情况下描述驱逐。现在我正在寻找我在哪里读到的。这不是我自己的实验测试。也许是阿格纳雾?现在检查。哦,顺便说一句,Skylake 客户端上的 LLC(双核/四核,如 i7-6700k)仍然具有包容性,并且它们仍然使用相同的环形总线架构。只有 Skylake-server(带有 AVX512)使用网格和 NINE LLC。
    • @SomeName:我还没有找到任何东西;更新了我的答案以添加警告。请注意,STLB 不必是 inclusive 以使prefetcht1 工作;九也可以。 (见更新的答案)。
    猜你喜欢
    • 2019-05-11
    • 2016-03-29
    • 1970-01-01
    • 2021-04-26
    • 1970-01-01
    • 2015-05-18
    • 2011-06-26
    • 1970-01-01
    • 2014-05-30
    相关资源
    最近更新 更多