一种为虚拟机分配内存的方法和虚拟机与流程

文档序号:20874728发布日期:2020-05-26 16:20阅读:295来源:国知局
一种为虚拟机分配内存的方法和虚拟机与流程

本发明涉及计算机领域,尤其涉及一种为虚拟机分配内存的方法和虚拟机。



背景技术:

虚拟化技术作为云计算解决方案的基础,正随着云计算产品的不断扩张而得到更多的应用场景。虚拟机运行在宿主机上,虚拟机的随机存取存储器(randomaccessmemory,ram)由宿主机的操作系统(operatingsystem,os)和宿主机的虚拟机管理器(virtualmachinemanager,vmm)分配,也是宿主机的ram的一部分。

非一致性内存访问(non-uniformmemoryaccess,numa)技术将内存资源和cpu资源分给不同的numa节点。在同一numa节点内,cpu访问本节点的内存称为访问本地内存,cpu访问其它节点的内存称为访问远端内存,且cpu访问本地内存速度快于访问远端内存的速度。

随着技术发展,虚拟机也应用numa技术,采用numa架构将宿主机分配给虚拟机的内存资源和cpu资源划分到不同的numa节点。现有的虚拟机的numa节点的内存分配方法为将内存平均分配给虚拟机的各numa节点,因虚拟机的各个numa节点的内存大小相同且固定,当进程对numa节点的内存调用时,存在以下两种问题:当某个进程调用某numa节点的内存时,若实际需调用的内存大小远小于该numa节点的内存大小,导致内存资源的浪费,若实际需要调用的内存大小大于该numa节点的内存大小时,导致进程的本次调用失败。

因此,现有技术中至少存在如下技术问题:不能灵活的为虚拟机分配内存,满足进程多样化的内存调用需求的技术问题。



技术实现要素:

本发明实施例通过提供一种为虚拟机分配内存的方法及虚拟机,用于解决现有技术中不能灵活的为虚拟机分配内存,满足进程多样化的内存调用需求的技术问题。

第一方面,本发明一实施例提供了一种为虚拟机分配内存的方法,其中,所述虚拟机包括n个非一致性内存架构numa节点,n为大于等于2的整数,具体包括以下步骤:

获取待分配给所述虚拟机的所述n个numa节点中各个numa节点的平均内存的大小a,其中,所述平均内存的大小s是待配置给所述虚拟机的总内存的大小,p是所述虚拟机的宿主机的内存页大小的整数倍,k1是可分配份数;

获取待分配给所述n个numa节点中的n1个numa节点的第一剩余内存的份数k2,其中,所述第一剩余内存的份数k2=k1%n,n1为大于等于1且小于等于k2的整数;

在第二剩余内存的大小r为0时,基于所述平均内存的大小a和所述第一剩余内存的份数k2,为所述n个nmua节点分配相应大小的内存,其中,所述第二剩余内存的大小r=s%p,所述n个numa节点中除所述n1个numa节点外的节点是n2个numa节点,n2是等于(n-n1)的整数。

可选的,所述方法还包括:

在所述第二剩余内存的大小r不为0时,基于所述平均内存的大小a、所述第一剩余内存的份数k2和所述第二剩余内存的大小r,为所述n个nmua节点分配相应大小的内存。

可选的,所述基于所述平均内存的大小a和所述第一剩余内存的份数k2,为所述n个nmua节点分配相应大小的内存,包括:

按照如下方式为所述n1个numa节点中的每个节点的分配相应大小的内存:

确定待分配给所述n1个numa节点中的第i个numa节点的内存的大小为si=k2i×p+a其中,k2i为待分配给所述第i个numa节点的第一剩余内存的份数,且k2i为大于等于1的整数;

为所述第i个numa节点分配si大小的内存;

为所述n2个numa节点中的每个numa节点分配a大小的内存。

可选的,所述基于所述平均内存的大小a、所述第一剩余内存的份数k2和所述第二剩余内存的大小r,为所述n个nmua节点分配相应大小的内存,还包括:

按照如下方式为所述n1个numa节点中的每个节点的分配相应大小的内存:

确定待分配给所述n1个numa节点中的第j个numa节点的内存的大小为sj=k2j×p+a,其中,k2j为待分配给所述第j个numa节点的第一剩余内存的份数,且k2j为大于等于1的整数;

为所述第j个numa节点分配sj大小的内存;

