TLB层次结构是否包含在现代x86 CPU上(例如Skylake,或者其他湖泊)?
例如,prefetchtn将数据带到级别缓存n + 1以及DTLB中相应的TLB条目。它是否也包含在STLB中?
发布于 2020-04-12 20:22:34
AFAIK,Intel SnB-家庭二级TLB是一级iTLB和dTLB.的受害者缓存(我找不到这个和IDK的源代码,我原来读它的地方)。所以,用一粒盐,,把这个拿去。我本来以为这是一个众所周知的事实,但这可能是我发明的一个误解!)
我以为这是在英特尔优化手册的某个地方记录下来的,但似乎并不是这样。
如果这是正确的,那么在条目从dTLB中被逐出一段时间后,您就会得到与STLB相同的好处,但是不会在重复条目上浪费空间。
因此,例如,如果您将代码和数据保存在同一个页面中,则在执行代码时可以得到一个iTLB遗漏,然后在STLB中也没有得到一个dTLB缺失,如果该代码从同一个页面加载数据,则执行另一个页面遍历。(这是因为我们没有将只读数据与x86上的代码保持在同一个页面上;它没有代码大小的优势,并且通过在两个TLB中使用相同的页面而浪费了iTLB + dTLB覆盖范围。)
但也许我错了;Travis (@BeeOnRope)建议使用数据预取来降低iTLB丢失成本;他假设页面遍历器填充了STLB和dTLB中的一个条目。(关于核心2(?)然后,TLB-错过软件-预取可以触发步行而不是放弃。)
我认为L2预取对于那些否则会错过DRAM的代码来说是非常有效的。是的,您没有温暖ITLB或L1I,但是您温暖了L2和STLB,所以在第一次执行时需要花费大约十几个周期。
这对于一个九 STLB是有效的;它不一定是包含性的,只是不具有排他性或受害者缓存。(例如,L2缓存是9个wrt。L1i缓存和L1d缓存。它们从中提取,但行可以从L2中驱逐,而不必强制从任何L1缓存中驱逐。)
有指向源的链接的详细信息:
核心2是不同的:https://www.realworldtech.com/nehalem/8/说只有一个小小的16条目L1dTLB只用于加载,而L2 DTLB用于存储和L1dTLB-漏载。
Nehalem改变了这一点(64条目DTLB),并将内存层次结构重组为客户机(非服务器)芯片上仍然使用的内容:大型共享包容LLC和256 k私有L2。(当然,仍然是通常的32k L1i/d) 在英特尔核心i7处理器中使用了哪种缓存映射技术?
https://stackoverflow.com/questions/61177500
复制相似问题