一种OpenStack虚拟机内存热扩容方法与流程

文档序号:19827978发布日期:2020-02-04 12:05阅读:988来源:国知局
一种OpenStack虚拟机内存热扩容方法与流程

本申请涉及计算机技术领域,特别涉及一种openstack虚拟机内存热扩容方法、装置、设备及可读存储介质。



背景技术:

随着虚拟化技术应用越来越广泛,在各个领域,虚拟机也渐渐代替物理机来完成一些业务。当虚拟机上跑的业务越来越多时,就会出现虚拟机资源不够用的情况,比如虚拟机的内存、cpu、磁盘等资源不足以支撑当前的业务量。这时候,人们倾向于能够在不中断业务的情况下,实现对虚拟机进行扩容。

目前,openstack虚拟机主流的内存热扩容方案为添加model为dimm的内存设备到虚拟机,然而该方案在分配主机内存资源时,默认是从某一主机numa节点上来分配资源,即使在该主机numa节点的内存资源分配殆尽时,也不会去其它numa节点分配资源,这样,一方面会造成主机内存资源浪费,另一方面当该主机numa节点资源分配完时,有可能会触发过度分配内存,此时系统会杀虚拟机进程。

可见,如何提供一种openstack虚拟机内存热扩容方案,在解决虚拟机内存不足问题的同时避免对主机内存资源的浪费,是亟待本领域技术人员解决的问题。



技术实现要素:

本申请的目的是提供一种openstack虚拟机内存热扩容方法、装置、设备及可读存储介质,用以解决传统虚拟机内存热扩容方案浪费主机内存资源,甚至触发过度分配内存的问题。具体方案如下:

第一方面,本申请提供了一种openstack虚拟机内存热扩容方法,包括:

根据目标虚拟机的配置文件,确定所述目标虚拟机的numa数量;

根据所述目标虚拟机的numa数量确定dimm设备的目标数量,设置各个所述dimm设备与主机numa节点的对应关系,并根据目标扩容量确定各个所述dimm设备的内存容量;

将所述目标数量的dimm设备添加至所述目标虚拟机。

优选的,在所述根据目标虚拟机的配置文件,确定所述目标虚拟机的numa数量之前,还包括:

响应创建目标虚拟机的指令,以获取主机的numa数量;

将所述主机的numa数量与所述目标虚拟机的vcpu数量作比较,若所述主机的numa数量大于所述vcpu数量,则设置所述目标虚拟机的numa数量为所述vcpu数量,否则设置所述目标虚拟机的numa数量为所述主机的numa数量。

优选的,在所述根据目标虚拟机的配置文件,确定所述目标虚拟机的numa数量之前,还包括:

根据用户在虚拟机管理平台的操作,生成扩容指令,并将所述扩容指令发送至nova层,其中所述扩容指令包括请求内存量和虚拟机标识信息;

利用nova层根据所述扩容指令中的虚拟机标识信息确定目标虚拟机,获取所述目标虚拟机在当前时刻的实际内存量,并根据所述请求内存量和所述实际内存量确定目标扩容量。

优选的,所述获取所述目标虚拟机在当前时刻的实际内存量,并根据所述请求内存量和所述实际内存量确定目标扩容量,包括:

判断所述请求内存量是否超过所述目标虚拟机的限制内存量;

若没超过,则获取所述目标虚拟机在当前时刻的实际内存量,并根据所述请求内存量和所述实际内存量确定目标扩容量。

优选的,所述将所述目标数量的dimm设备添加至所述目标虚拟机,包括:

通过调用libvirt提供的用于为虚拟机添加设备的接口,将所述目标数量的dimm设备添加至所述目标虚拟机。

优选的,所述根据目标扩容量确定各个所述dimm设备的内存容量,包括:

将目标扩容量均分为所述目标数量的等份,将各个所述dimm设备的内存容量设置为所述等份的容量大小。

优选的,所述根据所述目标虚拟机的numa数量确定dimm设备的目标数量,包括:

设置dimm设备的目标数量等于所述目标虚拟机的numa数量。

第二方面,本申请提供了一种openstack虚拟机内存热扩容装置,包括:

配置信息读取模块:用于根据目标虚拟机的配置文件,确定所述目标虚拟机的numa数量;