为所述n2个numa节点中的第n2个numa节点分配(a+r)大小的内存。

可选的,所述基于所述平均内存的大小a和所述第一剩余内存的份数k2,为所述n个nmua节点分配相应大小的内存,还包括:

为所述n2个numa节点中的除第n2个numa节点外的每个numa节点分配a大小的内存。

可选的,所述基于所述平均内存的大小a、所述第一剩余内存的份数k2和所述第二剩余内存的大小r,为所述n个nmua节点分配相应大小的内存,还包括:

按照如下方式为所述n1个numa节点中除第n1个numa节点外的每个节点的分配相应大小的内存:

确定待分配给所述n1个numa节点中除第n1个numa节点外的第j

个numa节点的内存的大小为sj=k2j×p+a,其中,k2j为待分配给所述第j

个numa节点的第一剩余内存的份数,且k2j为大于等于1的整数,

为所述第j个numa节点分配sj大小的内存;

为所述第n1个numa节点中的第n1个节点分配大小的内存是大于等于0的整数;

为所述n2个numa节点中的每个numa节点分配a大小的内存。

第二方面,本发明一实施例提供了一种虚拟机,其中,所述虚拟机包括n个非一致性内存架构numa节点,n为大于等于2的整数,包括:

第一获取单元,用于获取待分配给所述虚拟机的所述n个numa节点中各个numa节点的平均内存的大小a,其中,所述平均内存的大小s是待配置给所述虚拟机的总内存的大小,p是所述虚拟机的宿主机的内存页大小的整数倍,k1是可分配份数;

第二获取单元,用于获取待分配给所述n个numa节点中的n1个numa节点的第一剩余内存的份数k2,其中,所述第一剩余内存的份数k2=k1%n,n1为大于等于1且小于等于k2的整数;

第一分配单元,获取在第二剩余内存的大小r为0时,基于所述平均内存的大小a和所述第一剩余内存的份数k2,为所述n个nmua节点分配相应大小的内存,其中,所述第二剩余内存的大小r=s%p,所述n个numa节点中除所述n1个numa节点外的节点是n2个numa节点,n2是等于(n-n1)的整数。

可选的,所述虚拟机还包括:

第二分配单元,用于在所述第二剩余内存的大小r不为0时,基于所述平均内存的大小a、所述第一剩余内存的份数k2和所述第二剩余内存的大小r,为所述n个nmua节点分配相应大小的内存。

可选的,所述第一分配单元,包括:

第一分配子单元,用于按照如下方式为所述n1个numa节点中的每个节点的分配相应大小的内存:

确定待分配给所述n1个numa节点中的第i个numa节点的内存的大小为si=k2i×p+a,其中,k2i为待分配给所述第i个numa节点的第一剩余内存的份数,且k2i为大于等于1的整数;

为所述第i个numa节点分配si大小的内存;

第二分配子单元,用于为所述n2个numa节点中的每个numa节点分配a大小的内存。

可选的,所述第二分配单元,包括:

第三分配子单元,用于按照如下方式为所述n1个numa节点中的每个节点的分配相应大小的内存:

确定待分配给所述n1个numa节点中的第j个numa节点的内存的大小为sj=k2j×p+a,其中,k2j为待分配给所述第j个numa节点的第一剩余内存的份数,且k2j为大于等于1的整数;

为所述第j个numa节点分配sj大小的内存;

第四分配子单元,用于为所述n2个numa节点中的第n2个numa节点分配(a+r)大小的内存。

可选的,所述第二分配单元,还包括:

第五分配子单元,用于为所述n2个numa节点中的除第n2个numa节点外的每个numa节点分配a大小的内存。

可选的,所述第二分配单元,还包括:

第六分配子单元,用于按照如下方式为所述n1个numa节点中除第n1个numa节点外的每个节点的分配相应大小的内存:

确定待分配给所述n1个numa节点中除第n1个numa节点外的第j个numa节点的内存的大小为sj=k2j×p+a,其中,k2j为待分配给所述第j个numa节点的第一剩余内存的份数,且k2j为大于等于1的整数;

为所述第j个numa节点分配sj大小的内存;

为所述第n1个numa节点中的第n1个节点分配大小的内存,是大于等于0的整数;

第七分配子单元,用于为所述n2个numa节点中的每个numa节点分配a大小的内存。

第三方面,本发明一实施例提供了一种计算机装置,包括:

至少一个处理器,以及与所述至少一个处理器连接的存储器;

