我已阅读document关于Intel x86机器的CLFLUSH指令。
我知道CLFLUSH m8
表示如果我在裸机上运行Linux模块内的指令,则刷新包含线性地址m8的缓存行。
但是,如果我想在虚拟化环境中运行VM内的指令怎么办? CLFLUSH
的参数是什么?
具体来说,假设我要刷新一个缓存行,该缓存行包含VM中程序的虚拟地址va
的内容。虚拟地址va
映射到VM中的物理地址pa
,pa
将映射到VMM /虚拟机监控程序中的计算机地址ma
。我应该将哪个地址用于CLFLUSH
指令,va
,pa
或ma
?
非常感谢!
答案 0 :(得分:3)
clflush
不是特权指令。用户进程可以运行它,就像它们可以运行加载,存储,预取和movnt
(存储缓存逐出)指令一样,这些指令也会影响缓存。
我希望它虚拟化,没有任何虚拟机管理程序支持,因为它使用的地址与其他内存引用相同。
由于硬件虚拟化允许CPU从访客虚拟地址到硬件物理地址进行完全转换,因此无需虚拟机管理程序干预即可实现所需的行为(缓存行同步到物理内存)。