2016-09-05 46 views
8

我最近了解到有关row hammer的攻击。为了执行这种攻击,程序员需要为特定数量的地址刷新CPU的完整缓存层次结构。为什么CLFLUSH存在于x86中?

我的问题是:为什么在x86中需要CLFLUSH?如果所有L *缓存都以透明方式运行(即不需要显式缓存失效),那么使用此指令的原因是什么?除此之外:CPU是否可以自由推测内存访问模式,从而完全忽略该指令?

回答

6

我觉得主要是针对可缓存的MMIO区域这些奇怪的东西。

Skylake引入了弱顺序的更高性能CLFLUSHOPT,因为它对于直接连接到内存层次结构的非易失性存储非常有用。刷新高速缓存可确保将数据写入实际内存,而不是在CPU中保持脏。

它对设备的非高速缓存一致性DMA也很重要,如果在x86中仍然可以做到这一点。 (可能不是;我认为所有的DMA现在都是高速缓存一致的。)

我不是这方面的专家,这并不意味着是一个涵盖所有用例的完整答案。

相关问题