2.2 Intel VT—X技术
首先,Intel VT—x提供了一套称作VMX(Virtual Machine eXtension)的新的工作模式,工作在该模式下的处理器又具有两类操作模式:VMXroot operation和VMX non—root operation。通常,虚拟机监控器运行在VMX root operation模式下,即所谓的特权级一1-客户操作系统运行在VMXnon-root operation模式下。VMX non—root operation模式仍保留4个特权级,对操作系统来说,VMXnon—root operation模式与传统的x86处理器兼容,最大的差别在于当虚拟机执行一些访问全局资源的指令时将导致虚拟机退出操作(VM exit),从而使虚拟机监控器获得控制权。以便对访问全局资源的指令进行模拟。以后,虚拟机监控器可以通过虚拟机进入操作(VM entry)使虚拟机重新获得控制权。
其次,VT—x为系统编程接口状态的切换提供硬件支持。VT—x为每个虚拟机维护至少一个VMCS(Virtual Machine Control Structure)结构,其中保存了虚拟机和虚拟机监控器的系统编程接口状态。当执行VM exit和VM entry操作时,VT—x自动根据VMCS中的内容完成虚拟机和虚拟机监控器问的系统编程接口状态切换。为系统编程接口状态的切换提供硬件支持是必要的,因为x86处理器的系统编程接口相比应用编程接口要复杂的多,且在不停的变化,如较新的处理器可能增加一些MSR(Model Specific Register)、这使得单独依靠软件来实现系统编程接口的保存和恢复工作变得十分复杂。另外,VT—x还提供了一组指令,使得虚拟机监控器通过一条指令就可以完成虚拟机问的切换。
VT—x解决了ring deprivileging方法的一系列问题,从硬件上堵住了所谓的x86平台的虚拟化漏洞。由于操作系统所在的VMX non—root operation模式仍具有4个特权级,使得ring aliasing问题不存在了。同时,由于SYSENTER和SYSEXIT指令所引起的adverse impact on guest transitions问题也不存在了: 由于VT—x在VM exit和VMentry时完成系统编程接口的切换,也就是说虚拟机和虚拟机监控器拥有各自的GDT,也就拥有了各自的地址空间,解决了address space compres—sion问题。同时,虚拟机和虚拟机监控器拥有各自的GDTR/IDTR等寄存器,在虚拟机中访问这些寄存器无需陷入,解决了nonfauhing accessing toprivileged state问题,再者,VMCS中保存了虚拟机的段描述符高速缓存,因此在虚拟机切换时不会出现access to hidden state问题:通过对VMCS进行设置,可以使处理器在VMX non—root operation模式时的EFLAGS,IF失效,即该标志位不再对中断屏蔽产生影响,因此操作系统对EFLAGS,IF的频繁操作不会导致频繁的VM exit,解决了inter—rupt virtualization的问题。
VT—x提供了完备的处理器虚拟化机制,利用VT—x可以在单个硬件平台上虚拟出任意数量的虚拟处理器VCPU VT—x除了解决了处理器虚拟化的问题之外,还为内存虚拟化和I/O虚拟化提供了支撑。在内存虚拟化方面,VT—x为影子页表的实现提供了支撑,并且在较新的处理器中还提供了EPT机制,进一步提高了内存虚拟化的效率。在I/O虚拟化方面,通过I/O位图机制可以方便地实现对Programmed I/O的虚拟化,除此之外,VT—x还提供了中断事件退出机制和中断事件注入机制,方便对设备中断进行虚拟化。
2.3 KVM实现
作为VMM,KVM分为两部分,分别是运行于Kernel模式的KVM 内核模块和运行于User模式的Qemu模块。这里的Kernel模式和User模式,实际上指的是VMX根模式下的特权级0和特权级3。另外,KVM将虚拟机所在的运行模式称为Guest模式。所谓Guest模式,实际上指的是VMX的非根模式。
图2 VCPU工作模型
利用VT—x技术的支持,KVM 中的每个虚拟机可具有多个虚拟处理器VCPU,每个VCPU对应一个Qemu线程,VCPU的创建、初始化、运行以及退出处理都在Qemu线程上下文中进行,需要Kernel、User和Guest三种模式相互配合,其工作模型如图2所示。Qemu线程与KVM 内核模块间以ioctl的方式进行交互,而KVM内核模块与客户软件之问通过VM Exit和VM entrv操作进行切换。
Qemu线程以ioctl的方式指示KVM 内核模块进行VCPU的创建和初始化等操作,主要指VMM创建VCPU运行所需的各种数据结构并初始化。其中很重要的一个数据结构就是VMCS。
责编:李红燕
微信扫一扫实时了解行业动态 微信扫一扫分享本文给好友