假设我们有意地击打DTLB,并希望使用内存区域上的clflush
(很可能)与TLB条目所指向的地址不相交,继续从L1-3中刷新特定的缓存行;这是否会将我们正在刷新的缓存行的页面基地址带回TLB?
简单地说,clflush
是否会触及TLB?我假设,由于这个指令符合一致性,它随后会将该行写回内存(显然需要TLB查找)。
发布于 2014-08-14 19:58:53
来自Intel 64和IA-32架构软件开发人员手册,第2A卷:指令集引用,all:“使包含由处理器缓存层次结构(数据和指令)的所有级别的源操作数指定的线性地址的缓存行无效。”
由于它使用的是线性(虚拟)地址,因此需要对地址进行转换,这意味着在TLB未命中时需要进行页表遍历。(即使是不同类型的指令也是如此,这种指令将缓存条目推到更高的缓存级别,因为L1缓存通常是为x86进行物理标记的。一般来说,用虚拟地址进行标记已经不受欢迎了。对标记使用物理地址意味着需要物理地址来检查缓存是否命中,因此即使没有发送到内存,也需要翻译。)
虽然可以避免为这样的访问加载TLB,但考虑到CLFLUSH并不常用,这种特殊情况处理的额外复杂性几乎肯定不会被视为值得一试。
https://stackoverflow.com/questions/25315195
复制相似问题