缓存 – 缓存行是否刷新访问TLB?

假设我们故意破坏了DTLB,并且想要在内存区域上使用clflush从L1-3刷新特定的高速缓存行,该内存区域(很可能)与TLB条目指向的地址不相交;这实际上会把我们正在刷新的缓存行的页面基地址带回TLB吗?

简而言之,clflush是否完全接触TLB?我假设由于这条指令尊重一致性,它随后将该行写回内存(显然需要TLB查找.)

最佳答案
英特尔®64和IA-32架构软件开发人员手册,第2A卷:指令集参考,AL:“使包含来自处理器缓存层次结构的所有级别(数据和指令)的源操作数指定的线性地址的缓存行无效” “.

由于它使用线性(虚拟)地址,因此需要转换地址,这意味着在TLB未命中时需要页面表行走. (即使对于将缓存条目推送到更高级别的缓存的不同类型的指令通常也是如此,因为L1缓存通常在物理上标记为x86.通常,使用虚拟地址标记已经失宠.使用标签的物理地址意味着需要物理地址来检查命中的缓存,因此即使它没有发送到内存,也需要进行转换.)

尽管可以避免加载TLB用于这样的访问,但是这种特殊情况处理的额外复杂性几乎肯定不会被认为是值得的,因为CLFLUSH不常用.

转载注明原文:缓存 – 缓存行是否刷新访问TLB? - 代码日志