内存配置模块:用于根据所述目标虚拟机的numa数量确定dimm设备的目标数量,设置各个所述dimm设备与主机numa节点的对应关系,并根据目标扩容量确定各个所述dimm设备的内存容量;

内存添加模块:用于将所述目标数量的dimm设备添加至所述目标虚拟机。

第三方面,本申请提供了一种openstack虚拟机内存热扩容设备,包括:

存储器:用于存储计算机程序;

处理器:用于执行所述计算机程序,以实现如上所述的openstack虚拟机内存热扩容方法的步骤。

第四方面,本申请提供了一种可读存储介质,所述可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时用于实现如上所述的openstack虚拟机内存热扩容方法的步骤。

本申请所提供的一种openstack虚拟机内存热扩容方法、装置、设备及可读存储介质,方案包括:根据目标虚拟机的配置文件,确定目标虚拟机的numa数量;根据目标虚拟机的numa数量确定dimm设备的目标数量,设置各个dimm设备与主机numa节点的对应关系,并根据目标扩容量确定各个dimm设备的内存容量;将目标数量的dimm设备添加至目标虚拟机。可见,该方案对传统的openstack虚拟机内存热扩容方案进行了优化,在扩容过程中,该方案考虑了虚拟机的numa数量,并设置了相应数量的dimm设备,其中各个dimm设备分别从不同的主机numa节点获取内存资源,即从多个主机numa节点为该虚拟机分配内存资源,一方面提高了主机的内存资源的利用率,另一方面能有效避免由于内存不足引发的问题。

附图说明

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

图1为本申请所提供的一种openstack虚拟机内存热扩容方法实施例一的实现流程图;

图2为本申请所提供的一种openstack虚拟机内存热扩容方法实施例二的虚拟机创建过程实现流程图;

图3为本申请所提供的一种openstack虚拟机内存热扩容方法实施例二的内存热扩容过程实现流程图;

图4为本申请所提供的一种openstack虚拟机内存热扩容装置实施例的功能框图;

图5为本申请所提供的一种openstack虚拟机内存热扩容设备实施例的结构示意图。

具体实施方式

本申请的核心是提供了一种openstack虚拟机内存热扩容方法、装置、设备及可读存储介质,提高了主机的内存资源的利用率,且有效避免由于内存不足引发的问题。

为了使本技术领域的人员更好地理解本申请方案,下面结合附图和具体实施方式对本申请作进一步的详细说明。显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

下面对本申请提供的一种openstack虚拟机内存热扩容方法实施例一进行介绍,参见图1,实施例一包括:

s101、根据目标虚拟机的配置文件,确定所述目标虚拟机的numa数量;

s102、根据所述目标虚拟机的numa数量确定dimm设备的目标数量,设置各个所述dimm设备与主机numa节点的对应关系,并根据目标扩容量确定各个所述dimm设备的内存容量;

s103、将所述目标数量的dimm设备添加至所述目标虚拟机。

numa,全称nonuniformmemoryaccess,非一致性内存访问,是一种计算机架构。一般的,具有多处理器的计算机通常为每个处理器分配各自的内存,以提高计算机的扩展能力,该类计算机称为numa架构计算机。本实施例中的主机即指基于numa架构的计算机。

基于numa架构的计算机一般包含多个处理器和多个内存,将这些处理器和内存划分为多个numa节点,每个numa节点包括处理器和若干内存,numa节点上可以运行一台或多台虚拟机。在运行多台虚拟机时,每台虚拟机都拥有自己的资源,如虚拟处理器(virtualcpu,vcpu),内存和i/o设备。numa架构的特点是:每个处理器访问自身所在的numa节点的私有内存时速度较快,而访问其他numa节点的内存时速度较慢。

本实施例中,目标虚拟机是指待进行内存扩容的虚拟机,本实施例采用热扩容的方式对目标虚拟机进行内存扩容,即在扩容过程中无需中断目标虚拟机的业务。

具体的,本实施例根据虚拟机的配置文件确定目标虚拟机的numa数量,其中虚拟机的配置文件一般以xml文件格式保存。进而根据目标虚拟机的numa数量确定dimm设备的数量,为方便描述,将其称为目标数量,具体可以设置目标数量等于目标虚拟机的numa数量。上述dimm,全称dual-inline-memory-modules,即双列直插式存储模块,是在奔腾cpu推出后出现的一种新型内存条。

