clflush会刷新L1i吗?

问题描述 投票:0回答:1

这是一个问题。clflush能不能刷新L1i?Intel ISA手册上没有说清楚。

在缓存一致性域中,从缓存层次结构的每一级中清除包含内存操作数指定的线性地址的缓存行。如果该缓存行包含缓存层次结构中任何一级的修改数据,则该数据将被写回内存中

从措辞上我可以推测出

如果该缓存行包含修改过的 资料 在高速缓存层次结构的任何一级,该 资料 是写回内存的。

所以L1I没有被触动。这是Intel CPU的实际行为吗?

assembly caching x86 intel clflush
1个回答
4
投票

clflush 做到了锡纸上说的那样,刷新所有缓存:指令、数据和统一。 (还有解码后的uop缓存)。 其实Margaret Bloom 验明正身.

指令缓存不可能永远是脏的,所以讨论修改行谈数据是有道理的。 只有回写数据缓存才可能是脏的。需要注意的是 clflush 是将脏数据回写到非易失性的DIMM上,所以很自然的,文档的重点是数据。

你读了太多的措辞,也许是基于一种误解,认为回写是冲洗的同义词。 一个干净的缓存线(如I-cache)可以通过简单的丢弃来刷新,不需要回写。 请注意以下两点的区别 invdwbinvd. 该 invd docs使用 "flush "作为 "invalidate "的同义词。 (相关的。INVD指令有什么用?)


来自Intel的第2卷ISA参考手册。参赛 clflush

CLFLUSH指令可以在所有权限级别上使用,并且要接受与字节加载相关的所有权限检查和故障检查(此外,CLFLUSH指令是一个 允许在仅执行段中刷新一个线性地址。). 像加载一样,CLFLUSH指令设置页表中的A位,但不设置D位。

这并不 明确 说它实际上是在这样的区域中刷新I-cache,但它意味着刷新与这种甚至不可能访问数据的情况有关。

半相关。在x86中刷新iCache

© www.soinside.com 2019 - 2024. All rights reserved.