基于内存空洞机制的虚拟机内存资源分配方法

文档序号:6372118阅读:258来源:国知局
专利名称:基于内存空洞机制的虚拟机内存资源分配方法
技术领域
本发明主要涉及的领域是虚拟化系统软件技术领域,特别是多虚拟机平台的内存资源按需分配和管理的方法。
背景技术
虚拟化技术是云计算的核心技术之一,通过虚拟化,能够灵活的将一台计算机的资源按照需求划分成为多台虚拟机,并提供给多个不同的用户同时使用,从而有效提高了硬件资源的利用率,降低了使用成本。因此,该技术通常也称为“硬件资源整合”。硬件资源整合的关键在于资源的按需分配,即物理机上的每台虚拟机能够按照自己对资源的需求量,合理地获得相应部分硬件资源的使用权。在虚拟化平台中,取代传统操作系统特权级的虚拟机监视器(Virtual MachineMonitor,以下简称为VMM)为虚拟机分配物理硬件资源,并且保证这些资源在VMM的保护 下,虚拟机能够对其进行分时、分区域的有序访问,并且VMM之上还运行着一个处于特权级别用于管理整个虚拟化平台的虚拟机,被称为虚拟化平台的系统管理层Host。目前,CPU和I/O资源的按需分配已经获得了很好的效果。因为CPU和I/O都是分时使用的资源,所以虚拟机只需在VMM的合理调度下分时地使用CPU或者I/O资源,便可达到按需分配的目的。但是,内存资源是分区域使用的,传统的VMM设计者认为同一块内存区域只能分配给一台虚拟机,从而使内存的按需分配面临很大的困难。为了解决内存资源按需分配的问题,业界提出了“内存过量提交”(MemoryOvercommit)的思路。即一台物理机上运行的虚拟机的内存值之和,大于这台物理机的实际物理内存。在这种情况下,虚拟机的部分内存不能直接访问,VMM需要根据虚拟机对内存的需求,主动或者被动地采用一些机制,为这些虚拟机分配和回收物理内存,实现内存的按需分配。学术界和工业界已经对内存资源的过量提交进行了深入的研究和开发,成功的采用若干种不同的方法,在一定程度上实现了内存资源的按需分配。具体包括内存页共享、内存热插拔和气球驱动等技术,下面分别介绍三个方面的代表性工作Diwaker Gupta,Sangmin LeeiMichael Vrable,Stefan SavageiAlex C. Snoeren,George Varghese,Geoffrey M. Voelker, and Amin Vahdat !Difference Engine Harnessing Memory Redundancy in Virtual Machines. Proceedings of the 8thSymposium on Operating Systems Design and Implementation. Usenix 2008.该论文提出了利用内存页共享技术来实现内存的过量提交。内存页共享机制是指多台虚拟机中内容相同的虚拟内存页可以同时使用同一物理内存页,从而节省了物理内存,并可以使节省下来的物理内存被其它的虚拟机使用。但是,页共享技术的实现效率比较低,给虚拟机的性能造成了较大的影响,而且,页共享通常仅当多个虚拟机具有大量相同内存数据的情况下(如多个虚拟机使用同一版本的操作系统)才能够取得较好的效果。反之,如果同一台物理机上的多个虚拟机具有各不相同的程序和数据,页共享技术将几乎失效。
Joel H. Schopp, Keir Fraser,Martine J. Silbermann-Resizing Memory WithBalloons and Hotplug,Proceedings of the Linux Symposium,2006该论文提出了内存热插拔技术。内存热插拔本是一项在传统操作系统中使用的,能够在不停机的状况下改变物理内存大小的机制,其原意是指通过内存硬件的动态插入和拔出来改变可用内存,并使操作系统能够及时感知到内存的变换。在虚拟化平台下,VMM可以通过硬件模拟的方式来做到虚拟机内存热插拔。内存热插拔的缺点是显而易见的。首先,热插拔对内存操作的粒度比较大,通常最小的操作单位为128MB,不能满足更细的粒度要求;而且,该技术需要虚拟机操作系统的内核支持,而现有的很多操作系统还不能支持;另外,热拔出比热插入需要更长的时间,因为热拔出需要将准备拔出的内存上的数据移到其他的内存区域上,这个过程比较费时,而且可能会给系统带来性能上的损失和潜在的业务风险。Carl A. Waldspurger Memory Resource Management in VMware ESXServer. Proceedings of the 5th Symposium on Operating Systems Design andImplementation. Usenix 2002. 该论文提出了基于“气球驱动”的内存过量提交机制。“气球驱动”是安装在虚拟机操作系统中的驱动程序,能够和VMM通信,并且能够按照预先的设定,对虚拟机的物理内存进行动态调整。其主要手段是“气球驱动”向虚拟机操作系统申请并占据一定量的内存,而通过与VMM之间的通道,将这部分内存交给VMM使用,从而使VMM原本分配给某个虚拟机的内存被“气球驱动”所回收,并能够用于其他虚拟机。被“气球驱动”所占据的这部分内存,由于能够按需伸缩,被形象地称为“气球”。如果虚拟机实际内存大于目标值,“气球驱动”向VMM请求以减少内存,VMM响应该请求,从该虚拟机中收回多余的实际内存,同时增大“气球”的体积。同样地,如果虚拟机实际内存值小于设定的目标值,“气球驱动”向VMM请求以获得更多的内存,VMM响应该请求,并且分配给该虚拟机更多的物理内存,同时缩小“气球”的体积。实践证明,气球驱动在大部分的应用场合中会收到很好的效果,特别是在合理的调度程序的控制下,能够有效地整合物理主机的内存资源。因此,目前主流的虚拟化平台如VMWare、XEN等等都已经针对该技术开发出了成熟的实现,并已大量应用。但是,在某些特定的场合中,气球驱动可能会严重降低系统性能。例如,当虚拟机在短时间内对内存的需求量大量增加的时候,如果调度程序没有及时通过气球驱动缩小“气球”来增大虚拟机内存,虚拟机操作系统将会因为可用内存不足,触发换页机制,将内存页换出到外部存储设备中。因而降低了虚拟机的性能,同时,页面的换出对虚拟机的I/o造成了很高的负荷。虚拟机操作系统触发其换页机制,是因为操作系统认为可用内存不足,而可用内存实际上被气球驱动所占据,随时有可能回收,但操作系统无法掌握这一情况。