在确定dimm设备的数量之后,本实施例进一步设置各个dimm设备与主机numa节点的对应关系,具体可以设置每个dimm设备对应不同的主机numa节点。并根据目标扩容量设置每个dimm设备的内存容量,其中目标扩容量是指本次扩容过程预期增加的内存容量,具体可以设置目标数量的dimm设备均分上述目标扩容量,即各个dimm设备的内存容量=目标扩容量/目标数量。

最终,在设置好dimm设备与主机numa节点的对应关系和内存容量之后,即可将目标数量的dimm设备添加至目标虚拟机,以实现内存扩容,该内存扩容过程无需中断目标虚拟机的业务流程,是一种内存热扩容方案。

本实施例所提供一种openstack虚拟机内存热扩容方法,方案包括:根据目标虚拟机的配置文件,确定目标虚拟机的numa数量;根据目标虚拟机的numa数量确定dimm设备的目标数量,设置各个dimm设备与主机numa节点的对应关系,并根据目标扩容量确定各个dimm设备的内存容量;将目标数量的dimm设备添加至目标虚拟机。可见,该方案在扩容过程中,根据虚拟机的numa数量,设置了相应数量的dimm设备,其中各个dimm设备分别从不同的主机numa节点获取内存资源,即从多个主机numa节点为该虚拟机分配内存资源,一方面提高了主机的内存资源的利用率,另一方面能有效避免由于内存不足引发的问题。

下面开始详细介绍本申请提供的一种openstack虚拟机内存热扩容方法实施例二,实施例二基于前述实施例一实现,并在实施例一的基础上进行了一定程度上的拓展。

首先,对本实施例中虚拟机的创建过程进行介绍,参见图2,该过程包括:

s201、响应创建虚拟机的指令,以获取主机的numa数量;

具体的,在创建虚拟机时通过numactl–hardware命令获取主机numa信息,根据numa信息解析出主机的numa数量。

s202、判断所述主机的numa数量是否大于所述虚拟机的vvpu数量,若大于,跳转至s203,否则跳转至s204;

s203、设置所述虚拟机的numa数量为所述vcpu数量;

s204、设置所述虚拟机的numa数量为所述主机的numa数量。

也就是说,在创建虚拟机的过程中,本实施例将所述主机的numa数量与所述虚拟机的vcpu数量作比较,若所述主机的numa数量大于所述vcpu数量,则设置所述虚拟机的numa数量为所述vcpu数量,否则设置所述虚拟机的numa数量为所述主机的numa数量。其中,虚拟机包括但不限于下文内存热扩容过程中提及的目标虚拟机。

对于openstack虚拟机来说,不会单独的扩容内存或者单独的扩容cpu,因此,本实施例在创建虚拟机的过程中设置虚拟机的numa数量,可以更好的支持cpu热扩容。

具体的,本实施例使用libvirtdriver实现上述虚拟机的创建过程,在执行下述虚拟机内存热扩容方案之前,开启主机numa节点,并确保主机上安装有numactl工具。

下面,对本实施例中针对目标虚拟机的内存热扩容过程进行介绍,如图3所示,该过程包括:

s301、根据用户在虚拟机管理平台的操作,生成扩容指令,并将所述扩容指令发送至nova层,其中所述扩容指令包括请求内存量和虚拟机标识信息;

其中,nova层是一种openstack计算模块。

s302、利用nova层根据所述扩容指令中的虚拟机标识信息确定目标虚拟机,判断所述请求内存量是否超过所述目标虚拟机的限制内存量;若没超过,则跳转至s303,否则生成错误提示;

s303、获取所述目标虚拟机在当前时刻的实际内存量,并根据所述请求内存量和所述实际内存量确定目标扩容量;

s304、利用nova层根据目标虚拟机的配置文件,确定所述目标虚拟机的numa数量;

s305、设置dimm设备的目标数量等于所述目标虚拟机的numa数量,设置各个所述dimm设备与主机numa节点的对应关系,并根据目标扩容量确定各个所述dimm设备的内存容量;

