缓存行是否刷新访问TLB?

awd*_*nld 3 x86 assembly caching cpu-architecture tlb

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

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

Pau*_*ton 6

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

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

虽然这将是可能的,以避免加载TLB这样的访问,这样的特殊情况下处理额外的复杂性几乎肯定不会被视为值得费心考虑到CLFLUSH不常用.