首页> 中国专利> 基于内存热插拔的虚拟机动态内存管理系统

基于内存热插拔的虚拟机动态内存管理系统

摘要

本发明公开了一种基于内存热插拔的虚拟机动态内存管理系统,包括内存监视模块、内存分配模块及内存热插拔模块。内存热插拔模块利用Linux内存热插拔机制,在半虚拟化Linux虚拟机上实现内存热插拔,打破虚拟机初始的内存上限,任意的增加或减小内存,有效提高了虚拟机内存的扩展性。内存分配模块一方面动态预测虚拟机的内存需求,平衡各虚拟机的内存压力,既能满足虚拟机的内存需求,又能提高物理机的内存利用率;另一方面可以在物理机内存不足时,通过合理减小现有虚拟机的内存来创建新的虚拟机,实现了内存过量使用,提高了物理机的内存利用率。

著录项

  • 公开/公告号CN102222014A

    专利类型发明专利

  • 公开/公告日2011-10-19

    原文格式PDF

  • 申请/专利权人 华中科技大学;

    申请/专利号CN201110162615.0

  • 发明设计人 金海;廖小飞;马博;刘海坤;

    申请日2011-06-16

  • 分类号G06F9/455(20060101);G06F12/02(20060101);

  • 代理机构42201 华中科技大学专利中心;

  • 代理人李智

  • 地址 430074 湖北省武汉市洪山区珞喻路1037号

  • 入库时间 2023-12-18 03:34:35

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2013-05-22

    授权

    授权

  • 2011-11-30

    实质审查的生效 IPC(主分类):G06F9/455 申请日:20110616

    实质审查的生效

  • 2011-10-19

    公开

    公开

说明书

技术领域

本发明属于计算机应用领域,涉及Xen半虚拟化虚拟机的内存管理,具体为一种多虚拟机环境下的动态内存管理系统。

背景技术

当前计算系统的资源规模不断扩展,处理能力快速增强,资源种类日益丰富,应用需求灵活多样。虚拟化技术能够动态组织多种计算资源,实现透明化的可伸缩计算系统架构,从而灵活构建满足多种应用需求的计算环境,提高计算资源的使用效率。各种不同的虚拟化解决方案不断涌现,虚拟化软件Xen无疑是其中的佼佼者。Xen是剑桥大学发起的一个开源的虚拟机项目,其性能接近单机操作系统的性能。由于其优越的性能和开源性,所以被业界广泛看好,被认为是未来最有前途的虚拟化解决方案之一。气球驱动是Xen虚拟机内存管理的重要功能,用来调整虚拟机的内存大小。但是气球驱动存在缺陷,比如不能扩展虚拟机的物理地址空间,导致虚拟机内存大小存在上限;频繁使用气球驱动会导致物理地址空间不连续,产生内存碎片。内存热插拔是操作系统内存管理的一项重要技术,可以有效改善气球驱动的缺点,但是在Xen虚拟机上还未实现。

一般情况下,单台物理机上运行多台虚拟机使用静态内存分配,即虚拟机的内存大小始终不变或者由管理员手动调整,在虚拟机负载变化时,可能出现内存不足或内存利用率过低的情况。因此需要一种动态的内存管理策略,根据每个虚拟机负载的变化自动调整虚拟机的内存大小,满足虚拟机的内存需求并充分利用物理机内存。

发明内容

本发明的目的在于提供一种基于内存热插拔的虚拟机动态内存管理系统,该系统能够打破虚拟机的内存上限,任意的增加或减小虚拟机;可根据虚拟机负载的变化,动态的调整每个虚拟机的内存大小,满足虚拟机的内存需求并提高物理机的内存利用率;在物理机内存不足时,通过合理减小现有虚拟机的内存,动态创建新的虚拟机。

基于内存热插拔的虚拟机动态内存管理系统,包括

内存监视模块,用于获取各虚拟机的内存信息;

内存分配模块,用于依据各虚拟机的内存信息进行动态内存分配和动态创建虚拟机;

内存热插拔模块,用于将虚拟机的内存调整到内存分配模块计算得到的内存目标值;

所述动态内存分配按照如下方式进行:

