一种动态分配内存的方法及系统与流程

文档序号:11774233阅读:355来源:国知局
一种动态分配内存的方法及系统与流程

本发明涉及虚拟化内存分配技术领域,特别是涉及一种动态分配内存的方法及系统。



背景技术:

虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机,即:在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。

目前采用内存气球技术实现宿主机对虚拟机的内存分配,宿主机通过监控所有虚拟机的内存使用情况,对内存使用较高的虚拟机动态增加内存,内存使用较低的虚拟机动态释放内存。当虚拟机的内存不够用时,内存气球通过压缩,宿主机向虚拟机分配更多的内存使用。在进行虚拟机配置时设置内存的最大内存值max,通过free命令查看内存使用情况,且看到的内存容量是虚拟机当前能够使用的内存情况,但是分配给虚拟机的最大内存不能超过虚拟机配置时分配给虚拟机的最大内存值max。如图1所示,可用内存值vm为虚拟机当前已经使用和可以使用的内存容量之和,内存最大值max为虚拟机配置时设置的最大内存容量,当虚拟机的可用内存值vm不够用时,宿主机需要分配更多的内存给虚拟机,但是可用内存值vm最大不能超过最大内存值max。另外,当虚拟化平台上运行多个虚拟机时,多个虚拟机的内存通过宿主机进行分配,但若多个虚拟机同时都需要增加内存时,可能导致宿主机的可用内存太小,影响宿主机的性能,最终影响虚拟机的性能。



技术实现要素:

本发明的目的在于提出一种动态分配内存的方法及系统,以解决现有技术中当虚拟机的可用内存不够用时,宿主机分配给虚拟机的最大内存不能超过配置时设置的最大内存值max;另外,若多个虚拟机同时都需要增加内存时,可能导致宿主机的可用内存太小,影响宿主机的性能,最终影响虚拟机性能的问题。

为达到上述目的,本发明提供了以下技术方案:

一种动态分配内存的方法,应用于宿主机,所述宿主机中运行有多个虚拟机,所述方法包括:

构建多个所述虚拟机的内存使用监控表,并同步到所述虚拟机的域配置文件;

实时监控所述宿主机和多个所述虚拟机的内存使用率;

根据所述宿主机和多个所述虚拟机的所述内存使用率动态分配所述虚拟机的最大内存容量;

当所述虚拟机的内存使用率高于第一预设值时,判断所述宿主机的内存使用率,若所述宿主机的内存使用率低于第二预设值时,增加分配给所述虚拟机的最大内存容量,并记录到所述虚拟机的内存使用监控表,且同步至所述域配置文件;

当所述虚拟机的内存使用率低于第三预设值时,降低分配给所述虚拟机的最大内存容量,并记录到所述虚拟机的内存使用监控表,且同步至所述域配置文件。

其中,所述构建多个所述虚拟机的内存使用监控表,并同步到所述虚拟机的域配置文件,包括:

查询在所述宿主机上所有运行状态为运行的虚拟机;

记录所述虚拟机的初始信息到所述内存使用监控表,所述初始信息包括:所述虚拟机的名称、id地址、配置时设置的最大内存值;

将所述内存使用监控表同步至所述虚拟机的域配置文件。

其中,所述当所述虚拟机的内存使用率高于第一预设值时,判断所述宿主机的内存使用率,若所述宿主机的内存使用率低于第二预设值时,增加分配给所述虚拟机的最大内存容量,并记录到所述虚拟机的内存使用监控表,且同步至所述域配置文件,包括:

当所述虚拟机的内存使用率高于所述第一预设值时,获取所述虚拟机的域配置文件中存储的最大内存量max,得到需要给所述虚拟机增加的内存容量为所述最大内存量max的1/2;

计算所述宿主机给所述虚拟机增加了内存后,判断所述宿主机剩余的内存使用率,若所述宿主机剩余的内存使用率低于所述第二预设值,调用扩容函数调整所述虚拟机的最大内存值为1.5max;

将调整后的内存容量更新至所述虚拟机的内存使用监控表,并同步至所述虚拟机的域配置文件。

其中,所述当所述虚拟机的内存使用率低于第三预设值时,降低分配给所述虚拟机的最大内存容量,并记录到所述虚拟机的内存使用监控表,且同步至所述域配置文件,包括:

