TLB等级在现代x86 CPU(例如Skylake或其他Lakes)上是否包括在内?
例如,prefetchtn
将数据以及DTLB中的相应TLB条目带到级别缓存n + 1
。它也将包含在STLB中吗?
最佳答案
英特尔SnB系列第二级TLB上的AFAIK是第一级iTLB和dTLB的受害者缓存。 (我在最初阅读该书的IDK和IDK中找不到源。因此,请带着一粒盐。我本来以为这是一个众所周知的事实,但这可能是我发明的误解!)
我以为这是在Intel's optimization manual中记录的,但事实并非如此。
如果这是正确的,则从dTLB逐出条目后,在一段时间后单击STLB可获得基本上相同的好处,但不会浪费重复条目的空间。
因此,例如,如果将代码和数据保留在同一页面中,则在执行代码时可能会遇到iTLB遗漏,然后在STLB中也会丢失dTLB遗漏,并且如果该代码从同一页面加载数据,则会执行另一页遍历。 (这是有原因的,因为我们没有将只读数据与x86上的代码保存在同一页面上;它没有代码大小的优势,并且在两个TLB中都有相同的页面,从而浪费了iTLB + dTLB的覆盖范围。)
但是也许我错了。 Travis(@BeeOnRope)建议使用数据预取来减少iTLB丢失成本;他假设页面漫游者在STLB和dTLB中填写了一个条目。 (在Core 2(?)和更高版本上,TLB-miss软件预取可以触发漫游,而不是放弃。)
我认为L2预取对于可能会丢失DRAM的代码可能非常有效。是的,您不需要对ITLB或L1I进行加热,但是可以对L2和STLB进行加热,因此第一次执行将花费十几个周期。
这将对NINE STLB起作用;它并不一定要包含所有内容,也可以不是包含所有内容或受害缓存。 (例如,L2高速缓存为NINE W.L1i高速缓存和L1d高速缓存。它们通过它们进行获取,但是可以从L2逐出行,而不必强制从任一L1高速缓存逐出。)
带有源链接的更多详细信息:
What happens after a L2 TLB miss?
Understanding TLB from CPUID results on Intel
https://en.wikichip.org/wiki/intel/microarchitectures/skylake_(client)#Memory_Hierarchy
https://www.7-cpu.com/cpu/Skylake.html具有计时结果和TLB大小,但没有我们想要的信息。
核心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?
关于assembly - TLB是否包含在内?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61177500/