(11)计算各虚拟机的内存增量ΔMl=Mused(n)l-Mused(n-1)l和交换分区增量ΔSl=S(n)l-S(n-1)l,其中Mused(n)l和Mused(n-1)l分别为第l个虚拟机在第n和n-1个时间点的使用内存,S(n)l和S(n-1)l分别为第l个虚拟机在第n和n-1个时间点的使用交换分区,l=1,...,L,L为虚拟机总数;

(12)预测各虚拟机下一个时间点需要的使用内存Mpredict(n+1)l=Mused(n)l+ΔMl+ΔSl

(13)计算第n+1个时间点的平均内存利用率Uavg(n+1)=Σi=1LMpredict(n+1)l/Σl=1LMtotal(n)l,;

(14)计算各虚拟机在第n+1个时间点的内存目标值Mtarget(n+1)l=Mpredict(n+1)l/Uavg(n+1);

(15)调用内存热插拔模块调整各虚拟机的内存至目标值Mtarget(n+1)l

(16)睡眠T秒,然后返回步骤(11);

所述动态创建虚拟机按照如下方式进行:

(21)若物理机的空闲内存大于或等于新虚拟机设定的内存,则直接创建新虚拟机,结束;否则,进入步骤(22);

(22)计算已有虚拟机当前的平均内存利用率Uavg=∑Mused/(∑Mtotal-Mnew+Mfree),其中,∑Mused为已有虚拟机当前的使用内存总和,∑Mtotal为已有虚拟机的内存之和,Mnew为新虚拟机设定的内存,Mfree为物理机当前的空闲内存;

(23)计算各已有虚拟机的内存目标值Mtargetl=Musedl/Uavg,Musedl为第l个已有虚拟机当前的使用内存;

(24)调用内存热插拔模块将各已有虚拟机的内存调整到步骤(23)得到的内存目标值后创建新虚拟机。

进一步地,所述内存热插拔模块按照如下方式调整虚拟机内存:

(31)将虚拟机的内存目标值与虚拟机的当前内存进行比较,若大于,进入步骤(32);若小于,进入步骤(34);若等于,则结束;

(32)若虚拟机的物理地址空间小于虚拟机的内存目标值,则扩展其物理地址空间至大于或等于内存目标值,记扩展的新物理地址空间中的内存页面为离线页面,进入步骤(33),否则,直接进入步骤(33);

(33)增加虚拟机内存至内存目标值:

(331)若虚拟机的内存目标值大于当前内存,则计算虚拟机内存目标值与当前内存的差值Δ1,进入步骤(332),否则,结束;

(332)如果存在保留页面,则为一个保留页面分配内存,记该保留页面为可用页面,返回步骤(331);否则,进入步骤(333);

(333)若Δ1大于128M且存在离线内存段,则为一个离线内存段分配内存,记该离线内存段为可用内存段,返回步骤(331),否则,进入步骤(334);

(335)按照地址先后顺序逐一对离线页面分配内存直到被分配的内存和等于Δ1,记被分配内存的离线页面为可用页面;

(34)减小虚拟机内存至内存目标值:

(341)若虚拟机的内存目标值小于当前内存,则计算当前内存与虚拟机内存目标值的差值Δ2,进入步骤(342),否则,结束;

(342)若Δ2大于或等于128M,则进入步骤(343),否则,进入步骤(344);

(343)查询是否存在可删除的内存段,若存在,则将其中一个内存段的内存释放给虚拟机管理器,记该内存段为离线内存段,返回步骤(341),否则,进入步骤(344);

(344)向虚拟机操作系统申请大小为Δ2的内存,将申请到的内存页面释放给虚拟机管理器,并记这些页面为保留页面。

具体而言,本发明有如下特点:

(1)扩展性好

Xen现在使用气球驱动来调整虚拟机的内存大小,气球驱动不能扩展虚拟机的物理地址空间,即不能突破虚拟机启动时的内存上限,另外频繁的使用气球驱动会产生大量的内存碎片。本发明中实现的虚拟机内存热插拔技术,可以扩展虚拟机的物理地址空间,使虚拟机的内存大小无上限,可以任意的增加或减小虚拟机内存,有效的提高了虚拟机内存的扩展性;与气球驱动相比,通过内存热插拔的方式减小内存可以避免内存碎片的产生。

(2)可用性好