当所述虚拟机的内存使用率低于所述第三预设值时,获取所述虚拟机的域配置文件中存储的最大内存量max,则减少的内存容量为所述最大内存量max的1/2;

调用缩容函数调整所述虚拟机的最大内存值为0.5max;

将调整后的内存容量更新至所述虚拟机的内存使用监控表,并同步至所述虚拟机的域配置文件。

其中,所述虚拟机的内存使用率为所述虚拟机的当前内存值与从所述虚拟机的域配置文件中获取的最大内存值的比值。

一种动态分配内存的系统,应用于宿主机,所述宿主机中运行有多个虚拟机,所述系统包括:

构建单元,用于构建多个所述虚拟机的内存使用监控表,并同步到所述虚拟机的域配置文件;

监控单元,用于实时监控所述宿主机和多个所述虚拟机的内存使用率;

分配单元,根据所述宿主机和多个所述虚拟机的所述内存使用率动态分配所述虚拟机的最大内存容量;

扩容单元,用于当所述虚拟机的内存使用率高于第一预设值时,判断所述宿主机的内存使用率,若所述宿主机的内存使用率低于第二预设值时,增加分配给所述虚拟机的最大内存容量,并记录到所述虚拟机的内存使用监控表,且同步至所述域配置文件;

缩容单元,用于当所述虚拟机的内存使用率低于第三预设值时,降低分配给所述虚拟机的最大内存容量,并记录到所述虚拟机的内存使用监控表,且同步至所述域配置文件。

其中,所述构建单元包括:

查询单元,用于查询在所述宿主机上所有运行状态为运行的虚拟机;

记录单元,用于记录所述虚拟机的初始信息到所述内存使用监控表,所述初始信息包括:所述虚拟机的名称、id地址、配置时设置的最大内存值;

同步单元,用于将所述内存使用监控表同步至所述虚拟机的域配置文件。

其中,所述扩容单元包括:

增容计算单元,用于当所述虚拟机的内存使用率高于所述第一预设值时,获取所述虚拟机的域配置文件中存储的最大内存量max,得到需要给所述虚拟机增加的内存容量为所述最大内存量max的1/2;

计算单元,用于计算所述宿主机给所述虚拟机增加了内存后,判断所述宿主机剩余的内存使用率,若所述宿主机剩余的内存使用率低于所述第二预设值,调用扩容函数调整所述虚拟机的最大内存值为1.5max;

第一调整单元,用于将调整后的内存容量更新至所述虚拟机的内存使用监控表,并同步至所述虚拟机的域配置文件。

其中,所述缩容单元包括:

缩容计算单元,用于当所述虚拟机的内存使用率低于所述第三预设值时,获取所述虚拟机的域配置文件中存储的最大内存量max,则减少的内存容量为所述最大内存量max的1/2;

调用单元,用于调用缩容函数调整所述虚拟机的最大内存值为0.5max;

第二调整单元,用于将调整后的内存容量更新至所述虚拟机的内存使用监控表,并同步至所述虚拟机的域配置文件。

其中,所述虚拟机的内存使用率为所述虚拟机的当前内存值与从所述虚拟机的域配置文件中获取的最大内存值的比值。

经由上述的技术方案可知,与现有技术相比,本发明公开了一种动态分配内存的方法,该方法通过在宿主机上运行实时监控程序,实时对宿主机的可用内存和所有虚拟机的内存使用率进行监控,根据监控来对虚拟机的内存大小进行调整,在虚拟机的内存需求超过配置的最大内存时,宿主机根据自身的性能对虚拟机进行内存的扩容,使虚拟机获取更大的内存来提高虚拟机的业务性能,实现虚拟机的内存超用;另外,当宿主机上运行多个虚拟机时,由于考虑了宿主机在增加虚拟机的内存的状态下,宿主机自己的可用内存使用情况,以保证宿主机业务能够正常运行。本发明还公开了一种动态分配内存的系统。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为现有技术中采用内存气球技术的内存变化示意图;

图2为本发明实施例一提供的一种动态分配内存的方法流程示意图;

图3为本发明实施例二提供的一种动态分配内存的方法流程示意图;

图4为本发明实施例三提供的一种动态分配内存的系统结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

现有方案以及本方案使用的前提:

linux操作系统安装了virtballoon的驱动,内核开启config_virtio_balloon;

虚拟机的域文件配置的内存气球选项<memballoonmodel='virtio'><addresstype='pci'domain='0x0000'bus='0x00'slot='0x07'function='0x0'/></memballoon>;