作为一种具体的实施方式,将目标扩容量均分为所述目标数量的等份,将各个所述dimm设备的内存容量设置为所述等份的容量大小。

s306、通过调用libvirt提供的用于为虚拟机添加设备的接口,将所述目标数量的dimm设备添加至所述目标虚拟机。

其中,libvirt是一种虚拟机管理工具。

可见,本实施例提供的一种openstack虚拟机内存热扩容方法,方案包括:根据目标虚拟机的配置文件,确定目标虚拟机的numa数量;设置dimm设备的目标数量等于目标虚拟机的numa数量,设置各个dimm设备与主机numa节点的对应关系,并根据目标扩容量确定各个dimm设备的内存容量;将目标数量的dimm设备添加至目标虚拟机。可见,该方案在扩容过程中,根据虚拟机的numa数量设置了相应数量的dimm设备,其中各个dimm设备分别从不同的主机numa节点获取内存资源,即从多个主机numa节点为该虚拟机分配内存资源,一方面提高了主机的内存资源的利用率,另一方面能有效避免由于内存不足引发的问题。

下面根据上述openstack虚拟机内存热扩容方法实施例,对实际应用场景中openstack虚拟机内存热扩容方案进行介绍:

该openstack虚拟机内存热扩容方案的前提条件包括:

条件1:将利用libvirtdriver创建的虚拟机作为目标虚拟机;

条件2:主机开启numa节点;

条件3:主机上安装有numactl工具。

该openstack虚拟机内存热扩容方案的具体步骤包括:

步骤1:用户设置主机numa配置,并安装numactl工具;

步骤2:用户登录虚拟机管理平台;

步骤3:用户在虚拟机管理平台操作目标虚拟机进行内存热扩容;

步骤4:虚拟机管理平台将虚拟机信息以及扩容信息下发到nova层;

步骤5:nova层解析虚拟机配置文件,获取目标虚拟机的numa数量;

步骤6:nova层根据目标虚拟机的numa数量拼接相应数量的内存dimm设备;

步骤7:通过libvirt提供的添加设备接口将内存dimm设备添加到目标虚拟机。

上述方案对当前openstack虚拟机内存热扩容方案进行了优化,通过设置虚拟机的numa数量,并将虚拟机热扩容时的内存资源均分到主机的多个numa节点上,这样不仅能充分利用主机的内存资源,而且还能有效避免由于内存不足引发的问题。

下面对本申请实施例提供的一种openstack虚拟机内存热扩容装置进行介绍,下文描述的一种openstack虚拟机内存热扩容装置与上文描述的一种openstack虚拟机内存热扩容方法可相互对应参照。

参见图4,该装置包括:

配置信息读取模块401:用于根据目标虚拟机的配置文件,确定所述目标虚拟机的numa数量;

内存配置模块402:用于根据所述目标虚拟机的numa数量确定dimm设备的目标数量,设置各个所述dimm设备与主机numa节点的对应关系,并根据目标扩容量确定各个所述dimm设备的内存容量;

内存添加模块403:用于将所述目标数量的dimm设备添加至所述目标虚拟机。

本实施例的openstack虚拟机内存热扩容装置用于实现前述的openstack虚拟机内存热扩容方法,因此该装置中的具体实施方式可见前文中的openstack虚拟机内存热扩容方法的实施例部分,例如,配置信息读取模块401、内存配置模块402、内存添加模块403,分别用于实现上述openstack虚拟机内存热扩容方法中步骤s101,s102,s103。所以,其具体实施方式可以参照相应的各个部分实施例的描述,在此不再展开介绍。

另外,由于本实施例的openstack虚拟机内存热扩容装置用于实现前述的openstack虚拟机内存热扩容方法,因此其作用与上述方法的作用相对应,这里不再赘述。

此外,本申请还提供了一种openstack虚拟机内存热扩容设备,如图5所示,包括:

存储器100:用于存储计算机程序;

处理器200:用于执行所述计算机程序,以实现如上文所述的openstack虚拟机内存热扩容方法的步骤。

最后,本申请提供了一种可读存储介质,所述可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时用于实现如上文所述的openstack虚拟机内存热扩容方法的步骤。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。

以上对本申请所提供的方案进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

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