Xen虚拟机的内存管理是静态的,只能手动地调整虚拟机内存大小,随着负载的变化,可能出现内存不足或内存浪费的情况。本发明中的动态内存分配功能可以动态感知虚拟机的内存压力,预测虚拟机的内存需求,平衡虚拟机的内存压力,既能满足虚拟机的内存需求,提高虚拟机性能,又能提高物理机的内存利用率,增强了虚拟机的可用性。

在物理机内存不足时,Xen无法创建新虚拟机。本发明中的动态创建虚拟机功能可以在物理机内存不足时,通过合理减小现有虚拟机的内存,来创建新的虚拟机,实现了虚拟化技术中的重要功能内存过量使用(memory overcommit),增强了虚拟机的可用性。

(3)稳定性好

本发明经过长时间的测试,测试时使用多种测试环境,包括手动设置的各种极端情况,以及使用各种权威的基准测试程序进行长时间的测试,结果证明系统中的各项功能都是稳定的,可靠的。

附图说明

图1为本发明的系统结构图;

图2为本发明的系统功能模块图;

图3为本发明的物理地址空间状态图;

图4为本发明的内存热插拔驱动工作流程图;

图5为本发明的热插拔增加内存流程图;

图6为本发明的热插拔减小内存流程图;

图7为本发明的动态内存分配流程图;

图8为本发明的动态创建虚拟机流程图。

具体实施方式

本发明实现的动态内存管理系统基于Xen4.0开发,针对半虚拟化虚拟机。

系统结构如图1所示,该系统应用于x86架构的物理硬件,虚拟机管理器(Virtual Machine Monitor)运行在物理硬件之上,负责最底层的资源管理,比如内存管理,CPU调度,设备访问等。Domain 0是特权域,只有一个,负责管理每个domain U。Domain U是客户域,可以有多个,下文中提到的虚拟机均指domain U。Xenstore是一个类似数据库的文件系统,由domain 0建立,与每个domain U共享。Xenstore存储了虚拟机的配置和状态信息,每种信息都有对应的数据项,domain 0和domain U通过读写同一个数据项进行域间通信。每个domain U中运行一个内存信息监控进程,获得内存信息并发送给domain 0;domain 0中运行一个动态内存分配进程,负责接收domain U的内存信息,为动态内存分配和动态创建虚拟机功能计算每个domain U的内存目标值,并发送给domain U中的内存热插拔驱动。Domain 0和domain U的操作系统均为64位的Linux(内核版本为2.6.31)。

如图2所示,该系统由三个模块构成,分别是内存监视模块,内存分配模块和内存热插拔模块。

内存监视模块的作用是监视每个虚拟机的内存信息,具体做法是通过xenstore进行域间通信。Domain U中运行一个进程获得所需的内存信息,包括内存利用率,交换分区利用率等,并写入xenstore;domain 0中运行一个进程读取xenstore,获得domain U的内存信息。虚拟机的内存包括使用内存和空闲内存,内存利用率就是使用内存占虚拟机内存的比例。

内存分配模块的作用是计算动态内存分配和动态创建虚拟机时如何分配虚拟机内存。具体做法是分析内存监视模块获得的内存信息,使用相应的分配算法计算每个虚拟机内存大小的目标值。

内存热插拔模块的作用是调整每个虚拟机的内存大小,具体做法是根据内存分配模块计算出的虚拟机内存目标值,调用内存热插拔驱动调整虚拟机内存至目标值;另外还提供了用户态的调用接口,可以手动调用内存热插拔驱动调整虚拟机内存大小。

内存热插拔驱动执行过程中物理地址空间可能出现的状态如图3所示。白色部分代表操作系统的可用内存;阴影部分代表操作系统的不可用内存,包括减小内存时产生的离线内存段和保留页面,以及细粒度增加内存时留下的物理地址空间末尾的离线页面。

动态内存管理系统具有内存热插拔,动态内存分配,动态创建虚拟机三种基本功能,下面结合附图和实例对本发明作详细的说明。

(1)如图4所示,内存热插拔驱动的工作流程如下:

(1.1)加载内存热插拔驱动模块,并初始化;

(1.2)接收内存目标值,执行内存热插拔任务;

(1.3)若内存目标值大于虚拟机内存当前值,执行增加内存处理函数,进行增加内存的相关操作,进入步骤(1.4),;若目标值小于虚拟机内存当前值,执行减小内存处理函数,进行减小内存的相关操作,进入步骤(1.4),;