本申请是通过python脚本代码实现,借助libvirt虚拟化管理工具组件提供的命令行。结合开源虚拟化平台软件libvrit组件的提供api,嵌入c代码进行调用api,以完成整个方案。在宿主机上运行该方案的监控程序,实时监控宿主机的可用内存、所有虚拟机的内存使用率,根据调用libvirt的api程序判断是否对某个或者某些虚拟机进行内存增加或者释放。

实施例一

请参阅附图2,图2为本发明实施例一提供的一种动态分配内存的方法流程示意图。如图2所示,本发明实施例提供了一种动态分配内存的方法,应用于宿主机,包括:所述宿主机中运行有多个虚拟机,所述方法具体步骤包括如下:

s201、构建多个所述虚拟机的内存使用监控表,并同步到所述虚拟机的域配置文件。

需要说明的是,本实施例中首先需要创建虚拟机的全局链表,然后调用libvirt的api,查询到在宿主机上所有运行状态为运行的虚拟机,并且记录虚拟机的名称、id地址、配置内存大小到虚拟机的全局链表中。

具体的,所述构建多个所述虚拟机的内存使用监控表,并同步到所述虚拟机的域配置文件,包括:

查询在所述宿主机上所有运行状态为运行的虚拟机;

记录所述虚拟机的初始信息到所述内存使用监控表,所述初始信息包括:所述虚拟机的名称、id地址、配置时设置的最大内存值;

将所述内存使用监控表同步至所述虚拟机的域配置文件。

s202、实时监控所述宿主机和多个所述虚拟机的内存使用率。

需要说明的是,本实施例中在宿主机上运行该方案的监控程序,实时监控宿主机的可用内存、所有虚拟机的内存使用率,根据调用libvirt的api程序判断是否对某个或者某些虚拟机进行内存增加或者释放。

s203、根据所述宿主机和多个所述虚拟机的所述内存使用率动态分配所述虚拟机的最大内存容量。

s204、当所述虚拟机的内存使用率高于第一预设值时,判断所述宿主机的内存使用率,若所述宿主机的内存使用率低于第二预设值时,增加分配给所述虚拟机的最大内存容量,并记录到所述虚拟机的内存使用监控表,且同步至所述域配置文件。

具体的,该步骤可以分为如下步骤:

当所述虚拟机的内存使用率高于所述第一预设值时,获取所述虚拟机的域配置文件中存储的最大内存量max,得到需要给所述虚拟机增加的内存容量为所述最大内存量max的1/2;

计算所述宿主机给所述虚拟机增加了内存后,判断所述宿主机剩余的内存使用率,若所述宿主机剩余的内存使用率低于所述第二预设值,调用扩容函数调整所述虚拟机的最大内存值为1.5max;

将调整后的内存容量更新至所述虚拟机的内存使用监控表,并同步至所述虚拟机的域配置文件。

s205、当所述虚拟机的内存使用率低于第三预设值时,降低分配给所述虚拟机的最大内存容量,并记录到所述虚拟机的内存使用监控表,且同步至所述域配置文件。

具体的,该步骤可以分为如下步骤:

当所述虚拟机的内存使用率低于所述第三预设值时,获取所述虚拟机的域配置文件中存储的最大内存量max,则减少的内存容量为所述最大内存量max的1/2;

调用缩容函数调整所述虚拟机的最大内存值为0.5max;

将调整后的内存容量更新至所述虚拟机的内存使用监控表,并同步至所述虚拟机的域配置文件。

优选的,上述所述虚拟机的内存使用率为所述虚拟机的当前内存值与从所述虚拟机的域配置文件中获取的最大内存值的比值。

本实施例提供了一种动态分配内存的方法,该方法通过在宿主机上运行实时监控程序,实时对宿主机的可用内存和所有虚拟机的内存使用率进行监控,根据监控来对虚拟机的内存大小进行调整,在虚拟机的内存需求超过配置的最大内存时,宿主机根据自身的性能对虚拟机进行内存的扩容,使虚拟机获取更大的内存来提高虚拟机的业务性能,实现虚拟机的内存超用;另外,当宿主机上运行多个虚拟机时,由于考虑了宿主机在增加虚拟机的内存的状态下,宿主机自己的可用内存使用情况,以保证宿主机业务能够正常运行。