其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述至少一个处理器通过执行所述存储器存储的指令,执行第一方面所述的方法。

第四方面,本发明一实施例提供了一种计算机可读存储介质,包括:

所述计算机可读存储介质上存储有计算机指令,当所述计算机指令被计算机装置的至少一个处理器执行时,实现如执行第一方面所述的方法。

本发明实施例中提供的一个或多个技术方案,至少具有如下技术效果或优点:

首先,获取待分配给所述虚拟机的所述n个numa节点中各个numa节点的平均内存的大小a,其中,所述平均内存的大小s是待配置给所述虚拟机的总内存的大小,p是所述虚拟机的宿主机的内存页大小的整数倍,k1是可分配份数;然后,获取待分配给所述n个numa节点中的n1个numa节点的第一剩余内存的份数k2,其中,所述第一剩余内存的份数k2=k1%n,n1为大于等于1且小于等于k2的整数;之后,在第二剩余内存的大小r为0时,基于所述平均内存的大小a和所述第一剩余内存的份数k2,为所述n个nmua节点分配相应大小的内存,其中,所述第二剩余内存的大小r=s%p,所述n个numa节点中除所述n1个numa节点外的节点是n2个numa节点,n2是等于(n-n1)的整数;在所述第二剩余内存的大小r不为0时,基于所述平均内存的大小a、所述第一剩余内存的份数k2和所述第二剩余内存的大小r,为所述n个nmua节点分配相应大小的内存。本申请的技术方案解决了现有技术中不能灵活的为虚拟机分配内存,难以满足进程多样化的内存调用需求的技术问题,实现了灵活的为虚拟机分配内存,且将该内存灵活分配给虚拟机的numa节点,满足了进程多样化的内存调用需求的技术效果。

附图说明

图1为本发明实施例提供的一种为虚拟机分配内存的方法的流程图;

图2为本发明实施例提供的为虚拟机分配内存的方法的流程图;

图3为本发明实施例提供的另一为虚拟机分配内存的方法的流程图;

图4为本发明实施例提供的一种计算机装置的示意图。

具体实施方式

为了解决上述技术问题,本发明实施例中的技术方案的总体思路如下:

首先,获取待分配给所述虚拟机的所述n个numa节点中各个numa节点的平均内存的大小a,其中,所述平均内存的大小s是待配置给所述虚拟机的总内存的大小,p是所述虚拟机的宿主机的内存页大小的整数倍,k1是可分配份数;

然后,获取待分配给所述n个numa节点中的n1个numa节点的第一剩余内存的份数k2,其中,所述第一剩余内存的份数k2=k1%n,n1为大于等于1且小于等于k2的整数;

之后,在第二剩余内存的大小r为0时,基于所述平均内存的大小a和所述第一剩余内存的份数k2,为所述n个nmua节点分配相应大小的内存,其中,所述第二剩余内存的大小r=s%p,所述n个numa节点中除所述n1个numa节点外的节点是n2个numa节点,n2是等于(n-n1)的整数。

在该方法中,通常,对于虚拟机中的numa节点,例如由于centos系统的缺陷,对于centos6.5及6.5版本之前的部分版本,如6.4、6.2等,所有numa节点中除最后一个numa节点(也可以为numa节点中规定的一个numa节点)外,所有numa节点的内存必须为8mb的整数倍。当然,根据实际的需要,可以调整为numa节点的内存必须是2mb、16mb或64mb等值得整数倍。

为了更好的理解上述技术方案,下面将结合说明书附图以及具体的实施方式对上述技术方案进行详细的说明。

请参考图1,本发明实施例一提供了一种为虚拟机分配内存的方法,其中,所述虚拟机包括n个非一致性内存架构numa节点,n为大于等于2的整数,具体包括以下步骤:

s101:获取待分配给所述虚拟机的所述n个numa节点中各个numa节点的平均内存的大小a,其中,所述平均内存的大小s是待配置给所述虚拟机的总内存的大小,p是所述虚拟机的宿主机的内存页大小的整数倍,k1是可分配份数;

s102:获取待分配给所述n个numa节点中的n1个numa节点的第一剩余内存的份数k2,其中,所述第一剩余内存的份数k2=k1%n,n1为大于等于1且小于等于k2的整数;