(1.4)如果目标值等于当前值,结束;否则(某个步骤出现错误),休眠一个时钟节拍(HZ)后进入步骤(1.3),继续执行内存热插拔任务。

如图5所示,增加内存的流程如下:

(A1)若虚拟机的物理地址空间小于虚拟机的内存目标值,则扩展其物理地址空间至大于或等于内存目标值,记扩展的新物理地址空间中的内存页面为离线页面,进入步骤(2.2),否则,直接进入步骤(2.2)

(A2)若虚拟机的内存目标值大于当前内存,则计算虚拟机内存目标值与当前内存的差值Δ1,进入步骤(A3),否则,结束;

(A3)如果存在保留页面,则为其中一个保留页面分配内存,记该保留页面为可用页面即增加了一页内存,返回步骤(A2);否则,进入步骤(A4);

(A4)若Δ1大于等于128M且存在离线内存段,则为其中一个离线内存段分配内存,记该离线内存段为可用内存段即增加了一段内存,返回步骤(A2),否则,进入步骤(A5);

(A5)按照地址先后顺序逐一对离线页面分配内存直到被分配的内存和等于Δ1,记被分配内存的离线页面为可用页面,此时增加内存操作已经完成。

如图6所示,减小内存的流程如下:

(B1)若虚拟机的内存目标值小于当前内存,则计算当前内存与虚拟机内存目标值的差值Δ2,进入步骤(B2),否则,结束;

(B2)若Δ2大于或等于128M,则进入步骤(B3),否则,进入步骤(B4);

(B3)查询是否存在可删除的内存段,可删除的内存段是指可以通过内存迁移技术使该内存段中的所有内存页面变成空闲页面,若存在,则将其中一个内存段对应的物理地址空间从内存分配器中删除,并将该内存段的内存释放给虚拟机管理器,记该内存段为离线内存段即减小了一段内存,返回步骤(B1),否则,进入步骤(B4)

(B4)向虚拟机操作系统申请大小为Δ2的内存,将申请到的内存页面释放给虚拟机管理器,并记这些页面为保留页面,即减小了大小为Δ2的内存,此时减小内存的操作已完成。

(2)如图7所示,动态内存分配工作流程如下:

(2.1)通过内存监控模块获得每个虚拟机的内存信息;

(2.2)计算各虚拟机的内存增量ΔMl和交换分区增量ΔSl,计算方法如下,其中Mused(n)l和Mused(n-1)l分别为第l个虚拟机在第n和n-1个时间点的使用内存,S(n)l和S(n-1)l分别为第l个虚拟机在第n和n-1个时间点的使用交换分区,l=1,...,L,L为虚拟机总数,第n个时间点为当前时间点;

(2.3)预测内存需求,即下一个时间点需要的使用内存,预测值Mpredict(n+1)l等于当前的使用内存Mused(n)l加上内存增量和交换分区增量;

  Mpredict(n+1)l=Mused(n)l+ΔMl+ΔSl

(2.4)计算第n+1个时间点的平均内存利用率Uavg(n+1),Mtotal(n)l是第l个虚拟机在第n个时间点的内存;

(2.5)计算各虚拟机在第n+1个时间点的内存目标值Mtarget(n+1)l,等于内存需求预测值除以平均内存利用率。

  Mtarget(n+1)l=Mpredict(n+1)l/Uavg(n+1)

(2.6)如果虚拟机内存利用率在平均内存利用率范围(1~10%)内,进入步骤(2.7);否则进入步骤(2.8);

  |Mpredict(n+1)l/Mtotal(n)l-Uavg(n+1)|≤平均内存利用率范围

(2.7)内存目标值赋值为内存当前值,不调整内存大小,目的是减少内存调整的次数;

  Mtarget(n+1)l=Mtotal(n)l

(2.8)如果内存目标值小于产生内存溢出的临界值(/proc/meminfo中的Committed_AS),进入步骤(2.9),否则进入步骤(2.10);

(2.9)内存目标值赋值为Committed_AS,避免产生内存溢出;

  Mtarget(n+1)l=Committed_AS

(2.10)调用内存热插拔驱动调整每个虚拟机的内存至目标值Mtarget(n+1)l

(2.11)睡眠T秒,T为动态内存分配的周期,然后返回步骤(2.1)。