通过本实施例在某些场景下,虚拟机可以使用的内存超过配置虚拟机时设定的内存最大值,当虚拟机承载对外业务的服务时,可以应对业务量增大的带来的内存大量开销,保证虚拟机的性能不会因为业务的量的增大而急剧下降;另外,虚拟机的内存使用高峰时,给虚拟机增加内存,虚拟机的内存处于使用低谷时,给虚拟机降低内存;满足所有虚拟机在当前业务的内存最优配置,充分利用虚拟化平台的总内存。

实施例二

请参阅附图3,图3为本发明实施例二提供的一种动态分配内存的方法流程示意图。如图3所示,本发明实施例提供了一种动态分配内存的方法,应用于宿主机,包括:所述宿主机中运行有多个虚拟机,所述方法具体步骤包括如下:

s301、创建虚拟机的全局列表,并记录每个虚拟机的初始信息。

本实施例中,需要调用libvirt的api,查询到在宿主机上运行的所有运行状态为running的虚拟机,并且记录虚拟机的名称、id地址、配置时设置的最大内存值到虚拟机的全局列表中。

s302、查询全局列表中的当前虚拟机。

需要说明的是,程序首次运行时为第一个虚拟机,而在不掉电的情况下,程序运行时不一定是第一个虚拟机。

s303、判断虚拟机是否为全局列表中的最后一个虚拟机,若是,则执行步骤s304,若否,则执行步骤s305。

s304、程序休眠1分钟后继续执行,获取虚拟机全局列表中的第一个虚拟机。

s305、通过封装libvirt的api命令查询虚拟机当前内存大小,并记录为当前内存值。

s306、打开当前虚拟机域配置文件,获取配置的虚拟机的最大内存大小,记录为虚拟机的配置最大内存值。

s307、根据当前内存值和虚拟机的配置最大内存值,计算虚拟机内存使用率。

s308、判断虚拟机的内存使用率是否超过80%,若是,则执行步骤s309,若否,则执行步骤314。

s309、计算需要给虚拟机增加的内存量madd,首先通过域配置文件读取虚拟机设置的最大内存容量max,然后增加的容量为配置最大内存容量的1/2。

s310、计算宿主机在给虚拟机增加了内存之后,剩下的内存使用率。

计算方式为:(当前宿主机使用的内存量+madd)/宿主机上可用内存总量。

s311、判断宿主机剩下的内存使用率是否超过了80%,若是,则通过虚拟机的全局列表获取到下一个虚拟机,然后跳至返回步骤s305;若否,则跳至步骤8继续下一步操作;

s312、获取最大内存容量max,确定程序需要设置的最大内存容量参数为1.5*max。

s313、调用在线扩容模块,设置虚拟机的最大内容量为1.5*max,然后将调整的内存容量更新到虚拟机的全局列表中,然后执行步骤s316,跳至步骤303继续执行。

314、判断虚拟机的内存使用率是否低于20%,若是,则跳至步骤s315继续执行。

s315、计算需要给虚拟机减少的内存量。该内存量通过读取虚拟机的域配置文件来获取虚拟机配置的最大内存量max,减少的内存量为max值得1/2,调用在线缩容模块,设置虚拟机的最大内存为0.5max,将调整的内存容量更新到虚拟机的全局列表中,执行成功之后,然后执行步骤s316,跳至步骤303继续执行。

s316、将虚拟机全局列表同步到虚拟机的域配置文件,通过虚拟机全局列表获取下一个虚拟机。

具体的,虚拟机的内存需求超过配置虚拟机时设置的最大内存值时,自动增加最大内存值,使虚拟机获取更大的内存来提高虚拟机的业务性能。

建立全部虚拟机的内存使用监控表,对于内存使用较小的虚拟机,及时释放内存,同时自动调小最大内存值,保证宿主机的可用总内存在一个相对最大的状态。实时方式修改虚拟机配置的最大内存,可以使虚拟机的内存超过配置的最大内存,实现虚拟机的内存超用。

遍历所有虚拟机的内存使用率,当虚拟机的内存使用低于20%时,在线降低该虚拟机分配的最大内存,当虚拟机的内存使用率超过80%时,判断宿主机的内存剩余容量,计算增加分配给该虚拟机的最大内存需要增加的内存量,根据需要增加的内存量,判断增加之后,宿主机的内存占用率,如果宿主机的内存使用率超过了80%,拒绝此次操作,以保证宿主机业务能够正常运行。

