MCPLive > 杂志文章 > x86硬件辅助虚拟化之迷

x86硬件辅助虚拟化之迷

2010-06-04hjcbug《微型计算机》2010年5月上

综述

本期我们所讲的就是x86硬件CPU虚拟化中的基本概念和流程控制。简而言之,虚拟化环境无非就是VCPU的建立、运行、退出到再运行的这样一个循环的过程,而类似VMX ON这些指令就像是在各个环节的节点进行盖章确认操作。VCPU的建立和退出主要和VMEntry和VM-Exit操作相对应,而VCPU的日常运行我们并不需要关心,相关的程序会进行合理调度,VCPU的再运行则会在操作方式和指令上有一些变化。

后我们再综合回顾一下英特尔平台的CPU硬件虚拟化的基础过程。首先执行VMX ON指令进行VMX根操作模式,然后初始化VCPU相关信息,VMCS也进行了相应域的初始化设定,通过VMLAUNCH或者VM RESUME指令产生VM-Entry,进入这个状态后,处理器会作以下操作,首先执行基本检查确保VM-Entry可以开始;然后对宿主机状态域和客户机状态域进行有效性检查,并加载客户机状态域中的状态值;再根据VM-Entry控制域中的相关要求进行相关操作。如果一切正常就把执行环境切换到客户机上,如果失败则会在信息域上注明。进入客户机环境后,大部分的操作都可以自行完成而不用切换到根模式中来,这就是VCPU的运行过程。

如果在此过程中,客户机程序因为特权级不够,访问敏感资源或者产生中断就都需要VCPU进行退出处理,也就是要进行VM-Exit处理(这时又分成两种情况,有一部分产生VM-Exit的指令是可通过VM执行控制域进行开关控制的,而还有一部分指令是无论如何都会产生VM-Exit的,只要产生VM-Exit的,都需要进行先陷入后模拟的过程),这时CPU先记录退出原因到VMCS的信息域中,然后将当前VCPU的运行状态保存到客户机状态域中,其它相关信息如MSR类信息也可能按照设置写入相关区域。接下来根据VM-Exit控制域和宿主机状态域中的设置,将MSR相关设定和宿主机状态域中的内容加载到CPU相应寄存器中。至此,CPU又切换回了VMX根操作模式,下一步将转由VMM来处理VM-Exit了,处理完成后又是下一个VM-Entry,也即是VCPU的再运行,如果VCPU还在同一个CPU上运行的话(也即不需要VMCS针对不同的CPU进行解除再绑定的操作),就可以用执行效率更高的VMRESUME(相比VMLAUNCH)指令来实现VM-Entry,如此循环即是一个完整的虚拟化流程。当然,真正的x86 CPU硬件虚拟化设计远比今天描述的要复杂得多,感兴趣的读者可以进一步深入研究。

MC特约评论员 黄继承(中国人寿信息技术部专家)

CPU虚拟化其实远比文中描述的复杂,对于中断虚拟化,多处理器虚拟化等复杂技术点我们并没有深入探讨。尽管CPU已经全面支持x86硬件辅助CPU虚拟化,但大部分企业的刀片服务器和机架式服务器却在BIOS中默认屏蔽了虚拟化选项,而且很多企业信息技术人员并不知道去开启这项特性,在提交内部虚拟化解决方案时只知道针对虚拟机软件进行分析,甚至不少企业还在用着老版本的虚拟化软件,让人有一种用奔驰车拉土豆的感觉。未来希望企业用户能真正将硬件虚拟化应用起来,发挥其应有的威力。

分享到:

用户评论

用户名:

密码: