一种虚拟机资源动态扩充方法及系统与流程

文档序号:11774180阅读:523来源:国知局
一种虚拟机资源动态扩充方法及系统与流程

本发明属于云计算领域,具体涉及一种虚拟机资源动态扩充方法及系统。



背景技术:

随着云计算的引入和发展,越来越多的人开始接触到“云”,并感受到云计算的诸多优势——高可靠性、高可扩展性、按需弹性伸缩、管理使用方便快捷、成本低等。同时也有越来越多的中小型企业开始搭建自己的私有云,云计算的发展已经成了大势所趋。

由于云计算是多种技术的综合,有许多服务可以优化和扩充,针对不同的环境和需求,所要求的服务也会不同。对于大多数个人用户来说,常常面临这样一个问题:由于创建给自己使用的虚拟机的计算资源是事先分配好的,当自己需要短时间进行一项计算资源消耗大的作业时,必须重新分配相应资源的虚拟机,这样不但会增加管理员的工作量,而且由于这样消耗资源大的作业并非时刻进行,如果分配给用户虚拟机的计算资源按此标准,当用户不在进行此项作业时,会造成大量计算机资源被分配但并没被充分利用的情况,造成了物理资源的闲置和浪费。

如果能设计一个方案解决这个问题,让虚拟机能根据当前应用环境自动扩充资源,并在高消耗进程结束后能智能地恢复虚拟机资源分配的初始状态。这样就能更好地满足应用的适时需求,减少管理员的大量人为工作,并能极大地提高物理机资源的利用效能,也更符合“云计算”的定义。



技术实现要素:

要解决的技术问题是提供一种虚拟机资源动态扩充方法及系统。

解决上述技术问题的技术方案如下:

一种虚拟机资源动态扩充方法,包括以下步骤:

步骤s1、检测系统资源利用率,判断系统状态,若判断处于正常状态进入步骤s2,若判断处于高负荷状态则进入步骤s3;

步骤s2、判断虚拟机当前是否处于扩充状态,若是则进入步骤s2.0,若否则保持现状;

步骤s2.0、判断系统是否处于低负荷状态,若是则进入步骤s4,若否则保持现状;

步骤s3、进入扩充方案,计算得到扩充目标资源,对系统资源进行变更;

步骤s4、进入还原方案,计算得到还原目标资源,对系统资源进行变更。

本发明的有益效果为:当单台虚拟机用户要进行一项资源消耗大的作业时,本发明的虚拟机资源动态扩充方法能自动根据作业情况扩充虚拟机的计算资源,使其满足该作业的需求,并在作业完成后,自动释放出扩充资源,让其回到资源池中,虚拟机分配的资源恢复到最初的状态。用户在使用过程中完全感受不到计算资源的受限,就好比一直拥有一台高性能计算机,可以充分展现了虚拟化的特点和优势,充分地利用了“云”中的空闲资源。

进一步的,步骤s1中,检测系统资源利用率,判断系统状态的具体方法包括以下步骤:

步骤s1.1、检测系统资源实时利用率,计算cpu当前利用率平均值c_uti(p)和内存当前利用率平均值m_uti(p);

步骤s1.2、每隔t1时间段提取一次c_uti(p)的值,判断连续n次提取的c_uti(p)是否均大于c_lim,若是则判断cpu资源为高负荷状态,每隔t1时间段提取一次m_uti(p)的值,判断连续n次提取的m_uti(p)是否均大于m_lim,若是则判断内存资源为高负荷状态,cpu资源和内存资源中任意一项处于高负荷状态,则判断系统处于高负荷状态,否则判断系统处于正常状态,其中,c_lim为预设cpu阈值,m_lim为预设内存阈值,所述t1为预设第一采样间隔时间,n为预设第一采样次数。

采用上述进一步方案的有益效果为:由于计算资源利用率并非一个平稳变化的过程,尤其对于cpu来说,当某一应用程序刚启动时,可能会极大地消耗cpu资源,但当其运行稳定后,则消耗的资源要大大降低,故不能仅凭某一时刻的资源利用率来断定虚拟机是否需要扩充资源,通过计算平均值可以确定计算资源确实因利用率过大需要扩充资源,排除一时虚高造成的误判,同时通过多次连续超过阈值才判断为资源利用率过高可以进一步排除了某时刻资源利用率数据过高的影响。

进一步的,所述步骤s1.1中计算cpu当前利用率平均值c_uti(p)的具体步骤为:

每隔t2时间段检测cpu资源的实时利用率,第t次的检测结果为at,计算a1-at之间的t个检测值之间的平均值,为c_uti(1),计算a2-at+1之间的t个检测值之间的平均值,为c_uti(2),以此类推,计算ap-at+p之间的t个检测值之间的平均值,为c_uti(p),所述c_uti(p)为t2×p时间对应的资源当前利用率平均值,p为自然数,所述t2为预设第二采样间隔时间,t为预设第二采样次数;

所述步骤s1.1中计算内存当前利用率平均值m_uti(p)的方法与计算c_uti(p)的方法相同。

采用上述进一步方案的有益效果为:通过计算平均值可以确定计算资源确实因利用率过大需要扩充资源,排除一时虚高造成的误判,采用上述进一步方案的有益效果为:通过多次连续超过阈值才判断为资源利用率过高可以进一步排除了某时刻资源利用率数据过高的影响。

进一步的,所述步骤s3的计算扩充目标资源的具体方法为:

步骤s3.1、计算扩充目标cpu资源c_new和扩充目标内存资源m_new,则c_new和m_new的计算公式分别为:c_new=c_now*c_uti(p)/c_cuti,m_new=m_now*m_uti(p)/m_cuti,其中,c_now为当前已分配的cpu资源大小,c_uti(p)为cpu当前利用率平均值,c_cuti为扩充后的cpu预设利用率;m_now为当前已分配的内存资源大小,m_uti(p)为内存当前利用率平均值,m_cuti为扩充后的内存预设利用率;

步骤s3.2、判断是否c_new小于当前可分配cpu最大资源c_max且m_new小于当前可分配内存最大资源m_max,若否,则转入步骤s3.3,若是,则将系统cpu资源扩充为c_new,将系统内存资源扩充为m_new;所述当前可分配cpu最大资源c_max为利用云资源池的cpu资源总量减去当前已占用的cpu资源总量得到,所述当前可分配内存最大资源m_max为利用云资源池的内存资源总量减去当前已占用的内存资源总量得到;

步骤s3.3、向系统控制器发送报警提示信息。

采用上述进一步方案的有益效果为:由于现在的虚拟化技术,对虚拟机计算资源的变更必须先使虚拟机进行停机,才能对其进行计算资源变更的操作,因此每次扩充都以固定的数值扩充后再进行试探会影响使用效率,本发明根据此时虚拟机的计算资源及计算资源的利用率来决定扩充的量,可以减少对计算资源的变更次数,更合理地对计算资源进行扩充。

进一步的,所述步骤s2的判断系统是否处于低负荷状态的方法为,若则判定系统处于低负荷状态,其中c_now为当前已分配的cpu资源大小,c_uti(p)为cpu当前利用率平均值,c_ori为虚拟机未扩充时的初始状态分配的cpu资源大小,c_lim为预设cpu阈值,m_now为当前已分配的内存资源大小,m_uti(p)为内存当前利用率平均值,m_ori为虚拟机未扩充时的初始状态分配的内存资源大小,m_lim为预设内存阈值,所述步骤s4的还原目标资源为c_ori和m_ori。

采用上述进一步方案的有益效果为:在低负荷状态启用还原方案可以有效提高资源利用效率,防止资源的空置和浪费情况。

一种虚拟机资源动态扩充系统,包括以下模块:

检测模块,用于检测系统资源利用率,判断系统状态,若判断处于正常状态启动扩充状态判断模块,若判断处于高负荷状态则启动扩充处理模块;

扩充状态判断模块,用于判断虚拟机当前是否处于扩充状态,若是则启动低负荷判断模块,若否则保持现状;

低负荷判断模块,用于判断系统是否处于低负荷状态,若是则启动还原处理模块,若否则保持现状;

扩充处理模块,用于计算得到扩充目标资源,对系统资源进行变更;

还原处理模块,用于按照还原目标资源,对系统资源进行变更。

一种终端设备,至少包括一个处理器和一个存储器,

所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行如下方法:

步骤s1、检测系统资源利用率,判断系统状态,若判断处于正常状态进入步骤s2,若判断处于高负荷状态则进入步骤s3;

步骤s2、判断虚拟机当前是否处于扩充状态,若是则进入步骤s2.0,若否则保持现状;

步骤s2.0、判断系统是否处于低负荷状态,若是则进入步骤s4,若否则保持现状;

步骤s3、进入扩充方案,计算得到扩充目标资源,对系统资源进行变更;

步骤s4、进入还原方案,按照还原目标资源,对系统资源进行变更。

一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,使所述计算机能够执行如下方法:

