虚拟环境中的CLFLUSH

时间:2015-11-01 02:46:48

标签: linux x86 cpu virtualization instructions

我已阅读document关于Intel x86机器的CLFLUSH指令。 我知道CLFLUSH m8表示如果我在裸机上运行Linux模块内的指令,则刷新包含线性地址m8的缓存行。

但是,如果我想在虚拟化环境中运行VM内的指令怎么办? CLFLUSH的参数是什么? 具体来说,假设我要刷新一个缓存行,该缓存行包含VM中程序的虚拟地址va的内容。虚拟地址va映射到VM中的物理地址papa将映射到VMM /虚拟机监控程序中的计算机地址ma。我应该将哪个地址用于CLFLUSH指令,vapama

非常感谢!

1 个答案:

答案 0 :(得分:3)

clflush不是特权指令。用户进程可以运行它,就像它们可以运行加载,存储,预取和movnt(存储缓存逐出)指令一样,这些指令也会影响缓存。

我希望它虚拟化,没有任何虚拟机管理程序支持,因为它使用的地址与其他内存引用相同。

由于硬件虚拟化允许CPU从访客虚拟地址到硬件物理地址进行完全转换,因此无需虚拟机管理程序干预即可实现所需的行为(缓存行同步到物理内存)。