Caching clflush指令是否仅从1级缓存刷新块?

Caching clflush指令是否仅从1级缓存刷新块?,caching,intel,flush,cpu-cache,instructions,Caching,Intel,Flush,Cpu Cache,Instructions,我有一个多核系统,有4个核,每个核都有专用的L1和L2缓存以及共享的LLC。缓存具有包容性属性,这意味着较高级别的缓存是较低级别缓存的超集。我可以直接冲洗LLC上的块,还是必须先通过较低的层 我试图了解刷新+重新加载和刷新+刷新缓存侧通道攻击。clflush在体系结构上要求/保证从所有级别的缓存中逐出缓存线,从而有助于将数据提交到非易失性DIMM。(例如,电池供电的DRAM或3D XPoint) 似乎很清楚: 从缓存一致性域中的缓存层次结构的每一级别使无效。。。如果该缓存线在缓存层次结构的任何级

我有一个多核系统,有4个核,每个核都有专用的L1和L2缓存以及共享的LLC。缓存具有包容性属性,这意味着较高级别的缓存是较低级别缓存的超集。我可以直接冲洗LLC上的块,还是必须先通过较低的层


我试图了解刷新+重新加载和刷新+刷新缓存侧通道攻击。

clflush
在体系结构上要求/保证从所有级别的缓存中逐出缓存线,从而有助于将数据提交到非易失性DIMM。(例如,电池供电的DRAM或3D XPoint)

似乎很清楚:

从缓存一致性域中的缓存层次结构的每一级别使无效。。。如果该缓存线在缓存层次结构的任何级别包含修改后的数据,则该数据将写回内存

我认为,如果多个内核有一个处于共享状态的行,
clflush
/
clflushopt
在一个内核上必须将其从所有内核的私有缓存中逐出。(作为从包含性三级缓存逐出的一部分,无论如何都会发生这种情况,但Skylake-X已更改为九级(不包含非独占性)三级缓存。)

我可以直接冲洗LLC上的块,还是必须先通过较低的层

不清楚你在问什么。您是否在询问是否可以要求CPU仅从L3刷新块,而不干扰L1/L2?您已经知道,L3在大多数Intel CPU上都包含,因此其净效果与
clflush
相同。对于要与L3通信的内核,它们必须经过自己的L1d和L2

clflush
如果数据仅存在于L3中,而不存在于执行它的核心的私有L1d或L2中,则仍然有效。它不像预回迁那样是一个“提示”,或者只是一个本地的东西

在未来的Silvermont系列CPU中,将有一条指令允许您将一个块刷新到LLC,但不会一直刷新到DRAM。(这只是一个提示,因此,如果写回路径忙于逐出以腾出空间用于按需加载,则不会强制CPU遵守。)