发明内容
本发明的技术解决问题是克服现有技术的不足,提供一种基于内存空洞机制的虚拟机内存资源分配方法,该方法能够有效解决在虚拟机内存需求量激增时,触发虚拟机换页机制,造成的性能严重下降问题。本发明的技术解决方案是基于内存空洞机制的虚拟机内存资源分配方法,虚拟机监视器VMM为虚拟机分配物理硬件资源,步骤如下(I)假设虚拟机的内存总量为T,在虚拟机操作系统中加载一个内核驱动模块,称之为内存空洞驱动;(2)内存空洞驱动按照气球驱动的工作方式,申请并占据大小为R的可用内存空间,并使VMM回收这部分内存,以重复利用;所述的R < T ;(3)依据设定的空洞大小值H,内存空洞驱动在步骤(2)中占据的可用内存空间内为虚拟机分配大小为H的内存空洞区域,即H < R,该内存空洞为没有建立客户机虚拟地址到客户机物理地址映射的内存空间,并且为虚拟机可见的可用内存的一部分;(4)虚拟机在运行的过程中,当发生内存访问操作时,根据访问的内存所属的区域不同,按照以下两种情况处理
(4. I)所访问的内存是已经分配给虚拟机的内存,则直接访问;(4. 2)所访问的内存不是VMM实际分配给虚拟机的内存,则根据这些区域是否属于步骤(3)中的内存空洞区域,按照以下两种情况处理(4. 2. I)若属于内存空洞区域,VMM立刻为该访问内存分配物理内存页,并且建立从虚拟机内存页到物理内存页的映射,使访问内存的操作能够正常进行;(4. 2. 2)若不属于内存空洞区域,说明发生了其他访问错误,并且该错误不是由内存空洞机制造成的,由VMM处理该错误。所述步骤(3)中的设定的空洞大小值H取值范围为[1/3R-2/3R]。为了维护内存动态平衡,在Host上设置一个监视进程,监视进程工作流程如下第一步,监视进程每秒获取每台虚拟机内存空洞的大小和剩余可用内存的大小,根据获取信息进行如下判断当某台虚拟机的内存空洞的大小低于预设的阈值K时,该监控进程会将该虚拟机内存空洞大小的设定增加大小为Q的内存空洞区域;Q的大小设定为成/8,K设定为HV4 ;当所有虚拟机剩余可用内存之和S低于系统预先设定的阈值SlOT,即S < Slow,或者物理主机总体对内存的需求量增加,需要对其中某台虚拟机缩小空洞时,监控进程会对每个或者某个虚拟机的内存空洞进行部分的撤销操作,即对每台虚拟机执行撤销大小为D的内存空洞;SlOT大小的范围为所有虚拟机分配的启动内存T之和的[1/4-1/6],每次撤销的内存空洞大小D为成/8 ;当所有虚拟机剩余可用内存之和S高于系统预先设定的阈值Shigh,即S > Shigh,或者物理主机总体对内存的需求量减少,需要对其中每台虚拟机增大空洞时,空洞监控进程会对每个或者某台虚拟机的部分可用内存进行空洞的建立操作,即对每台虚拟机执行增加大小为D的内存空洞;Shigh大小的范围为所有虚拟机分配的启动内存T之和的[1/2-2/3],每次增加的内存空洞大小D为Hc/8 ;上述H。为初始设定的空洞大小值,取值范围为[1/3R-2/3R];第二步,统计每台虚拟机需要增加或者撤销的内存空洞大小,向VMM依次提交相应内存空洞变化请求;VMM在每台虚拟机剩余内存基础上根据该请求设定空洞大小值H,内存空洞驱动从步骤(3)开始执行。本发明与现有技术相比有益效果为(I)当使用虚拟化平台将一台物理计算机划分为多个虚拟机,并通过气球驱动技术实现多个虚拟机之间内存资源的按需分配机制的时候。本发明能够在气球驱动的基础上,为虚拟机分配“内存空洞”区域。当虚拟机真正通过访存指令访问这些区域时候,才由VMM为其分配物理内存,同时,虚拟机操作系统不会感知内存空洞的存在,因此不需要修改虚拟机操作系统的内核来配合,增强了平台的兼容性;也不会在气球驱动占据过多内存的情况下,提前触发换页机制。(2)在虚拟机对内存的需求量激增的时候,本发明能够避免气球驱动带来的虚拟机性能下降的问题,减少内存页面的换出,降低I/o负载量,从而有效解决了在虚拟机内存需求量激增时,性能严重下降的问题。(3)本发明通过在Host中设置监视进程对所有虚拟机内存空洞大小和可用剩余内存大小进行实时监视,对于某台虚拟机的内存空洞大小低于预设的阈值,当所有虚拟机剩余可用内存之和高于系统预先设定的阈值和当所有虚拟机剩余可用内存之和低于系统预先设定的阈值三种情况的出现,按照内存调度策略,分别对该台或者所有的虚拟机内存空洞的大小做出调整。


