假设我们故意破坏了DTLB,并且希望继续使用内存区域上的clflush
从L1-3刷新特定的缓存行,该内存区域(很可能)与指向的地址不相交TLB条目;这实际上会把我们正在刷新的缓存行的页面基地址带回TLB吗?
简而言之,clflush
是否触及了TLB?我假设由于这条指令尊重一致性,它会随后将该行写回内存(显然需要TLB查找。)
答案 0 :(得分:6)
来自英特尔®64和IA-32架构软件开发人员手册,第2A卷:指令集参考,AL:“使包含来自处理器缓存层次结构的所有级别的源操作数指定的线性地址的缓存行无效(数据和指令)。“
由于它使用线性(虚拟)地址,因此需要转换地址,这意味着在TLB未命中时需要页面表行走。 (即使对于将缓存条目推送到更高级别的缓存的不同类型的指令通常也是如此,因为L1缓存通常在物理上标记为x86。通常,使用虚拟地址标记已经失宠。使用标签的物理地址意味着需要物理地址来检查命中的缓存,因此即使它没有发送到内存,也需要进行转换。)
虽然可能可能以避免加载TLB进行此类访问,但这种特殊情况处理的额外复杂性几乎肯定不会被视为值得打扰,因为CLFLUSH不常用