步骤s1、检测系统资源利用率,判断系统状态,若判断处于正常状态进入步骤s2,若判断处于高负荷状态则进入步骤s3;

步骤s2、判断虚拟机当前是否处于扩充状态,若是则进入步骤s2.0,若否则保持现状;

步骤s2.0、判断系统是否处于低负荷状态,若是则进入步骤s4,若否则保持现状;

步骤s3、进入扩充方案,计算得到扩充目标资源,对系统资源进行变更;

步骤s4、进入还原方案,按照还原目标资源,对系统资源进行变更。

一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机能够执行如下方法:

步骤s1、检测系统资源利用率,判断系统状态,若判断处于正常状态进入步骤s2,若判断处于高负荷状态则进入步骤s3;

步骤s2、判断虚拟机当前是否处于扩充状态,若是则进入步骤s2.0,若否则保持现状;

步骤s2.0、判断系统是否处于低负荷状态,若是则进入步骤s4,若否则保持现状;

步骤s3、进入扩充方案,计算得到扩充目标资源,对系统资源进行变更;

步骤s4、进入还原方案,按照还原目标资源,对系统资源进行变更。

附图说明

图1为本发明的方法总体流程图;

图2为系统状态判断方法流程图;

图3为本发明的系统模块连接示意图。

具体实施方式

以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。

如图1所示,一种虚拟机资源动态扩充方法,包括以下步骤:

步骤s1、检测系统资源利用率,判断系统状态,若判断处于正常状态进入步骤s2,若判断处于高负荷状态则进入步骤s3;

步骤s2、判断虚拟机当前是否处于扩充状态,若是则进入步骤s2.0,若否则保持现状;

步骤s2.0、判断系统是否处于低负荷状态,若是则进入步骤s4,若否则保持现状;

步骤s3、进入扩充方案,计算得到扩充目标资源,对系统资源进行变更;

步骤s4、进入还原方案,按照还原目标资源,对系统资源进行变更。

在本发明的一个实施例中,如图2所示,步骤s1中,检测系统资源利用率,判断系统状态的具体方法包括以下步骤:

步骤s1.1、检测系统资源实时利用率,计算cpu当前利用率平均值c_uti(p)和内存当前利用率平均值m_uti(p);

步骤s1.2、每隔t1时间段提取一次c_uti(p)的值,判断连续n次提取的c_uti(p)是否均大于c_lim,若是则判断cpu资源为高负荷状态,每隔t1时间段提取一次m_uti(p)的值,判断连续n次提取的m_uti(p)是否均大于m_lim,若是则判断内存资源为高负荷状态,cpu资源和内存资源中任意一项处于高负荷状态,则判断系统处于高负荷状态,否则判断系统处于正常状态,其中,c_lim为预设cpu阈值,m_lim为预设内存阈值,所述t1为预设第一采样间隔时间,n为预设第一采样次数。

所述步骤s1.1中计算cpu当前利用率平均值c_uti(p)的具体步骤为:

每隔t2时间段检测cpu资源的实时利用率,第t次的检测结果为at,计算a1-at之间的t个检测值之间的平均值,为c_uti(1),计算a2-at+1之间的t个检测值之间的平均值,为c_uti(2),以此类推,计算ap-at+p之间的t个检测值之间的平均值,为c_uti(p),所述c_uti(p)为t2×p时间对应的资源当前利用率平均值,p为自然数,所述t2为预设第二采样间隔时间,t为预设第二采样次数;

所述步骤s1.1中计算内存当前利用率平均值m_uti(p)的方法与计算c_uti(p)的方法相同。

实际使用中,t2和t可根据用户需要设定,本实施例中,t2为1秒,t取60,则第1秒,得到c_uti(1),c_uti(1)为a1-a60之间的60个检测值之间的平均值,第2秒,得到c_uti(2),c_uti(2)为a2-a61之间的60个检测值之间的平均值,第p秒,得到c_uti(p),c_uti(p)为ap-a59+p之间的60个检测值之间的平均值。

t1和n也可根据用户需要设定,本实施例中,t1为6秒,n取10,则步骤s1.2中的每隔t1时间段提取一次c_uti(p)的值,即为分别对第1秒、第7秒、第13秒……第c秒的c_uti(c)值进行判断,其中c=1+6n,n为自然数,第1秒的c_uti即为c_uti(1),第7秒的c_uti即为c_uti(7),第c秒的c_uti即为c_uti(c),则依次对c_uti(1)、c_uti(7)……c_uti(c)进行判断,若c_uti(c)连续10次大于c_lim,则判断cpu资源处于高负荷状态;