s103:在第二剩余内存的大小r为0时,基于所述平均内存的大小a和所述第一剩余内存的份数k2,为所述n个nmua节点分配相应大小的内存,其中,所述第二剩余内存的大小r=s%p,所述n个numa节点中除所述n1个numa节点外的节点是n2个numa节点,n2是等于(n-n1)的整数。

本实施例一所述的方法,首先执行步骤s101,获取待分配给所述虚拟机的所述n个numa节点中各个numa节点的平均内存的大小a,其中,所述平均内存的大小s是待配置给所述虚拟机的总内存的大小,p是所述虚拟机的宿主机的内存页大小的整数倍,k1是可分配份数。

在具体实施例中,首先,对待分配给虚拟机的总内存大小除以宿主机的内存分页大小的整数倍的商向下取整,获得k1,其中,为可分配份数且然后,对可分配份数k1除以numa节点的个数n的商向下取整后乘以内存分页大小p,即可获得每个numa节点的平均内存的大小a,,即

在执行步骤s101之后,继续执行步骤s102,步骤s102具体为获取待分配给所述n个numa节点中的n1个numa节点的第一剩余内存的份数k2,其中,所述第一剩余内存的份数k2=k1%n,n1为大于等于1且小于等于k2的整数。

其中,根据第一剩余内存的份数,虚拟机可以预先设定在n个numa节点中如何选择n1个numa节点。该预选设定的规则可以是包括在n个numa节点中随机选取n1个numa节点,也可以从某个numa节点开始(例如可以从第1个numa节点开始,或者从第2个numa节点开始等),顺序选择该节点之后或之前(n1-1)个numa节点等的方法。此处的举例是说明性的,任何根据第一剩余内存的份数在n个numa节点中选取n1个numa节点的方法均可。

例如,虚拟机numa节点个数n为10个,可分配份数k1有22份,由公式k2=k1%n,则第一剩余内存的份数应为2份,在10个numa节点中最多可以选择2个numa节点作为预选的可以获得第一剩余内存的numa节点。

在上述步骤s101和步骤s102中,具体地,

可分配份数k1:其中,s为对待分配给虚拟机的总内存大小,p宿主机的内存分页大小的整数倍,为向下取整符号,“/”为除以号。

待分配给各个numa节点的平均内存大小a:其中,n为虚拟机的numa节点的个数。

第一剩余内存的份数k2:k2=k1%n,“%”表示取余。

对于上述步骤s101和步骤s102,宿主机的内存页大小可以为64kb、2mb、8mb、64mb、512mb、1gb或4gb等,在此不做具体限定。

例如,宿主机的内存页分页大小为1gb,则p为内存页分页大小的整数倍,例如p可以是1gb的1倍,或者p可以是1gb的2倍,或者p可以是1gb的3倍。

假设p可以是1gb的1倍,则p=1gb,同时假设待配置给所述虚拟机的总内存的大小为10gb,虚拟机的numa节点个数为8,则:

可分配份数k1:

待分配给各个numa节点的平均内存大小a:

第一剩余内存的份数k2:k2=10%8=2。

假设p可以为1gb的2倍,则p=2gb,同时假设待配置给所述虚拟机的总内存的大小为20gb,虚拟机的numa节点个数为8,则:

可分配份数k1:

待分配给各个numa节点的平均内存大小a:

第一剩余内存的份数k2:k2=10%8=2。

在执行步骤s102之后,有两种分配内存的方式,具体如下:

方式1,在执行步骤s102之后,继续执行步骤s103,步骤s103具体如下:在第二剩余内存的大小r为0时,基于所述平均内存的大小a和所述第一剩余内存的份数k2,为所述n个nmua节点分配相应大小的内存,其中,所述第二剩余内存的大小r=s%p,所述n个numa节点中除所述n1个numa节点外的节点是n2个numa节点,n2是等于(n-n1)的整数。

其中,步骤s103具体如下:

按照如下方式为所述n1个numa节点中的每个节点的分配相应大小的内存:

确定待分配给所述n1个numa节点中的第i个numa节点的内存的大小为si=k2i×p+a,其中,k2i为待分配给所述第i个numa节点的第一剩余内存的份数,且k2i为大于等于1的整数;

为所述第i个numa节点分配si大小的内存;

为所述n2个numa节点中的每个numa节点分配a大小的内存。

图2示出了按照方式1为n个nmua节点分配相应大小的内存的方法。设n个numa节点为numa-1、numa-2、……、numa-n;

步骤s201:确定可分配份数k1:

步骤s202:确定第一剩余内存的份数k2:k2=k1%n;

