对于Intel x86处理器,在打开VMX(Virtual Machine Extension),即执行VMXON指令的时候需要提供一个4KB对齐的内存区间,称作VMXON region,该区域的物理地址作为VMXON指令的操作数。该内存区间用于支持逻辑CPU的VMX功能,该区域在VMXON和VMXOFF之间一直都会被VMX硬件所使用。
VMXON Region内存区域的要求跟VMCS类似,也是需要4KB对齐,并且在使用之前,需要先初始化一下VMCS revision,即从IA32_VMX_BASIC MSR寄存器中获取到的31bit的VMCS revision identifier。对于每个支持VMX功能的逻辑CPU而言,都需要一个相应的VMXON Region。
对于软件而言,除了在执行VMXON之前初始化一下VMCS的版本号之外,不需要再做其他事情,特别是在VMXON和VMXOFF之间,软件不应该访问,甚至是更改VMXON Region这段内存,否则可能会造成不可预知的后果。
在KVM模块中,KVM的模块加载过程vmx_init()中,会调用到alloc_kvm_area()函数,为每个逻辑CPU分配一个VMXON Region。