1、引言
虚拟化把事物从一种形式改变为另一种形式,计算机的虚拟化使单个计算机看起来像多个计算机或完全不同的计算机,虚拟化技术也可以使多台计算机看起来像一台计算机,这叫做服务器聚合fserver aggregation)或网格计算(grid computing)。KVM是以色列开源组织Qumranet开发的一个开源虚拟机监控器,从Linux一2.6.20开始被包含在Linux内核中 因此KVM可以自然地使用Linux内核提供的内存管理、多处理器支持等功能,易于实现,而且还可以随着Linux内核的发展而发展。KVM基于x86硬件虚拟化技术,它的运行要求Intel VT—x或AMD SVM 的支持。IntelVT—x是英特尔虚拟化技术,本文不考虑KVM 中与AMD SVM相关的实现,有关术语的使用与Intel VT—X保持一致。
2、处理器优化技术
处理器虚拟化的本质是分时共享。实现虚拟化需要两个必要条件,第一是能够读取和恢复处理器的当前状态,第二是有某种机制防止虚拟机对系统全局状态进行修改。
第一个必要条件可以有硬件实现,也可以由软件来实现,由硬件实现比软件实现更为简单 例如,x86处理器对应用编程接口虚拟化,提供了硬件的支持,软件通常只需要执行一条指令,就可以实现任务切换,处理器硬件负责保存当前应用编程接口的状态,并为目标任务恢复应用编程接口的状态。但操作系统并不一定要使用处理器提供的这种虚拟化机制,完全可以使用软件来完成应用接口状态的切换。例如。Linux就没有使用x86处理器提提供多任务机制,完全依赖软件实现任务切换。
第二个必要条件一定要由硬件来实现,通常处理器采用多模式操作(multi—mode operation)来确保这一点 在传统x86处理器上,共有4种模式的操作,也就是常说的4个特权级。虚拟机(这里指进程/线程)通常运行在特权级3上,而虚拟机监控器(这里指操作系统)运行于特权级O上,进程/线程的所有访问全局的操作,如访问共享的操作系统所在的地址空间,访问I/O等等,均会导致异常的发生,被操作系统所截获并处理,使操作系统有机会向进程/线程提供一个虚拟的世界。
2.1传统处理器优化及问题
传统x86处理器为了保护指令的运行,提供了指令的4个不同Privilege特权级别,术语称为Ring,从Ring 0~Ring 3。Ring 0的优先级最高,Ring 3最低。各个级别对可以运行的指令有所限制,例如,GDT,IDT,LDT,TSS等这些指令就只能运行于Privilege 0,也就是Ring 0。要注意Ring/Privilege级别和我们通常认知的进程在操作系统中的优先级并不同。
图1操作系统内核运行
操作系统必须要运行一些Privilege 0的特权指令,因此Ring 0是被用于运行操作系统内核,Ring l和Ring 2是用于操作系统服务,Ring 3则是用于应用程序。然而实际上并没有必要用完4个不同的等级,一般的操作系统实现都仅仅使用了两个等级,即Ring O和Ring 3,如图1所示在一个常规的x86操作系统中,系统内核必须运行于Ring 0,而VMM软件以及其管理下的Guest OS却不能运行于Ring O—— 因为那样就无法对所有虚拟机进行有效的管理,就像以往的协同式多任务操作系统(如Windows 3.1)无法保证系统的稳健运行一样。现在流行的解决方法是Ring Deprivileging(译为特权等级下降),并具有两种选择:客户OS运行于Privilege1(0/1/3模型),或者Privilege 3(0/3/3模型)。
无论是哪一种模型,客户OS都无法运行于Privilege 0,这样,如GDT,IDT,LDT,TSS这些特权指令就必须通过模拟的方式来运行,这会带来很明显的性能问题。特别是在负荷沉重、这些指令被大量执行的时候。
虽然采用ring deprivileging方法可能实现系统虚拟化,但具有很多缺陷,且软件上比较复杂。为此,Intel提出了VT—x技术来解决系统虚拟化问题,其主要思路是增加一个新的比0还高的特权级,通常称之为特权级一1,并在硬件上支持系统编程接口状态的保存和恢复。
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。
初始化工作完成之后,Oemu线程以ioctl的方式向KVM 内核模块发出运行VCPU的指示,后者执行VM entry操作,将处理器由kernel模式切换到Guest模式,中止宿主机软件,转而运行客户软件。注意。宿主机软件被中止时,正处于Qemu线程上下文,且正在执行ioctl系统调用的kernel模式处理程序。客户软件在运行过程中,如发生异常或外部中断等事件,或执行I/0操作,可能导致VM exit,将处理器状态由Guest模式切换回Kernel模式。KVM 内核模块检查发生VM exit的原因,如果VM exit由于I/O操作导致,则执行系统调用返回操作,将I/O操作交给处于User模式的Qemu线程来处理,Qemu线程在处理完I/O操作后再次执行ioctl,指示KVM切换处理器到Guest模式,恢复客户软件的运行;如果VM exit由于其它原因导致,则由KVM内核模块负责处理,并在处理后切换处理器到Guest模式,恢复客户机的运行。
3、结束语
KVM是解决虚拟化问题的一个重要解决方案,它是第一个进入内核的虚拟化解决方案,并能用于服务器虚拟化 KVM的另外一个优点是它是内核的一部分,因此可以利用内核的优化和改进。与其它独立的系统管理程序解决方案相比,这种方法是一种不会过时的技术 KVM两个最大的缺点是需要较新的能够支持虚拟化得处理器,以及一个用户空间的QEMU进程来提供I/O虚拟化。不管好与坏,KVM位于内核中,这对于现有解决方案来说是一个巨大的飞跃。
核心关注:拓步ERP系统平台是覆盖了众多的业务领域、行业应用,蕴涵了丰富的ERP管理思想,集成了ERP软件业务管理理念,功能涉及供应链、成本、制造、CRM、HR等众多业务领域的管理,全面涵盖了企业关注ERP管理系统的核心领域,是众多中小企业信息化建设首选的ERP管理软件信赖品牌。
转载请注明出处:拓步ERP资讯网http://www.toberp.com/
本文标题:浅析处理器虚拟优化技术及KVM实现
本文网址:http://www.toberp.com/html/consultation/1083978525.html