步骤s203:确定待分配给各个numa节点的平均内存大小a:

步骤s204:确定待分配给n个numa节点中的n1个numa节点中的第i个numa节点的剩余份数为k2i。具体地,例如以轮询的方式确定从numa-1确定待分配给每个轮询到的numa节点的剩余份数,直至将第一剩余内存的份数k2分完为止;或者也可以随机确定待分配给n个numa节点中的n1个numa节点中的第i个numa节点的剩余份数为k2i,直至将第一剩余内存的份数k2分完为止。

步骤s205:确定待分配所述n1个numa节点中的第i个numa节点的内存的大小为si:si=k2i×p+a。

步骤s206,确定待分配给n个numa节点中其余的n2个numa节点的内存的大小为a。

具体地,以宿主机内存分页的大小的整数倍p为1gb,宿主机待分配给虚拟机的总内存大小s为19gb,虚拟机有4个numa节点为例,4个numa节点分别记为numa-1、numa-2、numa-3、numa-3为例。此时,虚拟机的numa节点的内存分配流程如下:

确定可分配份数k1:k2=k1%n=19;

确定第一剩余内存的份数k2:k2=k1%n=3;

确定待分配给各个numa节点的平均内存大小a:

确定待分配给n个numa节点中的n1个numa节点中的第i个numa节点的剩余份数为k2i。具体地,例如以轮询的方式确定从numa-1确定待分配给每个轮询到的numa节点的剩余份数,直至将第一剩余内存的份数k2分完为止;可以预设轮询时待分配给每个轮询到的numa节点的份数为1,则n1为3,可以为3个numa节点(numa-1、numa-2、numa-3)中的每个分配一份;或者也可以随机确定待分配给n个numa节点中的n1个numa节点中的第i个numa节点的剩余份数为k2i,直至将第一剩余内存的份数k2分完为止;例如为numa-1分配2份剩余份数,为numa-3分配1份剩余份数。

以轮询的方式为例,则确定待分配numa-1、numa-2、numa-3的内存的大小均为(4+1)gb,即5gb;确定待分配给numa-4的内存的大小为4gb。

以随机的方式为例,则确定分配给numa-1的内存的大小为(4+2)gb,即6gb;确定待分配给numa-3的内存的大小为gb(4+1)gb,即5gb;确定待分配给numa-2、numa-4的内存的大小为4gb。

最后,根据计算结果,为这4个numa节点分配相应大小的内存。

方式2,在执行步骤s102之后,继续执行步骤s104,步骤s104具体如下:在所述第二剩余内存的大小r不为0时,基于所述平均内存的大小a、所述第一剩余内存的份数k2和所述第二剩余内存的大小r,为所述n个nmua节点分配相应大小的内存。其中,该虚拟机中包括至少一个能够被分配不是内存页整数倍的内存的numa节点。

对于该步骤s104,具体可以包括如下分配方式(以下为举例,并非穷举):

方式2a,按照如下方式为所述n1个numa节点中的每个节点的分配相应大小的内存:

确定待分配给所述n1个numa节点中的第j个numa节点的内存的大小为sj=k2j×p+a,其中,k2j为待分配给所述第j个numa节点的第一剩余内存的份数,且k2j为大于等于1的整数;

为所述第j个numa节点分配sj大小的内存;

为所述n2个numa节点中的第n2个numa节点分配(a+r)大小的内存。

对于方式2a中为所述n2个numa节点中的第n2个numa节点分配(a+r)大小的内存,在n2为1时,为该1个numa节点个分配(a+r)大小的内存;或者,

在n2不为1时,为所述n2个numa节点中的除第n2个numa节点外的每个numa节点分配a大小的内存;为所述n2个numa节点中的第n2个numa节点分配(a+r)大小的内存。

图3示出了按照方式2a为n个nmua节点分配相应大小的内存的方法。设n个numa节点为numa-1、numa-2、……、numa-n;

步骤s301:确定可分配份数k1:

步骤s302:确定第一剩余内存的份数k2:k2=k1%n;

步骤s303:确定第二剩余内存的大小r:r=s%p;

步骤s304:确定待分配给各个numa节点的平均内存大小a:

步骤s305:确定待分配给n个numa节点中的n1个numa节点中的第j个numa节点剩余份数为k2j。此处的第一剩余内存分配方式和步骤s204的方式相同,故不再赘述。

