发明内容
有鉴于此,本申请实施例的目的在于提供一种管理方法、系统、计算机设备及存储介质,能够在内存超分配的情况下,当物理机内存不足的时候,回收虚拟机的部分内存,以提升内存的使用效率。
第一方面,本申请实施例提供了一种内存管理方法,应用于物理机用于内存回收的内核态进程,所述内存管理方法包括:
响应内存回收事件的触发,根据物理机中的当前内存使用信息,生成内存回收信息;
将所述内存回收信息传递给内存管理用户态进程;
所述内存回收信息用于所述内存管理用户态进程从运行在所述物理机上的多台虚拟机中确定目标虚拟机,并对所述目标虚拟机进行内存回收。
一种可选实施方式中,所述将所述内存回收信息传递给内存管理用户态进程,包括:
将所述内存回收信息写入内存回收信息队列中,以便所述内存管理用户态进程在监听到所述内存回收信息队列中存在内存回收信息后,从所述内存回收信息队列中读取所述内存回收信息。
一种可选实施方式中,所述内存回收信息包括:需要回收内存的非一致性记忆存取NUMA节点信息、需要回收的内存量大小、已经回收的内存量大小中一种或者多种。
一种可选实施方式中,所述将所述内存回收信息写入内存回收信息队列中,具体包括:
检测所述内存回收信息队列中已经存在的内存回收信息的条数是否达到预设数量;
若达到,则删除所述内存回收信息队列中队首的一条内存回收信息,并将当前内存回收信息写入所述内存回收信息队列的队尾。
一种可选实施方式中,还包括:
检测所述内存管理用户态进程是否在监听所述内存回收信息队列;
若所述内存管理用户态进程并未监听所述内存回收信息队列,则向所述物理机的内核发送内存回收指令,以便所述物理机的内核执行内存回收。
第二方面,本申请实施例还提供了一种内存管理方法,应用于物理机中部署的内存管理用户态进程,该内存管理方法包括:
获取物理机中的内核态进程传输的内存回收信息,并获取运行在所述物理机上的各台虚拟机的内存状态信息;
基于所述内存回收信息、以及各台所述虚拟机的内存状态信息,从各台所述虚拟机中确定目标虚拟机,以及与每台目标虚拟机分别对应的待回收内存量;
基于所述待回收内存量,对各台所述目标虚拟机进行内存回收。
一种可选实施方式中,所述获取内存回收信息,包括:
监听内存回收信息队列中是否存在所述内存回收信息;所述内存回收信息是所述内核态进程在响应内存回收事件的触发,根据物理机中的当前内存使用信息,生成并写入所述内存回收信息队列中的;
若监听到所述内存回收信息队列中存在所述内存回收信息,则从所述内存回收信息队列的队首读取一条所述内存回收信息。
一种可选实施方式中,在从所述内存回收信息队列的队首读取一条所述内存回收信息后,还包括:
将读取的所述内存回收信息从所述内存回收信息队列中删除。
一种可选实施方式中,任一台虚拟机的内存状态信息包括下述一种或者多种:
可回收的文件映射内存、不可回收的匿名映射内存、虚拟机当前总内存大小、虚拟机当前空闲内存大小。
一种可选实施方式中,所述基于所述待回收内存量,对各台所述目标虚拟机进行内存回收,包括:
基于内存气球Memory Balloon技术,按照所述待回收内存量对各台所述目标虚拟机进行内存回收。
第三方面,本申请实施例还提供一种内存管理系统,应用于物理机,该内存管理系统包括:用于内存回收的内核态进程以及内存管理用户态进程;
所述内核态进程,用于响应内存回收事件的触发,通过物理机中的当前内存使用信息,生成内存回收信息;将所述内存回收信息传递给所述内存管理用户态进程;
所述内存管理用户态进程,用于获取所述内核态进程传递的内存回收信息,并获取运行在所述物理机上的各台虚拟机的内存状态信息;基于所述内存回收信息、以及各台所述虚拟机的内存状态信息,从各台所述虚拟机中确定目标虚拟机,以及与每台目标虚拟机分别对应的待回收内存量;基于所述待回收内存量,对各台所述目标虚拟机进行内存回收。
第四方面,本申请实施例还提供一种电子设备,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当电子设备运行时,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤;
或者执行上述第二方面,或第二方面中任一种可能的实施方式中的步骤。
第五方面,本申请实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤;
或者执行上述第二方面,或第二方面中任一种可能的实施方式中的步骤。
本申请实施例提供的一种内存管理方法、系统、计算机设备及存储介质,通过用于内存回收的内核态进程来监测内存回收事件,并响应内存回收事件的触发,生成内存回收信息,并将内存回收信息传递给内存管理用户态进程;内存管理用户态进程根据获取的运行在物理机上各台虚拟机的内存状态信息,以及内存回收信息,确定目标虚拟机,以及与每台虚拟机对应的待回收内存量,最终基于该待回收内存量,对各台目标虚拟机进行内存回收,进而在能够在内存超分配的情况下,当物理机内存不足的时候,灵活、动态回收虚拟机的部分内存,以提升内存的使用效率。
为使本申请的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
现有的云计算场景下,虚拟化得到了广泛的应用,数据中心(即部署有虚拟机的物理机)内的资源大多都在经过虚拟化后呈现给用户,而大部分用户会申请比实际需要更多的资源,用来作为缓冲,此时数据中心整体利用率会偏低;为了提升资源的利用率,可以选择资源超分配使用,即为虚拟机分配比物理机实际资源更多的虚拟资源。相对于其他的资源,内存的超分配使用可能会让物理机操作系统频繁地处理内存不足导致的错误而造成虚拟机访问内存延迟增加,严重的会直接导致虚拟机崩溃,进而造成虚拟机运行的不稳定。
为了保证虚拟机的稳定运行,通常采用的方式为保证物理机的内存尽量不超分配使用,或者以较低的内存复用比例对物理机的内存进行超分配;这种方式虽然保证了虚拟机的稳定运行,但仍然不能保证物理机的高使用效率。
本申请实施例提供的一种内存管理方法、系统、计算机设备及存储介质,该方法中通过物理机内核中的内核态进程以及内存管理用户态进程之间交互配合,内核态进程在监测到需要进行内存回收后,将内存回收信息通知给内存管理用户态进程,内存管理用户态进程根据内存回收信息,从运行在物理机上的多台虚拟机中确定目标虚拟机,并对目标虚拟机进行内存回收,从而能够在物理机内存超分配的情况下,当物理机内存不足的时候,动态回收分配给目标虚拟机的部分内存,既保证了虚拟机的可靠运行,又提升了物理机内存的使用效率。
这里需要注意的是,该方法不仅仅能够用于物理机内存超分配场景下;对于物理机内存未超分配的场景下也同样适用。
针对以上方案所存在的缺陷,均是发明人在经过实践并仔细研究后得出的结果,因此,上述问题的发现过程以及下文中本申请针对上述问题所提出的解决方案,都应该是发明人在本申请过程中对本申请做出的贡献。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
本公开实施例所提供的内存管理方法的执行主体一般为部署有虚拟机的物理机;在物理机中,部署有用于内存回收的内核态进程,以及内存管理用户态进程。在一些可能的实现方式中,该内存管理方法可以通过处理器调用存储器中存储的计算机可读指令的方式来实现。
在本申请各实施例中,例如可以基于一个开源的系统虚拟化平台,如内核虚拟机的(Kernel-based Virtual Machine,KVM)虚拟化平台,对内存进行合理超分配。
示例性的,内存超分配为基于KVM虚拟化平台、分配超出物理机配置的数台虚拟机,包括内存和CPU的超分配,最多支持物理CPU内核总数的10倍数目的虚拟CPU,但是不支持在一个虚机上分配超过物理CPU内核总数的虚拟CPU。相对而言,在运行类似的客户机操作系统时,通过KVM虚拟化平台的资源超分配功能,可以节约大量的内存,从而可以实现更多的内存超分,运行更多的虚机,但是存在性能相对较差,存在资源竞争等不足。
下面首先以执行主体为内核态进程为例,对本公开实施例提供的内存管理方法加以说明。
参见图1所示,为本申请实施例提供的一种内存管理方法的流程图,应用于物理机内核中的内核态进程,所述方法包括步骤S101~S102其中:
S101:物理机内核中部署的内核态进程响应内存回收事件的触发,基于物理机中的当前内存使用信息,生成内存回收信息。
S102:将所述内存回收信息传递给内存管理用户态进程。
下面分别对上述S101~S102分别加以详细说明。
一:在上述S101中,在内存回收事件被触发之后,响应内存回收事件的触发,物理机内核中的内核态进程根据物理机中的当前内存使用信息,生成内存回收信息。
其中,所述内存回收信息用于内存管理用户态进程从运行在物理机上的多台虚拟机中确定目标虚拟机,并对所述目标虚拟机进行内存回收。
示例性的,内存回收事件是由物理机内核触发而产生的事件;物理机内核会实时监测物理机内存的使用情况;当物理机内核监测到物理机内存不足时,便会触发内存回收事件,并通知内核态进程。
内核态进程响应内存回收事件的触发,执行内存回收的具体过程。
示例性的,在一种可能的实施方式中,本申请实施例中的内存使用信息,例如可以包括物理机的内存占用情况,具体包括下述一种或者多种:
MemTotal------------总内存;
MemFree------------空闲内存;
MemAvailable------------可使用的内存;
Buffers------------给文件的缓冲内存;
Cached------------高速缓冲器内存;
SwapCached-----------高速缓冲存储用的交换空间内存;
Active------------经常使用的缓冲或高速缓冲存储页面文件内存;
Inactive------------不经常使用的缓冲或高速缓冲存储页面文件内存。
其中,空闲内存的使用情况包括:
total------总的可用物理内存和交换空间内存;
used------已经被使用的物理内存和交换内存;
free------可用使用的物理内存和交换内存;
shared------被共享使用的物理内存;
buff/cache------被buffer和cache使用的物理内存;
available------可以被应用程序使用的物理内存。
此外,还可以包括内存的进程状态,包括:
%CPU------进程使用cpu的百分比;
%MEM------进程使用内存的百分比。
内核态进程能够获得物理机的当前内存使用信息,在内存回收事件被触发后,内核态进程根据当前内存使用信息,生成内存回收信息。
此处,内存回收信息例如包括但不限于:需要回收内存的非一致性记忆存取(Non-Uniform Memory Access,NUMA)节点信息、需要回收的内存量大小、已经回收的内存量大小中一种或者多种。
示例性的,非一致性记忆存NUMA节点信息包括:本地节点、邻居节点、远端节点三种。
其中,本地节点为对于某个节点中的所有CPU、邻居节点为与本地节点相邻的节点、远端节点为非本地节点或邻居节点的节点。
二:在上述S102中,内核态进程例如可以采用下述方式将内存回收信息传递给内存管理用户态进程:
将所述内存回收信息写入内存回收信息队列中,所述回收消息队列用于所述内存管理用户态进程从所述内存回收信息队列中读取所述内存回收信息。
示例性的,内核态进程例如可以采用下述方式将内存回收信息写入回收信息队列中:
检测所述内存回收信息队列中已经存在的内存回收信息的条数是否达到预设数量;
若达到,则删除所述内存回收信息队列中队首的一条内存回收信息,并将当前内存回收信息写入所述内存回收信息队列的队尾。
若并未达到,则将当前内存回收信息直接所述内存回收信息队列的队尾。
示例性的,假设所述内存回收信息队列内的内存回收信息预设数量为n,且当前存在n条内存回收信息,分别为A1、A2、……、An,对于第n+1条内存回收信息An+1,则删掉内存回收信息A1,并补充内存回收信息An+1至所述内存回收信息队列的队尾。
若所述内存回收信息队列中已经存在的内存回收信息的条数并未达到预设数量,则直接补充内存回收信息An+1至所述内存回收信息队列的队尾。
此外,在本申请另一实施例中,若检测到内存回收信息队列中已经存在的内存回收信息的条数达到预设数量后,内核态进程还会向物理机的内核发送第一内存回收指令,以便物理机的内核执行内存回收。
此处,物理机的内核执行内存回收,例如为从运行在物理机上的多个虚拟机中确定至少一个目标虚拟机,并删除目标虚拟机,以使目标虚拟机所占用的内存得以释放。在通过内核执行内存回收时,内核通过虚拟机的活跃状态、所占用的内存量等因素,从多个虚拟机中确定目标虚拟机。
这样,在内存管理用户态进程执行内存回收处理不及时的情况下,通过物理机的内核辅助执行内存回收,通过牺牲小部分虚拟机,来保证运行在物理机上的大部分虚拟机的可靠运行。
此外,在本申请另一实施例中,还包括:检测所述内存管理用户态进程是否在监听所述内存回收信息队列;
若所述内存管理用户态进程未监听所述内存回收信息队列,则向所述物理机的内核发送第二内存回收指令,以便所述物理机的内核执行内存回收。
示例性的,若检测到所述内存管理用户态进程并未监听所述内存回收信息队列,向所述物理机的内核发送第二内存回收指令,以便所述物理机的内核执行内存回收。
此处,第二内存回收指令和第一内存回收指令可以是相同的内存回收指令,也可以是不同的内存回收指令。
在第二内存回收指令和第一内存回收指令并非相同的内存回收指令时,内核基于第二内存回收指令执行内存回收的具体方式,可以不同于内核基于第一内存回收指令执行内存回收的具体方式。
示例性的,例如针对第二内存回收指令,由于在内存管理用户态进程未监听内存回收信息队列时才会发送,此时,只能够通过内核执行内存回收,因此为了保证虚拟机的稳定运行,此时可以选择删除数量较多的虚拟机。针对第一内存回收指令,若是在内存管理用户态进程监听内存回收信息队列时生成的第一内存回收指令,可以将内核执行的内存回收作为内存管理用户态进程执行内存回收的补充,此时可以选择删除数量较少的虚拟机;若是在内存管理用户态进程未监听内存回收信息队列时生成第一内存回收指令,此时的第一内存回收指令例如可以与第二内存回收指令相同。
本申请实施例提供的一种内存管理方法,该方法应用于物理机内核中的内核态进程时,内核态进程响应内存回收事件的触发,根据物理机中的当前内存使用信息,生成内存回收信息;之后,将所述内存回收信息传递给内存管理用户态进程;所述内存回收信息用于所述内存管理用户态进程从运行在所述物理机上的多台虚拟机中确定目标虚拟机,并对所述目标虚拟机进行内存回收。该方法能够在内存超分配的情况下,通过内核态进程实时监测物理机的内存使用情况;当物理机内存不足的时候,内核态进程能够及时通过生成内存回收信息,并通过该内存回收信息控制内存管理用户态进程回收虚拟机的部分内存,以保证虚拟机可靠运行的情况下,提升内存的使用效率。
参照图2所示,本申请实施例还提供一种内存回收过程的具体示例,包括:
S201:启动物理机,并启动一台或者多台虚拟机。
S202:物理机的内核中加载新的用于进行内存管理的内核态进程,内核态进程创建虚拟字符设备;其中,字符设备用于存储内存回收信息队列。
S203:内核态进程根据物理机的内存使用信息,确定是否要触发内存回收事件,并在确定要触发内存回收事件后,基于物理机中的当前内存使用信息,生成内存回收信息。
S204:内核态进程判断内存回收信息队列是否满队列;如果是,则跳转至S205;如果否,则跳转至S206;
S205:内核态进程向物理机的内核发送内存回收指令,触发内核进行内存回收。
S206:内核态进程将生成的内存回收信息写入字符设备中的内存回收信息队列中。
S207:内核态进程检测内存管理用户态进程是否在监听内存回收信息队列。如果否,则跳转至S205;如果是,则跳转至S208。
S208:唤醒从内存回收信息队列中读取内存回收信息的用户态进程。
通过该示例,实现了通过内核态进程控制内存管理用户态进程实现内存的回收。
下面以执行主体为内存管理用户态进程为例,对本公开实施例提供的内存管理方法加以说明。
参见图3所示,为本申请实施例提供的一种内存管理方法的流程图,所述方法包括步骤S301~S304其中:
S301:启动内存管理用户态进程。
S302:内存管理用户态进程获取物理机中的内核态进程传输的内存回收信息,并获取运行在所述物理机上的各台虚拟机的内存状态信息。
S303:基于所述内存回收信息、以及各台所述虚拟机的内存状态信息,从各台所述虚拟机中确定目标虚拟机,以及与每台目标虚拟机分别对应的待回收内存量。
S304:基于所述待回收内存量,对各台所述目标虚拟机进行内存回收。
一:在上述S302中,内存管理用户态进程例如采用下述方式获取物理机中的内核态进程传输的内存回收信息
其中,所述获取内存回收信息,包括:
监听内存回收信息队列中是否存在所述内存回收信息;所述内存回收信息是所述内核态进程响应内存回收事件的触发,根据物理机中的当前内存使用信息,生成并写入所述内存回收信息队列中的;
若监听到所述内存回收信息队列中存在所述内存回收信息,则从所述内存回收信息队列的队首读取一条所述内存回收信息。
示例性的,假设内存回收信息队列中存在n条内存回收信息,分别为B1、B2、……、Bn,若监听到所述内存回收信息队列中存在所述内存回收信息,则读取内存回收信息队列中的B1内存回收信息。
在从所述内存回收信息队列的队首读取一条所述内存回收信息后,还包括:
将读取的所述内存回收信息从所述内存回收信息队列中删除。
示例性的,在读取内存回收信息队列中的内存回收信息B1之后,将内存回收信息B1从内存回收信息队列中删除。
在虚拟机中,部署有代理进程,该代理进程能够采集虚拟机内的内存状态信息,并将采集到的内存状态信息发送给内存管理用户态进程,从而使得内存管理用户态进程获取到各部署在物理机上的虚拟机的内存状态信息。
此处,任一台虚拟机的内存状态信息包括下述一种或者多种:
可回收的文件映射内存、不可回收的匿名映射内存、虚拟机当前总内存大小、当前空闲内存大小。
二:在上述S303中,基于所述内存回收信息、以及各台所述虚拟机的内存状态信息,从各台所述虚拟机中确定目标虚拟机,以及与每台目标虚拟机分别对应的待回收内存量。
示例性的,内存管理用户态进程监听在从内存回收信息队列中读取了内存回收信息后,通过虚拟机内启动的代理进程获取各个虚拟机内部的内存状态信息,然后根据内存回收信息和内存状态信息,计算出来符合内存回收要求的一个或者多个虚拟机;在一个或者多个虚拟机中,选择适合回收内存的目标虚拟机,以及与每台目标虚拟机分别对应的待回收内存量。
示例性的,选择适合回收内存的目标虚拟机的优先级规则如下:
选择空闲内存大于需要回收内存量大小的虚拟机;
选择文件映射内存大于需要回收内存量大小的虚拟机。
若无法按照上述优先级规则确定目标虚拟机,将需要回收的内存量大小进行切分,然后按照切分后的内存量大小分别确定对应的目标虚拟机。
示例性的,在内存回收信息包括:需要回收内存的非一致性记忆存取NUMA节点信息、需要回收的内存量大小、已经回收的内存量大小时,本申请实施例提供的确定目标虚拟机的过程包括:
步骤1:根据需要回收内存的非一致性记忆存取NUMA节点信息,确定使用对应NUMA节点的一个或者多个虚拟机。
步骤2:基于需要回收的内存量大小、以及已经回收的内存量大小,确定当前需要回收的内存量大小。
步骤3:基于当前需要回收的内存量大小,从确定的一个或者多个虚拟机中,确定是否存在空闲内存大于当前需要回收内存量大小的虚拟机;若存在,则跳转至步骤4;若不存在,则跳转至步骤5。
步骤4:将空闲内存大于当前需要回收内存量大小的虚拟机作为目标虚拟机。
步骤5:基于当前需要回收的内存量大小,从确定的一个或者多个虚拟机中,确定是否存在文件映射内存大于当前需要回收内存量大小的虚拟机;若存在,则跳转至步骤6;若不存在,则跳转至步骤7。
步骤6:将文件映射内存大于当前需要回收内存量大小的虚拟机作为目标虚拟机。
步骤7:将内存回收失败的信息通知给内核态进程,以使内核态进程根据当前的内存使用情况判断是否要通知内核进行内存回收。
另外,在本本申请另一实施例中,若步骤5的判断结果为不存在,还可以将当前需要回收内存量大小分成至少两个新的当前需要回收内存量大小,并基于至少两个新的当前需要回收内存量大小,再次执行步骤3~步骤6,直至确定出至少一个目标虚拟机为止。
这里,基于当前需要回收内存量大小确定的目标虚拟机,该当前需要回收内存量大小即为与目标虚拟机对应的待回收内存量。
另外,在将前需要回收内存量大小分成至少两个新的当前需要回收内存量大小后,在一种可能的情况下,只能针对划分成的至少两个新的当前需要回收内存量中的部分,确定目标虚拟机。内存管理用户态进程会在执行内存回收后,将此次回收的内存量传递给内核态进程,以使内核态进程能够基于内存实时使用情况,再次出发内存回收过程。
三:在上述S303中,基于所述待回收内存量,对各台所述目标虚拟机进行内存回收。
所述基于所述待回收内存量,对各台所述目标虚拟机进行内存回收,包括:
基于内存气球Memory Balloon技术,按照所述待回收内存量对各台所述目标虚拟机进行内存回收。
其中,Memory Balloon技术通过物理机和VM协同来实现的,在节约内存和灵活分配内存方面有明显的优势。
本申请实施例提供的内存管理方法,该内存管理方法应用于内存管理用户态进程时,在启动内存管理用户态进程后,内存管理用户态进程通过获取的物理机中的内核态进程传输的内存回收信息,以及运行在物理机上的各台虚拟机的内存状态信息,从各台虚拟机中确定目标虚拟机、以及与每台目标虚拟机对应的待回收内存量,然后基于与每台目标虚拟机对应的待回收内存量,对各台目标虚拟机进行内存回收,进而在能够在内存超分配的情况下,当物理机内存不足的时候,灵活、动态回收虚拟机的部分内存,以提升内存的使用效率。
参照图4所示,本申请实施例还提供一种内存管理的具体示例,包括:
S401:在物理机内启动内存管理用户态进程。
S402:等待内核态进程唤醒。
S403:在内核态进程唤醒内存管理用户态进程后,内存管理用户态进程向字符设备发送读指令。
S404:内存管理用户态进程判断在字符设备中是否返回内存回收信息;如果是(在字符设备中的内存回收信息队列不为空时),则跳转至S405;如果否(在字符设备中的内存回收信息队列为空),则跳转至S402。
S405:通过虚拟机中部署的代理进程,获取虚拟机的内存使用信息。
S406:基于内存使用信息、以及字符设备返回的内存回收信息,检测各台虚拟机中是否存在空间内存大于需要回收内存量大小的目标虚拟机;如果否,则跳转至S407,如果是,则跳转至S409。
S407:基于内存使用信息、以及内存回收信息,检测各台虚拟机中是否存在文件映射大于需要回收内存量大小的目标虚拟机;如果否,则跳转至S408。如果是,则跳转至S409。
S408:将内存回收失败的信息通知给内核态进程,以使内核态进程根据当前的内存使用情况判断是否要通知内核进行内存回收。跳转至S402。
S409:对确定的目标虚拟机进行内存回收。在进行内存回收后,跳转至S402。
通过上述过程,实现内存的动态回收。
参照图5所示,为本申请实施例提供的一种内存管理系统的示意图,该内存管理系统包括:内核态进程51以及内存管理用户态进程52,其中:
所述内核态进程51,用于响应内存回收事件的触发,基于物理机中的当前内存使用信息,生成内存回收信息;将所述内存回收信息传递给所述内存管理用户态进程;
所述内存管理用户态进程52,用于获取所述内核态进程传递的内存回收信息,并获取运行在所述物理机上的各台虚拟机的内存状态信息;基于所述内存回收信息、以及各台所述虚拟机的内存状态信息,从各台所述虚拟机中确定目标虚拟机,以及与每台目标虚拟机分别对应的待回收内存量;基于所述待回收内存量,对各台所述目标虚拟机进行内存回收。
通过用于内存回收的内核态进程来监测内存回收事件,并响应内存回收事件的触发,生成内存回收信息,并将内存回收信息传递给内存管理用户态进程;内存管理用户态进程根据获取的运行在物理机上各台虚拟机的内存状态信息,以及内存回收信息,确定目标虚拟机,以及与每台虚拟机对应的待回收内存量,最终基于该待回收内存量,对各台目标虚拟机进行内存回收,进而在能够在内存超分配的情况下,当物理机内存不足的时候,灵活、动态回收虚拟机的部分内存,以提升内存的使用效率。
一种可能的实施方式中,所述内核态进程51,用于采用下述方式将所述内存回收信息传递给内存管理用户态进程:
将所述内存回收信息写入内存回收信息队列中,所述回收消息队列用于所述内存管理用户态进程从所述内存回收信息队列中读取所述内存回收信息。
一种可能的实施方式中,所述内核态进程51,用于采用下述方式将所述内存回收信息写入内存回收信息队列中:
检测所述内存回收信息队列中已经存在的内存回收信息的条数是否达到预设数量;
若达到,则删除所述内存回收信息队列中队首的一条内存回收信息,并将当前内存回收信息写入所述内存回收信息队列的队尾。
一种可能的实施方式中,所述内核态进程51,还用于在检测到所述内存回收信息队列中以经存在的内存回收信息的数量达到所述预设数量后,向所述物理机的内核发送第一内存回收指令,以便所述物理机的内核执行内存回收。
一种可能的实施方式中,所述内核态进程31,还用于:
测所述内存管理用户态进程是否在监听所述内存回收信息队列;
若所述内存管理用户态进程未监听所述内存回收信息队列,则向所述物理机的内核发送第二内存回收指令,以便所述物理机的内核执行内存回收。
一种可能的实施方式中,所述内存回收信息包括:需要回收内存的非一致性记忆存取NUMA节点信息、需要回收的内存量大小、已经回收的内存量大小中一种或者多种。
一种可能的实施方式中,所述内存管理用户态进程52,用于采用下述方式获取所述内核态进程传递的内存回收信息:
监听内存回收信息队列中是否存在所述内存回收信息;所述内存回收信息是所述内核态进程在响应内存回收事件的触发,根据物理机中的当前内存使用信息,生成并写入所述内存回收信息队列中的;
若监听到所述内存回收信息队列中存在所述内存回收信息,则从所述内存回收信息队列的队首读取一条所述内存回收信息。
一种可能的实施方式中,所述内存管理用户态进程52,在从所述内存回收信息队列的队首读取一条所述内存回收信息后,还用于:
将读取的所述内存回收信息从所述内存回收信息队列中删除。
一种可能的实施方式中,任一台虚拟机的内存状态信息包括下述一种或者多种:
可回收的文件映射内存、不可回收的匿名映射内存、虚拟机当前总内存大小、虚拟机当前空闲内存大小。
一种可能的实施方式中,所述内存管理用户态进程52,用于采用下述方式基于所述待回收内存量,对各台所述目标虚拟机进行内存回收,包括:
基于所述待回收内存量,以及内存气球Memory Balloon技术对各台所述目标虚拟机进行内存回收。
本申请实施例还提供了一种计算机设备600,如图6所示,为本申请实施例提供的计算机设备600结构示意图,包括:
包括存储器61、处理器62及存储在该存储器61上并可在该处理器62上运行的计算机程序,其中,上述处理器62执行上述计算机程序时实现上述内存管理方法的步骤。
具体地,上述存储器61和处理器62能够为通用的存储器和处理器,这里不做具体限定,当处理器62运行存储器61存储的计算机程序时,能够执行上述内存管理方法,从而解决内存无法超分配而造成的内存使用效率低的问题。进而达到能够在内存超分配的情况下,当物理机内存不足的时候,回收虚拟机的部分内存,以提升内存的使用效率的效果。
本申请实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述方法实施例中所述的内存管理方法以及内存管理方法的步骤。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上所述实施例,仅为本申请的具体实施方式,用以说明本申请的技术方案,而非对其限制,本申请的保护范围并不局限于此,尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本申请实施例技术方案的精神和范围,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应所述以权利要求的保护范围为准。