图I为本发明安装了内存空洞驱动的虚拟机的内存空间分布示意图;图2为本发明虚拟客户机访存时通过XEN建立空洞和填补空洞的流程图;图3为本发明内存信息监视进程对内存空洞调整的流程图。
具体实施例方式基于内存空洞机制的虚拟机内存资源分配方法,如图2所示,步骤如下(I)假设虚拟机的内存总量为T,在虚拟机操作系统中加载一个内核驱动模块,称之为内存空洞驱动。其功能是调节本虚拟机的内存值,和设置内存空洞区域的大小,具体实现参照下述相应步骤进行。(2)内存空洞驱动按照气球驱动的工作方式,申请并占据大小为R的内存空间,并使VMM回收这部分内存,以重复利用。这时,虚拟机操作系统可见的可用内存和实际可用内存大小都是(T-R) ;R< T ;通常R的大小和T有关,一种可行的方式将R设为T/2左右;(3)依据设定的空洞大小值,内存空洞驱动为虚拟机分配大小为H的内存空洞(H<R),这时,虚拟机可见的可用内存大小为(T-R+H),而实际分配的物理内存为(T-R),H的取值范围为[1/3R-2/3R],一种通常的做法是设定H的大小为R/2左右;本发明将“气球”中这部分对虚拟机可见的内存区域称为“内存空洞”(Memory Hole),如图I所示。(4)虚拟机启动后,在运行的过程中,当发生内存访问操作时,根据访问的内存所属的区域不同,按照以下两种情况处理a)所访问的内存是已经分配给虚拟机的内存页,可以直接访问,而不会产生虚拟机运行状态的改变;b)所访问的内存不是VMM实际分配给虚拟机的内存,则根据这些区域是否属于内存空洞部分,又可以按照以下两种情况处理i.该区域是内存空洞区域,VMM立刻为空洞区域分配物理内存页,并且建立从虚拟机内存页到物理内存页的映射,从而实现对空洞区域的“填补”,使访问内存的操作能够正常进行;ii.该区域不是内存空洞区域,说明发生了其他访存错误,并且该访存错误不是由内存空洞机制造成的,VMM将采取其他现有的方法处理错误,例如销毁虚拟机等。按照步骤(4)的虚拟机访存处理方法,由于初始状态下分配的内存空洞区域被不断“填补”,会导致虚拟机所拥有的内存空洞大小随时间的增加而不断减少,从而使内存空洞的作用逐渐削弱。因此,为了维护系统内存的动态平衡,本发明在Host上设计了一个监视进程,该监视进程工作流程如下第一步,每秒获取每台虚拟机内存空洞的大小和剩余可用内存的大小,根据获取信息按照以下三种情况处理a)某台虚拟机的内存空洞总量减少,并且低于一个阈值K,则对这台虚拟机执行增加空洞的操作,即将虚拟机的可用内存区域再次通过内存空洞驱动归还给VMM,并将这些 区域的再次标记为空洞区域。具体操作监控进程将该虚拟机内存空洞大小的设定增加大小为Q的内存空洞区域;Q的大小设定为HciZU K设定为HV4 ;b)当所有虚拟机剩余可用内存之和S低于系统预先设定的阈值SlOT,即S < Slow,或者物理主机(物理计算机)总体对内存的需求量增加,则对其中每台虚拟机缩小空洞时,监控进程会对每个或者某台虚拟机的内存空洞进行部分的撤销操作,即对每台虚拟机执行撤销大小为D的内存空洞;SlOT大小的选定范围为所有虚拟机分配的启动内存T之和的[1/4-1/6],每次撤销的内存空洞大小D为成/8 ;c)当所有虚拟机剩余可用内存之和S高于系统预先设定的阈值Shigh,即S > Shigh,或者物理主机总体对内存的需求量减少,对其中每台虚拟机增大空洞时,监控进程会对每台或者某台虚拟机的部分可用内存进行空洞的建立操作,即对每台虚拟机执行增加大小为D的内存空洞;Shigh大小的选定范围为所有虚拟机分配的启动内存T之和的[1/2-2/3],每次增加的内存空洞大小D为HV8 ;上述Htl为初始设定的空洞大小值,取值[1/3R-2/3R];第二步,统计每台虚拟机需要增加或者撤销的内存空洞大小,向VMM依次提交相应内存空洞变化请求;VMM在每台虚拟机剩余内存基础上根据该请求设定空洞大小值H,内存空洞驱动从步骤(3)开始执行。实施例下面的VMM以业界流行的开源虚拟化平台XEN为例,说明实现本发明为例对本发明做进一步详细的说明。XEN支持Linux和Windows作为虚拟机的操作系统,其用于系统管理的特权虚拟机被称为DomO。物理计算机的CPU采用了具有虚拟化支持的Intel Virtual Machineextensions (VMX)技术和 Extend Page Table (EPT)技术的 Intel Xeon CPU。在XEN虚拟化平台中,有三种不同的内存地址空间,分别是从XEN或者虚拟机的不同视角看到的地址空间范围(I)客户机虚拟地址GVA(Guest Virtual Address):虚拟机中每个进程中的线性地址;(2)客户机物理地址GPA(Guest Physical Address):虚拟机操作系统所见的物理地址,又称为伪物理地址;
(3)宿主机物理地址HPA (Host Physical Address) :VMM内核空间的地址,也就是真实的物理地址。XEN使用Intel CPU的EPT技术,通过两次地址转换来支持地址空间的虚拟化,即客户机虚拟地址GVA —客户机物理地址GPA —宿主机物理地址HPA的转换。其中GVA — GPA的转换(所建立的映射称为L2P映射)是由客户操作系统决定,通常是虚拟机中操作系统通过页表来指定的;GPA — HPA的转换(所建立的映射称为P2M映射)是由XEN决定的,XEN在将物理内存分配给客户机时就确定了 GPA — HPA的转换,XEN用内部的数据结构记录映身寸关系。对于气球驱动所占据的内存空间,虚拟机已经为其建立了 L2P映射,操作系统认为这块内存被占用了。而本发明与气球驱动的不同在于本发明提出了基于内存空洞的内存分配方法,并不为空洞区域建立L2P映射,因而操作系统认为这部分的内存是可用内存。当虚拟机将要使用这部分内存之前,操作系统要为其建立了相应的L2P映射关系,所以在虚拟机真正通过访存指令访问这部分内存的时候,XEN需要为其建立相应的P2M映射关系。 同时,为了给XEN虚拟化环境增加建立和撤销内存空洞的功能,本发明进行了如下的改进。本发明在XEN中为内存空洞的建立和撤销增加了相应的服务例程,并且在此基础上增加面向虚拟机请求的调用接口,因此能够响应来自虚拟机内存空洞驱动的调用。XEN通过Copy-On-Write (以下简称C0W)机制,即将多台虚拟机的多个虚拟物理页面映射到了同一个机器物理页面上,并将该页面标为只读,如果有某台虚拟机对已共享的页面进行写操作,XEN会在虚拟机操作系统无感知的情况下,给该页面分配一块新的物理页面,并且建立相应的映射关系。内存空洞的建立和撤销也基于COW机制实现,在内存空洞驱动启动的时候,会得到预先分配的内存页面,用于和空洞的伪物理地址进行共享操作,该页面被称为源页面。在建立空洞时,将虚拟机请求传递的伪物理地址所对应的页面和预先分配的源页面进行共享;而在撤销空洞的时候,为已共享的页面分配一个物理页面并取消共享,保证虚拟机的内存访问指令能够正确执行。在系统运行的过程中,由于监视各个虚拟机剩余可用内存和内存空洞大小,监视进程会不断地向XEN提交关于某台虚拟机建立空洞和撤销空洞的请求,XEN需要对这些请求做出如下响应(I)建立空洞虚拟机发出建立空洞的请求,请求将内存的气球所占据的空间转化为内存空洞所占据的空间,并通过虚拟机传入页面的伪物理地址,按照如下的步骤完成该类型的请求a)首先对页面的伪物理地址进行检查,判断是否属于该虚拟机的气球所占据的内存页,如果发现有某个页面不是气球驱动所占据,则中止请求服务,返回错误代码;b)如果a)检查成功,对每一个页面调用COW例程,将预分配给该虚拟机的源页面和该页面进行共享,并向虚拟机返回成功的结果;c)虚拟机根据建立空洞请求的结果进行操作如果出现错误,进一步判断错误的原因,并且进行错误的恢复;如果成功,在虚拟机中为这部分内存撤销相应的L2P映射关系,形成空洞区域,操作系统将其加入可用内存中。(2)撤销空洞在运行过程中,如果某个虚拟机的某条指令访问到了空洞区域,Intel的VMX和EPT技术会确保CPU的控制权转入XEN中,VMM采取以下的步骤为虚拟机撤销空洞,并将该内存页恢复为可用状态a)检测虚拟机访问的内存是否处于空洞区域,如果不是,则不再进行下一步的处理,转向XEN现有的访存处理方法;b)如果访问的内存处于空洞区域中,XEN从空闲内存中取出一个内存页,并为其机器物理地址和伪物理地址建立相应的映射关系;考虑到虚拟机访问空洞区域造成的CPU运行状态的改变会带来较大的开销,为了减少开销,遵循程序执行的局部性原理,本发明会将该物理地址的相邻的后面M个内存页也撤销空洞,建立相应的内存映射关系。其中M是在XEN编译时可配置的值;c)撤销空洞区域成功后,将CPU恢复到虚拟机运行状态改变之前的访存指令上,继续运行。
同时,本发明还设立一个监控进程,以监视每台虚拟机的内存信息,包括空洞大小的变化,可用空闲内存的变化。每隔一秒钟,该进程从内存空洞驱动中获得这些信息。并且通过上述的内存空洞管理接口,调整每台虚拟机内存空洞的大小。在监视的过程中,虚拟机内存的变化会出现以下的几种情况(I)因为不断地因为虚拟机的访存指令的执行而撤销内存空洞,虚拟机的空洞大小总量会持续减少,当某个虚拟机的内存空洞的大小低于预设的阈值K时,该监控进程会将该虚拟机内存空洞增加大小为Q的区域。这里的Q的大小设定为凡/8,K设定为HV4 ;(2)从总体内存占用情况来看,每台虚拟机的可用内存之和为S,根据应用程序对内存的需求量的变化和虚拟机的运行状态的变化,S的大小会不断地增加或者减少。需要进行如下操作a)当所有虚拟机剩余可用内存之和S低于系统预先设定的阈值SlOT,即S < Slow,监控进程会对每个虚拟机的内存空洞进行部分的撤销操作,即对每台虚拟执行撤销大小为D的内存空洞。这里的S1ot大小的选定为所有虚拟机分配的启动内存T之和的1/6,每次撤销的内存空洞大小D为HV8。;b)所有虚拟机剩余可用内存之和S高于系统预先设定的阈值Shigh,即S > Shigh,监控进程会对每个虚拟机的部分可用内存进行空洞的建立操作,即对每台虚拟机执行增加大小为D的内存空洞。这里的Shigh大小的选定为所有虚拟机分配的启动内存T之和的1/6,而且如上一情形中提到的,每次撤销的内存空洞大小D为凡/8。例子对于某个虚拟化环境中,物理机配置如下,型号为Intel Xeon E5530的CPU两颗,支援上述提及的VMX和EPT技术,内存为DDR3,大小为16G(4GX4),网络接口卡为IGb以太网卡,硬盘为大小IT的SATA硬盘。Dom的配直如下,内存固定大小为3G,冋时在DomO启动后立即启动监视进程。在该物理机上同时启动12台操作系统为Redhat Linux Enterprise Server5. 4的虚拟机,给每个虚拟机分配的启动内存大小为T = 2GB。同时正如上述的提到的内存空洞机制,在虚拟机启动过程中启动内存空洞驱动,分配气球区域为R = IGB的,之后内存空洞驱动分配这IG内存中的512MB( = H0)为内存空洞区域。在运行的过程中,监视进程会不断地监视每台物理机的内存空洞和可用内存的大小,正如发明中提到的,会出现如下三种情形
(I)某台物理机的内存空洞大小⑶小于128MB。监视进程通知该虚拟机,使该虚拟机通过提供的接口向XEN申请大小为(512MB-H)的新的内存空洞,使其内存空洞大小恢复到512MB ;(2)如果所有的虚拟机可用内存之和小于一个阈值S1ot = 4GB,那么监视进程通知每台虚拟机,使该虚拟机通过提供的接口向XEN归还大小为64MB的内存空洞区域,从而减少每台虚拟机的内存空洞大小;(3)如果所有的虚拟机可用内存之和大于一个阈值Shigh = 12GB,那么监视进程通知每台虚拟机,使该虚拟机通过提供的接口向XEN申请大小为64MB的内存空洞区域,从而增加每台虚拟机的内存空洞大小。内存空洞驱动在本发明的设计下对虚拟机内存资源进行了有效调控。经实验证明,在使用了本发明后虚拟机的综合性能和服务器的内存利用率都有明显的改善。
本发明未详细说明部分属于本领域技术人员公知常识。
权利要求
1.基于内存空洞机制的虚拟机内存资源分配方法,虚拟机监视器VMM为虚拟机分配物理硬件资源,其特征在于步骤如下 (1)假设虚拟机的内存总量为T,在虚拟机操作系统中加载一个内核驱动模块,称之为内存空洞驱动; (2)内存空洞驱动按照气球驱动的工作方式,申请并占据大小为R的可用内存空间,并使VMM回收这部分内存,以重复利用;所述的R < T ; (3)依据设定的空洞大小值H,内存空洞驱动在步骤(2)中占据的可用内存空间内为虚拟机分配大小为H的内存空洞区域,即H < R,该内存空洞为没有建立客户机虚拟地址到客户机物理地址映射的内存空间,并且为虚拟机可见的可用内存的一部分; (4)虚拟机在运行的过程中,当发生内存访问操作时,根据访问的内存所属的区域不同,按照以下两种情况处理 (4. I)所访问的内存是已经分配给虚拟机的内存,则直接访问; (4. 2)所访问的内存不是VMM实际分配给虚拟机的内存,则根据这些区域是否属于步骤(3)中的内存空洞区域,按照以下两种情况处理 (4. 2. I)若属于内存空洞区域,VMM立刻为该访问内存分配物理内存页,并且建立从虚拟机内存页到物理内存页的映射,使访问内存的操作能够正常进行; (4. 2. 2)若不属于内存空洞区域,说明发生了其他访问错误,并且该错误不是由内存空洞机制造成的,由VMM处理该错误。
2.根据权利要求I所述的基于内存空洞机制的虚拟机内存资源分配方法,其特征在于所述步骤(3)中的设定的空洞大小值H取值范围为[1/3R-2/3R]。
3.根据权利要求I所述的基于内存空洞机制的虚拟机内存资源分配方法,其特征在于为了维护内存动态平衡,在Host上设置一个监视进程,监视进程工作流程如下 第一步,监视进程每秒获取每台虚拟机内存空洞的大小和剩余可用内存的大小,根据获取信息进行如下判断 当某台虚拟机的内存空洞的大小低于预设的阈值K时,该监控进程会将该虚拟机内存空洞大小的设定增加大小为Q的内存空洞区域;Q的大小设定为HciZU K设定为HV4 ; 当所有虚拟机剩余可用内存之和S低于系统预先设定的阈值SlOT,即S < Slow,或者物理主机总体对内存的需求量增加,需要对其中某台虚拟机缩小空洞时,监控进程会对每个或者某个虚拟机的内存空洞进行部分的撤销操作,即对每台虚拟机执行撤销大小为D的内存空洞;SlOT大小的范围为所有虚拟机分配的启动内存T之和的[1/4-1/6],每次撤销的内存空洞大小D为成/8 ; 当所有虚拟机剩余可用内存之和S高于系统预先设定的阈值Shigh,即S > Shigh,或者物理主机总体对内存的需求量减少,需要对其中每台虚拟机增大空洞时,空洞监控进程会对每个或者某台虚拟机的部分可用内存进行空洞的建立操作,即对每台虚拟机执行增加大小为D的内存空洞;Shigh大小的范围为所有虚拟机分配的启动内存T之和的[1/2-2/3],每次增加的内存空洞大小D为HV8 ; 上述Htl为初始设定的空洞大小值,取值范围为[1/3R-2/3R]; 第二步,统计每台虚拟机需要增加或者撤销的内存空洞大小,向VMM依次提交相应内存空洞变化请求;VMM在每台虚拟机剩余内存基础上根据该请求设定空洞大小值H,内存空洞驱动 从步骤(3)开始执行。
全文摘要
基于内存空洞机制的虚拟机内存资源分配方法,虚拟机监视器VMM为虚拟机分配物理硬件资源,(1)假设虚拟机的内存总量为T,在虚拟机操作系统中加载一个内核驱动模块,称之为内存空洞驱动;(2)内存空洞驱动按照气球驱动的工作方式,申请并占据大小为R的可用内存空间,并使VMM回收这部分内存,以重复利用;所述的R<T;(3)依据设定的空洞大小值H,内存空洞驱动在步骤(2)中占据的可用内存空间内为虚拟机分配大小为H的内存空洞区域,即H<R,该内存空洞为没有建立客户机虚拟地址到客户机物理地址映射的内存空间,为虚拟机可见的可用内存;(4)虚拟机在运行的过程中,当发生内存访问操作时,根据访问的内存所属的区域不同分别进行处理。
文档编号G06F9/455GK102779074SQ20121021423
公开日2012年11月14日 申请日期2012年6月18日 优先权日2012年6月18日
发明者刘兰峥, 张鹏飞, 彭宇行, 王怀民, 王意洁, 王柳峰, 田甜, 褚瑞 申请人:中国人民解放军国防科学技术大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1