步骤s306:确定待分配所述n1个numa节点中的第j个numa节点的内存的大小为sj:sj=k2j×p+a。

步骤s307:确定待分配给n个numa节点中其余的n2个numa节点的内存的大小。

其中,在n2不为1时,确定n2个numa节点中除第n2个numa节点外的每个numa节点待分配的内存大小为a,确定n2个numa节点中的第n2个numa节点待分配内存大小为(a+r);在n2为1时,确定该第n2个numa节点待分配的内存大小为(a+r)。

具体地,以宿主机内存分页的大小的整数倍p为8mb,待配置给所述虚拟机的总内存的大小待分配s为(48mb+4kb),虚拟机有4个numa节点为例,4个numa节点分别记为numa-1、numa-2、numa-3、numa-4为例,假设numa-4为能够被分配不是内存页整数倍的内存的numa节点,此时,虚拟机的numa节点的内存分配流程如下:

确定可分配份数k1:

确定第一剩余内存的份数k1:k2=k1%n=2;

确定第二剩余内存的大小r:r=s%p=4kb;

确定待分配给各个numa节点的平均内存大小a:

确定待分配给n个numa节点中的n1个numa节点中的第j个numa节点剩余份数为k2j。以轮询的方式确定从numa-1确定待分配给每个轮询到的numa节点的剩余份数,且预设轮询时待分配给每个轮询到的numa节点的份数为2,则n1为1,待分配给numa-1的剩余份数为2份。或者也可以采用随机分配剩余份数的方法,如待分配numa-3、numa-4的剩余份数均为1份。以轮询的方式为例,确定待分配给numa-1的内存大小为24mb,确定待分配给numa-2和numa-3的内存大小为8mb,确定待分配给numa-4的内存的大小为(8mb+4kb)。以随机分配的方式为例,确定待分配给numa-1和numa-2的内存大小均为16mb,确定待分配给numa-3的内存大小为8mb,确定待分配给numa-4的内存大小均为(8mb+4kb)。

最后,根据计算结果,为这4个numa节点分配相应大小的内存。

方式2b,按照如下方式为所述n1个numa节点中除第n1个numa节点外的每个节点的分配相应大小的内存:

确定待分配给所述n1个numa节点中除第n1个numa节点外的第j

个numa节点的内存的大小为sj=k2j×p+a,其中k2j为待分配给所述第j

个numa节点的第一剩余内存的份数,且k2j为大于等于1的整数;

为所述第j个numa节点分配sj大小的内存;

为所述第n1个numa节点中的第n1个节点分配大小的内存,是大于等于0的整数;

为所述n2个numa节点中的每个numa节点分配a大小的内存。

具体地,假设待分配给虚拟机的总内存大小(16mb+4kb),内存分页大小为2mb,内存分页大小的整数倍p为2mb,平均内存大小为4mb,第一剩余内存的份数为2份,第二剩余内存的大小为4kb,虚拟机包括numa-1、numa-2、numa-3三个numa节点,则每个numa节点分得的内存大小为:

若选择numa-1、numa-2均分第一剩余内存的份数,即待分配给numa-1的第一剩余内存份数k21与待分配给numa-2的第一剩余内存份数k22均为1份,若numa-2为能够被分配不是内存页整数倍的内存的numa节点,则

待分配给numa-1的内存大小为s1=k21×p+a=6mb;

待分配给numa-2的内存大小为s2=k22×p+a+r=(6mb+4kb);

待分配给numa-3的内存大小为4mb。

需说明的是,以上的所有举例是说明性的,并不对宿主机和虚拟机的相关参数的限定,用户可根据自身需要选择合适的相关参数,如虚拟机的numa节点个数、宿主机的内存分页大小、待分配给虚拟机的内存大小等。

请参见图4,本发明实施例二提供了一种虚拟机,其中,

所述虚拟机包括n个非一致性内存架构numa节点,n为大于等于2的整数,包括:

第一获取单元401,用于获取待分配给所述虚拟机的所述n个numa节点中各个numa节点的平均内存的大小a,其中,所述平均内存的大小s是待配置给所述虚拟机的总内存的大小,p是所述虚拟机的宿主机的内存页大小的整数倍,k1是可分配份数;

第二获取单元402,用于获取待分配给所述n个numa节点中的n1个numa节点的第一剩余内存的份数k2,其中,所述第一剩余内存的份数k2=k1%n,n1为大于等于1且小于等于k2的整数;