按照同样方法判定内存资源是否处于为高负荷状态。

当经过了n次即10次提取之后,即经过了6×10=60s(1min),与步骤s1中的t相同,即资源利用率检测系统中使用的数据正好都更新了一次,即一个循环后还是连续过高,最大限度地排除了某时刻资源利用率数据过高的影响,这时基本可以断定此时虚拟机计算资源利用率确实过高。

通过使用经验得知当cpu和内存利用率分别超过85%和90%时会造成使用性能的下降。故一般将它们分别作为c_lim和m_lim。即将c_lim和m_lim的初始缺省值分别设为85%和90%。

由于现在的虚拟化技术,对虚拟机计算资源的变更必须先使虚拟机进行停机,才能对其进行计算资源变更的操作。故我们应尽量避免频繁对其计算资源进行更改,这也是前面为什么要对资源利用率进行二次判断的原因。为了减少对计算资源的变更次数,更合理地对计算资源进行扩充,我们不应每次扩充都以固定的数值扩充后再进行试探,而应根据此时虚拟机的计算资源及计算资源的利用率来决定扩充的量。

因此,所述步骤s3的计算扩充目标资源的方法具体采取以下步骤:

步骤s3.1、计算扩充目标cpu资源c_new和扩充目标内存资源m_new,则c_new和m_new的计算公式分别为:c_new=c_now*c_uti(p)/c_cuti,m_new=m_now*m_uti(p)/m_cuti,其中,c_now为当前已分配的cpu资源大小,c_uti(p)为cpu当前利用率平均值,c_cuti为扩充后的cpu预设利用率;m_now为当前已分配的内存资源大小,m_uti(p)为内存当前利用率平均值,m_cuti为扩充后的内存预设利用率;

步骤s3.2、判断是否c_new小于当前可分配cpu最大资源c_max且m_new小于当前可分配内存最大资源m_max,若否,则转入步骤s3.3,若是,则将系统cpu资源扩充为c_new,将系统内存资源扩充为m_new;所述当前可分配cpu最大资源c_max为利用云资源池的cpu资源总量减去当前已占用的cpu资源总量得到,所述当前可分配内存最大资源m_max为利用云资源池的内存资源总量减去当前已占用的内存资源总量得到;

步骤s3.3、向系统控制器发送报警提示信息。

当判断cpu利用率或内存利用率处于高负荷状态时,采用上述方案计算出cpu和内存扩充后分配的数值(c_new、m_new),以此作为扩充后的目标资源。

c_cuti和m_cuti可根据用户需要设定,为了保证虚拟机计算资源利用率充足的上升空间(不会出现短时间内连续扩充的情况),也不至于一次扩充资源过多而造成资源的浪费,c_cuti和m_cuti不应过大,也不应过小。由于大多数应用更多的是消耗cpu的计算性能,而对于内存存储的性能要求稍低,故本实施例中将c_cuti和m_cuti的初始缺省值设为40%和60%。

通常一个云平台的资源池可以被一个以上的虚拟机系统共同使用,当任意一个虚拟机系统需要进入扩充状态时,系统需要根据云资源池的总量减去已经分配给所有虚拟机系统的资源总量,得到当前可分配最大资源量c_max和m_max,若此时c_new>c_max或者m_new>m_max,说明cpu或内存资源分配将超过临界值,云平台的资源池中资源不足,则返回报警提示信息,接收到报警提示信息后,可以对管理员提示扩充计算节点,增大云平台的资源池资源;

若此时c_new<c_max并且m_new<m_max,则按照扩充目标cpu资源c_new和扩充目标内存资源m_new进行资源变更。

所述步骤s2的判断系统是否处于低负荷状态的方法为,若则判定系统处于低负荷状态,其中c_now为当前已分配的cpu资源大小,c_uti(p)为cpu当前利用率平均值,c_ori为虚拟机未扩充时的初始状态分配的cpu资源大小,c_lim为预设cpu阈值,m_now为当前已分配的内存资源大小,m_uti(p)为内存当前利用率平均值,m_ori为虚拟机未扩充时的初始状态分配的内存资源大小,m_lim为预设内存阈值,所述步骤s4的还原目标资源为c_ori和m_ori,然后按照还原目标资源c_ori和m_ori,分别对cpu资源和内存资源进行变更。

这里引入一变量flag用于表示虚拟机的状态,flag初始值为0,表示未扩充状态,当由于资源利用率过高采用扩充方案更改虚拟机计算资源时,将flag改为1,表示此时虚拟机处于扩充状态。当判定扩充状态下的虚拟机计算资源利用率过低而修改虚拟机的计算资源为初始值时,将flag再改回0。

