虚拟化环境下的CLFLUSH

CLFLUSH in virtualization environment

我已经阅读了document关于Intel x86机器的CLFLUSH指令。 我知道 CLFLUSH m8 意味着如果我 运行 裸机上 Linux 模块中的指令刷新包含线性地址 m8 的缓存行。

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

非常感谢!

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

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

由于硬件虚拟化允许 CPU 完成从客户虚拟地址到硬件物理地址的完整转换,所需的行为(缓存行同步到物理内存)应该在没有管理程序干预的情况下发生。