第一分配单元403,获取在第二剩余内存的大小r为0时,基于所述平均内存的大小a和所述第一剩余内存的份数k2,为所述n个nmua节点分配相应大小的内存,其中,所述第二剩余内存的大小r=s%p,所述n个numa节点中除所述n1个numa节点外的节点是n2个numa节点,n2是等于(n-n1)的整数。

可选的,所述虚拟机还包括:

第二分配单元,用于在所述第二剩余内存的大小r不为0时,基于所述平均内存的大小a、所述第一剩余内存的份数k2和所述第二剩余内存的大小r,为所述n个nmua节点分配相应大小的内存。

可选的,所述第一分配单元401,包括:

第一分配子单元,用于按照如下方式为所述n1个numa节点中的每个节点的分配相应大小的内存:

确定待分配给所述n1个numa节点中的第i个numa节点的内存的大小为si=k2i×p+a,其中,k2i为待分配给所述第i个numa节点的第一剩余内存的份数,且k2i为大于等于1的整数;

为所述第i个numa节点分配si大小的内存;

第二分配子单元,用于为所述n2个numa节点中的每个numa节点分配a大小的内存。

可选的,所述第二分配单元,包括:

第三分配子单元,用于按照如下方式为所述n1个numa节点中的每个节点的分配相应大小的内存:

确定待分配给所述n1个numa节点中的第j个numa节点的内存的大小为sj=k2j×p+a,其中,k2j为待分配给所述第j个numa节点的第一剩余内存的份数,且k2j为大于等于1的整数;

为所述第j个numa节点分配sj大小的内存;

第四分配子单元,用于为所述n2个numa节点中的第n2个numa节点分配(a+r)大小的内存。

可选的,所述第二分配单元402,还包括:

第五分配子单元,用于为所述n2个numa节点中的除第n2个numa节点外的每个numa节点分配a大小的内存。

可选的,所述第二分配单元,还包括:

第六分配子单元,用于按照如下方式为所述n1个numa节点中除第n1个numa节点外的每个节点的分配相应大小的内存:

确定待分配给所述n1个numa节点中除第n1个numa节点外的第j个numa节点的内存的大小为sj=k2j×p+a,其中,k2j为待分配给所述第j个numa节点的第一剩余内存的份数,且k2j为大于等于1的整数;

为所述第j个numa节点分配sj大小的内存;

为所述第n1个numa节点中的第n1个节点分配大小的内存,是大于等于0的整数;

第七分配子单元,用于为所述n2个numa节点中的每个numa节点分配a大小的内存。

本发明实施例三提供了一种计算机装置,包括:

至少一个处理器,以及与所述至少一个处理器连接的存储器;

其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述至少一个处理器通过执行所述存储器存储的指令,执行实施例一所述的方法。

本发明实施例4提供了一种计算机可读存储介质,包括:

所述计算机可读存储介质上存储有计算机指令,当所述计算机指令被计算机装置的至少一个处理器执行时,实现如执行实施例一所述的方法。

上述本发明实施例中的技术方案,至少具有如下的技术效果或优点:

首先,获取待分配给所述虚拟机的所述n个numa节点中各个numa节点的平均内存的大小a,其中,所述平均内存的大小s是待配置给所述虚拟机的总内存的大小,p是所述虚拟机的宿主机的内存页大小的整数倍,k1是可分配份数;然后,获取待分配给所述n个numa节点中的n1个numa节点的第一剩余内存的份数k2,其中,所述第一剩余内存的份数k2=k1%n,n1为大于等于1且小于等于k2的整数;之后,在第二剩余内存的大小r为0时,基于所述平均内存的大小a和所述第一剩余内存的份数k2,为所述n个nmua节点分配相应大小的内存,其中,所述第二剩余内存的大小r=s%p,所述n个numa节点中除所述n1个numa节点外的节点是n2个numa节点,n2是等于(n-n1)的整数;在所述第二剩余内存的大小r不为0时,基于所述平均内存的大小a、所述第一剩余内存的份数k2和所述第二剩余内存的大小r,为所述n个nmua节点分配相应大小的内存。本申请的技术方案解决了现有技术中不能灵活的为虚拟机分配内存,难以满足进程多样化的内存调用需求的技术问题,实现了灵活的为虚拟机分配内存,且将该内存灵活分配给虚拟机的numa节点,满足了进程多样化的内存调用需求的技术效果。

尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

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