本发明的方法持续进行,按照上述的过程进行循环判断,可以对系统进行多次的扩充或还原,系统资源处于动态变化状态,可以根据使用情况动态调整分配情况,合理利用资源。

如图3所示,一种虚拟机资源动态扩充系统,包括以下模块:

检测模块,用于检测系统资源利用率,判断系统状态,若判断处于正常状态启动扩充状态判断模块,若判断处于高负荷状态则启动扩充处理模块;

扩充状态判断模块,用于判断虚拟机当前是否处于扩充状态,若是则启动低负荷判断模块,若否则保持现状;

低负荷判断模块,用于判断系统是否处于低负荷状态,若是则启动还原处理模块,若否则保持现状;

扩充处理模块,用于计算得到扩充目标资源,对系统资源进行变更;

还原处理模块,用于按照还原目标资源,对系统资源进行变更。

基于上述实施例所提供的虚拟机资源动态扩充系统,本发明还提供了一种终端设备,所述终端设备至少包括一个处理器和一个存储器,

处理器用于调用存储器中的程序指令,以执行图1对应实施例所提供的虚拟机资源动态扩充方法,例如包括:步骤s1、检测系统资源利用率,判断系统状态,若判断处于正常状态进入步骤s2,若判断处于高负荷状态则进入步骤s3;

步骤s2、判断虚拟机当前是否处于扩充状态,若是则进入步骤s2.0,若否则保持现状;

步骤s2.0、判断系统是否处于低负荷状态,若是则进入步骤s4,若否则保持现状;

步骤s3、进入扩充方案,计算得到扩充目标资源,对系统资源进行变更;

步骤s4、进入还原方案,按照还原目标资源,对系统资源进行变更。

本发明公开一种计算机程序产品,该计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,该计算机程序包括程序指令,当程序指令被计算机执行时,计算机能够执行上述图1对应实施例所提供的虚拟机资源动态扩充方法,例如包括:步骤s1、检测系统资源利用率,判断系统状态,若判断处于正常状态进入步骤s2,若判断处于高负荷状态则进入步骤s3;

步骤s2、判断虚拟机当前是否处于扩充状态,若是则进入步骤s2.0,若否则保持现状;

步骤s2.0、判断系统是否处于低负荷状态,若是则进入步骤s4,若否则保持现状;

步骤s3、进入扩充方案,计算得到扩充目标资源,对系统资源进行变更;

步骤s4、进入还原方案,按照还原目标资源,对系统资源进行变更。

本发明还提供一种非暂态计算机可读存储介质,该非暂态计算机可读存储介质存储计算机指令,该计算机指令使计算机执行上述图1对应实施例所提供的虚拟机资源动态扩充方法,例如包括:步骤s1、检测系统资源利用率,判断系统状态,若判断处于正常状态进入步骤s2,若判断处于高负荷状态则进入步骤s3;

步骤s2、判断虚拟机当前是否处于扩充状态,若是则进入步骤s2.0,若否则保持现状;

步骤s2.0、判断系统是否处于低负荷状态,若是则进入步骤s4,若否则保持现状;

步骤s3、进入扩充方案,计算得到扩充目标资源,对系统资源进行变更;

步骤s4、进入还原方案,按照还原目标资源,对系统资源进行变更。

本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。

以上所描述的终端设备等实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分方法。

具体的虚拟机资源变更方法,对于不同的虚拟化解决方案使用的命令可能不同,但基本方法一致。其中一种方法为,先关闭虚拟机,接着备份虚拟机文件,然后根据新的计算资源创建一个新的镜像文件,将原始镜像中的所有信息复制到新的镜像文件中,把新镜像文件名改为原虚拟机镜像名进行覆盖,启动虚拟机即可。确认一切正常后就可以将原虚拟机的备份文件进行删除。然后,修改扩充状态flag,若接收的计算资源信息来源于扩充方案,则将flag(表示虚拟机是否处于扩充状态)变为1,若接收的计算资源信息来源于还原方案,则将flag变为0。

本发明的虚拟机资源动态扩充方法能自动根据作业情况扩充虚拟机的计算资源,使其满足该作业的需求,并在作业完成后,自动释放出扩充资源,让其回到云平台的资源池中,虚拟机分配的资源恢复到最初的状态。用户在使用过程中完全感受不到计算资源的受限,就好比一直拥有一台高性能计算机,可以充分展现了虚拟化的特点和优势,充分地利用了“云”中的空闲资源。

以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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