我最近了解了row hammer攻击。为了执行此攻击,程序员需要为特定数量的地址刷新CPU的完整缓存层次结构。
我的问题是:x86中为什么需要CLFLUSH?如果所有L *缓存都是透明的(即,不需要显式缓存失效),那么使用该指令的原因是什么?除此之外:CPU是否可以自由地推测内存访问模式,从而完全忽略该指令?
答案 0 :(得分:6)
我认为主要是针对像可缓存的MMIO区域这样奇怪的东西。
Skylake推出了弱有序的高性能CLFLUSHOPT,因为它对于直接连接到内存层次结构的非易失性存储非常有用。刷新高速缓存可确保将数据写入实际内存,而不是CPU中的脏。
如果在x86中仍然可以执行任何操作,那么对于非缓存一致的DMA到设备也可能很重要。 (可能不是;我认为现在所有的DMA都是缓存一致的。)
我不是这方面的专家,这并不是一个涵盖所有用例的完整答案。