其中步骤(2.6)到步骤(2.9)是针对一些特殊情况的优化处理,一方面使用内存利用率范围来减少内存调整的次数,另一方面要避免产生内存溢出。步骤(2.6)到步骤(2.9)不是必要的步骤。

(3)如图8所示,动态创建虚拟机的流程如下:

(3.1)若物理机的空闲内存大于或等于新虚拟机设定的内存,则直接创建新虚拟机,结束;否则,进入步骤(3.2);

(3.2)通过内存监控模块获得每个虚拟机的内存信息;

(3.3)保留新虚拟机设定的内存后,计算平均内存利用率Uavg,其中∑Mused为已有虚拟机的使用内存总和,∑Mtotal为已有虚拟机的内存之和,Mnew是新虚拟机设定的内存,Mfree是物理机的空闲内存;

  Uavg=∑Mused/(∑Mtotal-Mnew+Mfree)

(3.4)计算各已有虚拟机的内存目标值Mtargetl,其中Mused l为第l个已有虚拟机当前的使用内存

  Mtarget l=Mused l/Uavg

(3.5)调用内存热插拔驱动调整每个虚拟机的内存至步骤(3.4)中的内存目标值Mtargetl

(3.6)创建新虚拟机,此时物理机已经有足够的空闲内存来创建新虚拟机。

实例:

本发明所阐述的动态内存管理系统可以通过具体实例来说明,实验环境只需一台PC机,配置如下:

物理机上需要安装本发明修改后的Xen 4.0和Linux 2.6.31内核,domain U与domain 0都使用Linux 2.6.31内核,下面分别测试本发明的三种功能。

(1)虚拟机内存热插拔测试

(1.1)初始状态:物理机内存为2G,domain 0内存固定为1G(不能被改变);

(1.2)创建一个256M内存的虚拟机;

(1.3)粗粒度增加内存:使用内存热插拔驱动在domain 0的用户态接口设置虚拟机内存为512M,增加了256M内存,即增加了两段内存;

(1.4)细粒度增加内存:设置虚拟机内存为562M,增加了50内存;

(1.5)粗粒度减小内存:设置虚拟机内存为434M,减小了128M内存,即一段内存;

(1.6)细粒度减小内存:设置虚拟机内存为400M,减小了34M内存。

以上测试证明了虚拟机内存热插拔可以打破虚拟机初始的内存上限,任意的增加或减小虚拟机内存。另外动态内存分配的测试过程需要长时间频繁的调整内存大小,可以证明内存热插拔驱动的稳定性和可靠性。

(2)动态创建虚拟机测试

(2.1)初始状态:物理机内存为2G,domain 0内存固定为1G,物理机的空闲内存约为1G;

(2.2)创建两个虚拟机,内存都是500M,物理机空闲约为20M;

(2.3)使用“xm create”命令直接创建一个256M内存的虚拟机,创建失败,因为物理机的空闲内存不足;

(2.4)使用动态创建虚拟机功能,创建新虚拟机成功;

(2.5)使用动态创建虚拟机功能,创建第四个256M内存的虚拟机成功;

(2.6)使用动态创建虚拟机功能,创建第五个256M内存的虚拟机成功。以上测试证明了动态创建虚拟机功能可以在物理机内存不足的情况下,通过合理减小现有虚拟机的内存,创建新虚拟机,实现了内存过量使用。

(3)动态内存分配测试

(3.1)初始状态:物理机内存为2G,domain0内存固定为1G,物理机的空闲内存约为1G;

(3.2)创建两个虚拟机,内存都是512M;

(3.3)静态内存分配测试:一个虚拟机运行基准测试程序Spec CPU 2006,另一个虚拟机空转;

(3.4)静态内存分配测试完毕后,将两个虚拟机关闭,然后按照相同的配置重新创建两个虚拟机;

(3.5)动态内存分配测试:一个虚拟机运行基准测试程序Spec CPU 2006,另一个虚拟机空转。

在动态内存分配测试过程中,随着虚拟机负载的变化,两个虚拟机内存大小动态变化,使高负载的虚拟机具有较大的内存,低负载的虚拟机具有较小的内存。

基准测试程序Spec CPU 2006的测试结果如下表所示,动态内存分配对内存密集型测试项目perlbench,bzip2和gcc的性能有明显的提升,其他测试项目对内存要求不高,性能变化不大。长时间的运行高负载的基准测试程序也证明了动态内存分配的高稳定性和可靠性。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号