本实施例提供了一种动态分配内存的方法,该方法通过在宿主机上运行实时监控程序,实时对宿主机的可用内存和所有虚拟机的内存使用率进行监控,根据监控来对虚拟机的内存大小进行调整,在虚拟机的内存需求超过配置的最大内存时,宿主机根据自身的性能对虚拟机进行内存的扩容,使虚拟机获取更大的内存来提高虚拟机的业务性能,实现虚拟机的内存超用;另外,当宿主机上运行多个虚拟机时,由于考虑了宿主机在增加虚拟机的内存的状态下,宿主机自己的可用内存使用情况,以保证宿主机业务能够正常运行。

本发明在上述公开的方法的基础上,还公开了对应的系统。

下面对本发明实施例提供的一种动态分配内存的系统进行介绍,需要说明的是,有关该系统的说明可参照上文提供的动态分配内存的方法,以下并不做赘述。

实施例三

请参阅附图4,图4为本发明实施例三提供的一种动态分配内存的系统结构示意图。如图4所示,本发明实施例提供了一种动态分配内存的系统,应用于宿主机,包括:所述宿主机中运行有多个虚拟机,所述系统具体结构包括如下:

构建单元401,用于构建多个所述虚拟机的内存使用监控表,并同步到所述虚拟机的域配置文件;

监控单元402,用于实时监控所述宿主机和多个所述虚拟机的内存使用率;

分配单元403,根据所述宿主机和多个所述虚拟机的所述内存使用率动态分配所述虚拟机的最大内存容量;

扩容单元404,用于当所述虚拟机的内存使用率高于第一预设值时,判断所述宿主机的内存使用率,若所述宿主机的内存使用率低于第二预设值时,增加分配给所述虚拟机的最大内存容量,并记录到所述虚拟机的内存使用监控表,且同步至所述域配置文件;

缩容单元405,用于当所述虚拟机的内存使用率低于第三预设值时,降低分配给所述虚拟机的最大内存容量,并记录到所述虚拟机的内存使用监控表,且同步至所述域配置文件。

具体的,所述构建单元401可以包括:

查询单元,用于查询在所述宿主机上所有运行状态为运行的虚拟机;

记录单元,用于记录所述虚拟机的初始信息到所述内存使用监控表,所述初始信息包括:所述虚拟机的名称、id地址、配置时设置的最大内存值;

同步单元,用于将所述内存使用监控表同步至所述虚拟机的域配置文件。

具体的,所述扩容单元404可以包括:

增容计算单元,用于当所述虚拟机的内存使用率高于所述第一预设值时,获取所述虚拟机的域配置文件中存储的最大内存量max,得到需要给所述虚拟机增加的内存容量为所述最大内存量max的1/2;

计算单元,用于计算所述宿主机给所述虚拟机增加了内存后,判断所述宿主机剩余的内存使用率,若所述宿主机剩余的内存使用率低于所述第二预设值,调用扩容函数调整所述虚拟机的最大内存值为1.5max;

第一调整单元,用于将调整后的内存容量更新至所述虚拟机的内存使用监控表,并同步至所述虚拟机的域配置文件。

具体的,所述缩容单元405可以包括:

缩容计算单元,用于当所述虚拟机的内存使用率低于所述第三预设值时,获取所述虚拟机的域配置文件中存储的最大内存量max,则减少的内存容量为所述最大内存量max的1/2;

调用单元,用于调用缩容函数调整所述虚拟机的最大内存值为0.5max;

第二调整单元,用于将调整后的内存容量更新至所述虚拟机的内存使用监控表,并同步至所述虚拟机的域配置文件。

本实施例提供了一种动态分配内存的系统,该系统通过在宿主机上运行实时监控程序,实时对宿主机的可用内存和所有虚拟机的内存使用率进行监控,根据监控来对虚拟机的内存大小进行调整,在虚拟机的内存需求超过配置的最大内存时,宿主机根据自身的性能对虚拟机进行内存的扩容,使虚拟机获取更大的内存来提高虚拟机的业务性能,实现虚拟机的内存超用;另外,当宿主机上运行多个虚拟机时,由于考虑了宿主机在增加虚拟机的内存的状态下,宿主机自己的可用内存使用情况,以保证宿主机业务能够正常运行。

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括上述要素的物品或者设备中还存在另外的相同要素。

需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1