虚拟化环境下的CLFLUSH
CLFLUSH in virtualization environment
我已经阅读了document关于Intel x86机器的CLFLUSH指令。
我知道 CLFLUSH m8
意味着如果我 运行 裸机上 Linux 模块中的指令刷新包含线性地址 m8 的缓存行。
但是,如果我想在虚拟化环境中运行 VM 中的指令怎么办? CLFLUSH
的参数是什么?
具体来说,假设我想刷新缓存行,该缓存行保存虚拟机中程序的虚拟地址 va
的内容。虚拟地址va
映射到VM中的物理地址pa
,pa
将映射到VMM/hypervisor中的机器地址ma
。我应该为 CLFLUSH
指令、va
、pa
或 ma
使用哪个地址?
非常感谢!
clflush
不是特权指令。用户进程可以 运行 它,就像它们可以 运行 加载、存储、预取和 movnt
(带缓存逐出的存储)指令一样,这些指令也会影响缓存。
我希望它虚拟化得很好,没有任何管理程序支持,因为它使用地址的方式与其他内存引用相同。
由于硬件虚拟化允许 CPU 完成从客户虚拟地址到硬件物理地址的完整转换,所需的行为(缓存行同步到物理内存)应该在没有管理程序干预的情况下发生。
我已经阅读了document关于Intel x86机器的CLFLUSH指令。
我知道 CLFLUSH m8
意味着如果我 运行 裸机上 Linux 模块中的指令刷新包含线性地址 m8 的缓存行。
但是,如果我想在虚拟化环境中运行 VM 中的指令怎么办? CLFLUSH
的参数是什么?
具体来说,假设我想刷新缓存行,该缓存行保存虚拟机中程序的虚拟地址 va
的内容。虚拟地址va
映射到VM中的物理地址pa
,pa
将映射到VMM/hypervisor中的机器地址ma
。我应该为 CLFLUSH
指令、va
、pa
或 ma
使用哪个地址?
非常感谢!
clflush
不是特权指令。用户进程可以 运行 它,就像它们可以 运行 加载、存储、预取和 movnt
(带缓存逐出的存储)指令一样,这些指令也会影响缓存。
我希望它虚拟化得很好,没有任何管理程序支持,因为它使用地址的方式与其他内存引用相同。
由于硬件虚拟化允许 CPU 完成从客户虚拟地址到硬件物理地址的完整转换,所需的行为(缓存行同步到物理内存)应该在没有管理程序干预的情况下发生。