一种系统内存的申请方法、装置、设备及介质

著录项
  • CN202211199522.X
  • 20220929
  • CN115470005A
  • 20221213
  • 深信服科技股份有限公司
  • 刁家庆;李诗逸;丁辉;高仲于
  • G06F9/50
  • G06F9/50

  • 广东省深圳市南山区学苑大道1001号南山智园A1栋一层
  • 广东(44)
  • 深圳市深佳知识产权代理事务所(普通合伙)
  • 张晓
摘要
本申请公开了一种系统内存的申请方法、装置、设备及介质,包括:获取内核进程访问系统内存中的镜像区内存以申请第一目标内存的请求,并在确定镜像区内存的剩余内存不满足第一目标内存时,控制内核进程访问非镜像区内存以申请第一目标内存。其中,非镜像区内存为各节点内存的原始非镜像区内存,或在各节点内存的原始非镜像区内存与原始镜像区内存间新增镜像区内存,且将原始镜像区内存设置为非镜像区内存,因此该非镜像区内存为各节点内存中的原始镜像区内存。由此,本技术方案,镜像区内存不足时,内核进程可以申请原始非镜像区内存,也可以访问将原始镜像区内存设置为非镜像区内存的内存以申请第一目标内存,避免镜像区内存不足导致OOM。
权利要求

1.一种系统内存的申请方法,其特征在于,包括:

获取内核进程访问系统内存的镜像区内存以申请第一目标内存的请求;

在所述镜像区内存的剩余内存不满足所述第一目标内存时,控制所述内核进程访问非镜像区内存以申请所述第一目标内存;

其中,所述非镜像区内存为所述系统内存中各节点内存的原始非镜像区内存,或所述非镜像区内存为各所述节点内存中的原始镜像区内存;

在各所述节点内存的原始非镜像区内存与原始镜像区内存之间新增有镜像区内存,且将所述原始镜像区内存设置为所述非镜像区内存。

2.根据权利要求1所述的系统内存的申请方法,其特征在于,新增的所述镜像区内存的内存大小与所述原始镜像区内存的内存大小相同。

3.根据权利要求2所述的系统内存的申请方法,其特征在于,在所述获取内核进程访问系统内存的镜像区内存以申请第一目标内存的请求之后还包括:

访问各所述节点内存中的所述镜像区内存以申请所述第一目标内存。

4.根据权利要求2所述的系统内存的申请方法,其特征在于,所述非镜像区内存为各所述节点内存中的所述原始镜像区内存,则所述在所述镜像区内存的剩余内存不满足所述第一目标内存时,控制所述内核进程访问非镜像区内存以申请所述第一目标内存包括:

访问除所述原始非镜像区内存外的其他内存区域以申请所述第一目标内存。

5.根据权利要求1所述的系统内存的申请方法,其特征在于,在所述获取内核进程访问系统内存的镜像区内存以申请第一目标内存的请求之后还包括:

在所述系统内存的链表末端新增内存区域,并将所述新增内存区域设置为所述非镜像区内存。

6.根据权利要求1所述的系统内存的申请方法,其特征在于,还包括:

获取用户进程访问系统内存的非镜像区内存以申请第二目标内存的请求;

控制所述用户进程访问除所述镜像区内存外的其他内存区域以申请所述第二目标内存。

7.根据权利要求6所述的系统内存的申请方法,其特征在于,在所述获取用户进程访问系统内存的镜像区内存以申请第二目标内存的请求之后还包括:

判断申请内存页是否存在优先申请镜像区内存的目标标志;

若存在,则控制所述用户进程访问各所述节点内存中的所述镜像区内存以申请所述第二目标内存,判断所述镜像区内存的剩余内存是否满足所述第二目标内存,若不满足,控制所述用户进程访问所述非镜像区内存以申请所述第二目标内存;

若不存在,进入所述控制所述用户进程访问除所述镜像区内存外的其他内存区域以申请所述第二目标内存的步骤。

8.一种系统内存的申请装置,其特征在于,包括:

获取模块,用于获取内核进程访问系统内存的镜像区内存以申请第一目标内存的请求;

控制模块,用于在所述镜像区内存的剩余内存不满足所述第一目标内存时,控制所述内核进程访问非镜像区内存以申请所述第一目标内存;

其中,所述非镜像区内存为所述系统内存中各节点内存的原始非镜像区内存,或所述非镜像区内存为各所述节点内存中的原始镜像区内存;

在各所述节点内存的原始非镜像区内存与原始镜像区内存之间新增有镜像区内存,且将所述原始镜像区内存设置为所述非镜像区内存。

9.一种系统内存的申请设备,其特征在于,包括存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序时实现如权利要求1至7任一项所述的系统内存的申请方法的步骤。

10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述的系统内存的申请方法的步骤。

说明书
技术领域

本申请涉及内存技术领域,特别是涉及一种系统内存的申请方法、装置、设备及介质。

系统内存是计算机系统的重要组成部分,用于存放中央处理器(centralprocessing unit,简称CPU)的运算数据,以及与硬盘等外部存储器交换的数据等。当系统内存故障时,会导致计算机系统的数据丢失或系统宕机。为了提高系统内存的可靠性,通常采用内存镜像的方式,并将系统内存分为镜像区和非镜像区。

目前,当镜像区内存不足,不能申请非镜像区内存时,会导致系统内核进程申请不到内存,出现内核因分配不出内存报错(Out Of Memory,简称OOM)的现象。

由此可见,如何解决内存镜像区因内存不足出现OOM的现象,提高系统内存的可靠性,是本领域技术人员亟待解决的问题。

本申请的目的是提供一种系统内存的申请方法、装置、设备及介质,在获取到内核进程访问系统内存中的镜像区内存以申请第一目标内存时,若镜像区内存的剩余内存不满足第一目标内存,控制该内核进程访问非镜像区内存以申请第一目标内存,进而避免镜像区内存不足时无法申请非镜像区内存出现的OOM。

为解决上述技术问题,本申请提供一种系统内存的申请方法,包括:

获取内核进程访问系统内存的镜像区内存以申请第一目标内存的请求;

在所述镜像区内存的剩余内存不满足所述第一目标内存时,控制所述内核进程访问非镜像区内存以申请所述第一目标内存;

其中,所述非镜像区内存为所述系统内存中各节点内存的原始非镜像区内存,或所述非镜像区内存为各所述节点内存中的原始镜像区内存;

在各所述节点内存的原始非镜像区内存与原始镜像区内存之间新增有镜像区内存,且将所述原始镜像区内存设置为所述非镜像区内存。

优选地,新增的所述镜像区内存的内存大小与所述原始镜像区内存的内存大小相同。

优选地,在所述获取内核进程访问系统内存的镜像区内存以申请第一目标内存的请求之后还包括:

访问各所述节点内存中的所述镜像区内存以申请所述第一目标内存。

优选地,所述非镜像区内存为各所述节点内存中的所述原始镜像区内存,则所述在所述镜像区内存的剩余内存不满足所述第一目标内存时,控制所述内核进程访问非镜像区内存以申请所述第一目标内存包括:

访问除所述原始非镜像区内存外的其他内存区域以申请所述第一目标内存。

优选地,在所述获取内核进程访问系统内存的镜像区内存以申请第一目标内存的请求之后还包括:

在所述系统内存的链表末端新增内存区域,并将所述新增内存区域设置为所述非镜像区内存。

优选地,所述的系统内存的申请方法,还包括:

获取用户进程访问系统内存的非镜像区内存以申请第二目标内存的请求;

控制所述用户进程访问除所述镜像区内存外的其他内存区域以申请所述第二目标内存。

优选地,在所述获取用户进程访问系统内存的镜像区内存以申请第二目标内存的请求之后还包括:

判断申请内存页是否存在优先申请镜像区内存的目标标志;

若存在,则控制所述用户进程访问各所述节点内存中的所述镜像区内存以申请所述第二目标内存,判断所述镜像区内存的剩余内存是否满足所述第二目标内存,若不满足,控制所述用户进程访问所述非镜像区内存以申请所述第二目标内存;

若不存在,进入所述控制所述用户进程访问除所述镜像区内存外的其他内存区域以申请所述第二目标内存的步骤。

为了解决上述技术问题,本申请还提供了一种系统内存的申请装置,包括:

获取模块,用于获取内核进程访问系统内存的镜像区内存以申请第一目标内存的请求;

控制模块,用于在所述镜像区内存的剩余内存不满足所述第一目标内存时,控制所述内核进程访问非镜像区内存以申请所述第一目标内存;

其中,所述非镜像区内存为所述系统内存中各节点内存的原始非镜像区内存,或所述非镜像区内存为各所述节点内存中的原始镜像区内存;

在各所述节点内存的原始非镜像区内存与原始镜像区内存之间新增有镜像区内存,且将所述原始镜像区内存设置为所述非镜像区内存。

为了解决上述技术问题,本申请还提供了一种系统内存的申请设备,包括存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序时实现如所述的系统内存的申请方法的步骤。

为了解决上述技术问题,本申请还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现所述的系统内存的申请方法的步骤。

本发明所提供的一种系统内存的申请方法,包括:获取内核进程访问系统内存中的镜像区内存以申请第一目标内存的请求,在获取请求后,确定镜像区内存的剩余内存不满足第一目标内存时,控制内核进程访问系统内存中的非镜像区内存以申请第一目标内存。其中,非镜像区内存为系统内存中各节点内存的原始非镜像区内存,或在各节点内存的原始非镜像区内存与原始镜像区内存之间新增镜像区内存,且将原始镜像区内存设置为非镜像区内存,则非镜像区内存为各节点内存中的原始镜像区内存。由此可见,本发明所提供的技术方案,内核进程申请第一目标内存且镜像区内存的剩余内存不足时,可以申请原始非镜像区的内存,也可以在各节点内存的原始非镜像区内存与原始镜像区内存之间新增有镜像区内存,且将原始镜像区内存设置为非镜像区内存,由此,当镜像区内存不足时,可以访问将原始镜像区内存设置为非镜像区内存的内存以申请第一目标内存,避免了传统镜像区内存的剩余内存不足时,无法申请非镜像区的内存导致的OOM现象,进而提高了系统内存的可靠性。

此外,本申请还提供一种系统内存的申请装置、设备及介质,与上述的系统内存的申请方法相对应,效果同上。

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

图1为本发明实施例所提供的系统内存的申请装置的硬件架构的示意图;

图2为本发明实施例所提供的系统内存的申请方法的流程图;

图3为本发明实施例所提供的一种系统内存节点的示意图;

图4为本发明实施例所提供的另一种系统内存节点的示意图;

图5为本发明实施例所提供的系统内存的申请装置的结构图;

图6为本发明另一实施例提供的系统内存的申请设备的结构图。

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

本申请的核心是提供一种系统内存的申请方法、装置、设备及介质,当内核进程访问系统内存中的镜像区内存以申请第一目标内存时,若镜像区内存的剩余内存不满足第一目标内存,控制内核进程访问非镜像区内存以申请第一目标内存,其中,非镜像区内存为系统内存中各节点内存中的原始非镜像区,或在原始镜像区内存和原始非镜像区内存中间新增镜像区内存,并经原始镜像区内存设置为非镜像区内存,则该非镜像区内存为原始镜像区内存,由此,避免镜像区内存不足导致的OOM。

为了使本技术领域的人员更好地理解本申请方案,下面结合附图和具体实施方式对本申请作进一步的详细说明。

系统内存是计算机系统的重要组成部分,用于存放CPU的运算数据,以及与硬盘等外部存储器交换的数据等。当系统内存故障时,会导致计算机系统的数据丢失或系统宕机。为了提高系统内存的可靠性,通常采用内存镜像的方式,并将系统内存分为镜像区和非镜像区。目前,当镜像区内存不足不能申请非镜像区内存时,会导致系统内核进程申请不到内存出现OOM的现象。

为了解决由于镜像区内存不足出现的OOM现象,本发明提供了一种系统内存的申请方法,在内核进程访问系统内存中的镜像区内存以申请第一目标内存时,若系统内存中的镜像区内存的剩余内存不满足第一目标内存时,控制内核进程访问非镜像区内存以申请第一目标内存。其中,非镜像区内存可以是系统内存中各节点内存中的原始非镜像区内存,也可以是在原始非镜像区内存和原始镜像区内存中间新增镜像区内存后,并将原始镜像区内存设置为非镜像区内存,此时,该非镜像区内存为原始镜像区内存。

为了便于理解,下面将对本发明的技术方案所适用的硬件架构进行介绍。图1为本发明实施例所提供的系统内存的申请装置的硬件架构的示意图。如图1所示,在具体实施中,启动服务器1,服务器1加载基本输入输出系统(Basic Input Output System,简称BIOS)信息,其中BIOS信息包括了CPU相关信息、硬盘信息、内存信息、时钟信息等。基于服务器中处理器的产品系列平台引入对系统内存的内存镜像支持层,并将系统内存分为镜像区内存和非镜像区内存,通过终端2中BIOS设置菜单开启系统的内存镜像为系统提供保护,系统中的各进程运行在镜像区,并通过系统进行调整以适用内存镜像功能。

图2为本发明实施例所提供的系统内存的申请方法的流程图,如图1所示,该方法包括:

S10:获取内核进程访问系统内存的镜像区内存以申请第一目标内存的请求。

S11:在镜像区内存的剩余内存不满足第一目标内存时,控制内核进程访问非镜像区内存以申请第一目标内存。

其中,非镜像区内存为系统内存中各节点内存的原始非镜像区内存,或非镜像区内存为各节点内存中的原始镜像区内存。

在各节点内存的原始非镜像区内存与原始镜像区内存之间新增有镜像区内存,且将原始镜像区内存设置为非镜像区内存。

在具体实施例中,通过步骤S10获取到内核进程访问系统内存的镜像区内存以申请第一目标内存的请求后,进入步骤S11,当确定镜像区内存的剩余内存不满足第一目标内存时,即镜像区内存的剩余内存小于第一目标内存时,控制内核进程访问系统内存中的非镜像区内存以申请第一目标内存。其中,系统内存中的非镜像区内存可以是系统内存中各节点内存的原始非镜像区内存,也可以是在原始非镜像区和原始镜像区间新增镜像区内存,并将原始镜像区内存设置为非镜像区内存,所以该非镜像区内存为原始镜像区内存。则当镜像区内存的剩余内存不满足第一目标内存时,内核进程可以访问该非镜像区内存以申请第一目标内存。

图3为本发明实施例所提供的一种系统内存节点的示意图,为了便于理解,下面将结合图3对本发明的技术方案进行详细说明。如图3所示,选取了系统内存中的ZONE区域内存进行说明,其他区域内存与ZONE内存区域申请原理相同。ZONE区域内存包括N各节点内存,各节点内存均包括ZONE_MOVABLE区域内存,ZONE_NORMAL区域内存,其中,部分节点内存包括ZONE_DMA32区域内存,ZONE_DMA区域内存,且ZONE_MOVABLE区域内存为非镜像区内存,ZONE_NORMAL区域内存为镜像区内存。

需要说明的是,ZONE_DMA32区域内存和ZONE_DMA区域内存可以指定为镜像区内存,也可以指定为非镜像区内存,可以依据用户的实际业务需求进行设定。当然,可以理解的是,镜像区内存对系统有保护作用,因此通常情况下将这两部分区域内存设置镜像区内存。不论设置为镜像区内存还是非镜像区内存,当ZONE_MOVABLE区域内存和ZONE_NORMAL区域内存的内存不足时,均可向ZONE_DMA32区域内存和ZONE_DMA区域内存进行申请借用。

目前,内核进程访问系统内存中的镜像区内存以申请内存时,从各节点的ZONE_NORMAL区域内存开始进行访问以申请第一目标内存。当各节点内存中的ZONE_NORMAL区域内存不满足第一目标内存时,即镜像区内存的剩余内存不满足需要申请的内存时,可以向ZONE_DMA32区域内存和ZONE_DMA区域内存进行申请借用,但是由于ZONE_DMA32区域内存和ZONE_DMA区域内存的内存很小,很容易就全被申请占用,当除非镜像区内存外,其他内存区域的剩余内存均不能满足需要申请的内存时,由于当前申请内存的自上而下的申请逻辑,导致镜像区内存不足时,不能访问非镜像区内存以申请内存,此时内核进程申请不到内存会出现OOM的现象。

需要说明的是,当前内核进程访问镜像区内存以申请内存的自上而下的申请逻辑可以是从起始节点的Node0的镜像区内存ZONE_NORMA0开始访问,依次访问各节点内存的镜像区内存ZONE_NORMA后,若各节点内存的镜像区内存的剩余内存不满足需要申请的内存时,则返回节点Node0,继续访问节点Node0除非镜像区内存和镜像区内存外的其他内存区域的内存,即访问ZONE_DMA32区域内存和ZONE_DMA区域内存,由此,依次访问各节点内存的ZONE_DMA32区域内存和ZONE_DMA区域内存以申请内存。也可以是从Node0的镜像区内存ZONE_NORMA0开始访问,自上而下进行访问,节点Node0访问结束后,从下一节点的镜像区内存ZONE_NORMA开始访问,由此依次访问各节点除非镜像区内存以申请内存。

由此可见,依据目前的申请逻辑,当镜像区内存的剩余内存不足时,不能申请非镜像区的内存,进而可能出现OOM的现象。为了解决上述技术问题,本发明提供的系统内存的申请方法,在获取内核进程访问系统内存的镜像区内存以申请第一目标内存的请求后,若镜像区内存的剩余内存不满足第一目标内存,控制内核进程直接访问非镜像区内存以申请第一目标内存,如图3所示,当镜像区ZONE_NORMAL的内存不足时,向上申请非镜像区ZONE_MOVABLE的内存。

值得注意的是,此时内核进程访问的非镜像区内存ZONE_MOVABLE为系统内存中各节点内存的原始非镜像区内存。然而,系统内存中ZONE_MOVABLE区域内存划分出来是为了内存热添加自己内存迁移使用,也就是说ZONE_MOVABLE区域的内存页在业务需要时都可以迁移使用,当ZONE_NORMAL区域内存不足时,自然可以向ZONE_MOVABLE区域申请借用,但是由于访问ZONE_NORMAL区域的部分进程对应的内存页并不可迁移,进而会导致ZONE_MOVABLE区域的内存页出现不可迁移的现象,进而违背了系统内存设计ZONE_MOVABLE区域内存的目的。

所以,由于ZONE_MOVABLE区域内存的特性,当镜像区内存的剩余内存不满足第一目标内存时,控制内核进程直接访问非镜像区内存以申请第一目标内存存在一定的弊端。故,为了保证ZONE_MOVABLE区域内存的特性,本发明提供的系统内存的申请方法,控制内核进程访问的非镜像区内存还可以是原始镜像区内存。图4为本发明实施例所提供的另一种系统内存节点的示意图,为了便于理解,下面将结合图4进行详细说明。

如图4所示,同样的,依旧选取系统内存中的ZONE区域内存进行说明,其他区域内存与ZONE内存区域申请原理相同。ZONE区域内存包括N各节点内存,各节点内存均包括ZONE_MOVABLE区域内存和ZONE_NORMAL区域内存,其中,部分节点内存包括ZONE_DMA32区域内存,ZONE_DMA区域内存,且ZONE_MOVABLE区域内存为原始非镜像区内存,ZONE_NORMAL区域内存为原始镜像区内存。在各节点内存的原始非镜像区内存ZONE_MOVABLE和原始镜像区内存ZONE_NORMAL中间新增一个ZONE_MIRROR区域内存的镜像区内存,并将原始镜像区内存ZONE_NORMAL设置为非镜像区内存。由此,在内核进程申请内存时,当各节点内存的镜像区内存ZONE_MIRROR的剩余内存不满足第一目标内存时,控制内核进程依据自上而下的申请逻辑访问非镜像区内存ZONE_NORMAL的内存以申请第一目标内存,进而避免了向原始非镜像区内存ZONE_MOVABLE申请内存时,破坏了ZONE_MOVABLE区域内存的特性,同时还避免了镜像区ZONE_MIRROR内存不足时出现的OOM现象。

需要说明的是,新增镜像区内存可以在原始非镜像区内存ZONE_MOVABLE和原始镜像区内存ZONE_NORMAL中间,也可以在原始镜像区ZONE_NORMAL之后,当新增的镜像区内存ZONE_MIRROR在ZONE_NORMAL区域之后时,若镜像区内存ZONE_MIRROR的内存不足时,可以控制内核进程向上获取非镜像区ZONE_NORMAL区域的内存即可。由此,既不影响原始非镜像区内存ZONE_MOVABLE的特性,也可以避免镜像区内存不足时导致的OOM。还需要说明的是,新增的镜像区内存ZONE_MIRROR的内存大小与原始镜像区内存ZONE_NORMAL的内存大小相同。而当前非镜像区内存ZONE_NORMAL的内存大小可以与原始非镜像区ZONE_MOVABLE相同,也可以不相同,对此本发明不作限定,但需要注意的是,当前非镜像区内存ZONE_NORMAL的内存大小与当前非镜像区ZONE_MOVABLE的内存大小之和等于原始非镜像区内存的内存大小。

本发明实施例所提供的一种系统内存的申请方法,包括:获取内核进程访问系统内存中的镜像区内存以申请第一目标内存的请求,在获取请求后,确定镜像区内存的剩余内存不满足第一目标内存时,控制内核进程访问系统内存中的非镜像区内存以申请第一目标内存。其中,非镜像区内存为系统内存中各节点内存的原始非镜像区内存,或在各节点内存的原始非镜像区内存与原始镜像区内存之间新增镜像区内存,且将原始镜像区内存设置为非镜像区内存,则非镜像区内存为各节点内存中的原始镜像区内存。由此可见,本发明所提供的技术方案,内核进程申请第一目标内存且镜像区内存的剩余内存不足时,可以申请原始非镜像区的内存,也可以在各节点内存的原始非镜像区内存与原始镜像区内存之间新增有镜像区内存,且将原始镜像区内存设置为非镜像区内存,由此,当镜像区内存不足时,可以访问将原始镜像区内存设置为非镜像区内存的内存以申请第一目标内存,避免了传统镜像区内存的剩余内存不足时,无法申请非镜像区的内存导致的OOM现象,进而提高了系统内存的可靠性。

在具体实施例中,为了保护系统内存中的原始非镜像区的特性,则如图4所示,在原始非镜像区内存ZONE_MOVABLE和原始镜像区内存ZONE_NORMAL中间新增镜像区内存ZONE_MIRROR,并将原始镜像区内存ZONE_NORMAL设置为非镜像区内存,为了不改变系统内存的原始内存状态,新增镜像区内存ZONE_MIRROR的内存大小与原始镜像区内存的内存大小相同。而非镜像区内存ZONE_NORMAL的内存大小与非镜像区ZONE_MOVABLE的内存大小之和与原始非镜像区内存的内存大小相同,对于ZONE_NORMAL区域和ZONE_MOVABLE区域各占原始非镜像区内存的内存大小的多少,本发明不作限定。为了便于理解,下面将举例说明。

例如,原始非镜像区内存的内存大小为60G,原始镜像区内存的内存大小为30G,在原始非镜像区内存和原始镜像区内存中间新增镜像区内存ZONE_MIRROR后,镜像区内存ZONE_MIRROR的内存大小与原始镜像区内存的内存大小相同,即ZONE_MIRROR区域的内存大小为30G,非镜像区内存ZONE_NORMAL的内存大小与非镜像区ZONE_MOVABLE的内存大小之和为60G。

本发明实施例所提供的一种系统内存的申请方法,在系统内存的各节点内存的原始非镜像区内存与原始镜像区内存之间新增镜像区内存,并将原始镜像区内存设置为非镜像区内存,则非镜像区内存为各节点内存中的原始镜像区内存,当镜像区内存的剩余内存不满足内核进程申请的第一目标内存时,控制内核进程访问系统内存中的非镜像区内存以申请第一目标内存。保证了原始非镜像区内存特性的同时,避免了传统镜像区内存的剩余内存不足时,无法申请非镜像区的内存导致的OOM现象,进而提高了系统内存的可靠性。

在上述实施例的基础上,由于镜像区内存有保护系统并提高系统内存可靠性的作用,因此,本发明提供的技术方案,在获取到内核进程访问系统内存中的镜像区内存以申请第一目标内存的请求时,控制内核进程优先访问系统内存中各节点内存的镜像区内存以申请第一目标内存,当镜像区内存不足时,再控制内核进程访问非镜像区内存以申请第一目标内存。

如图4所示,内核进程申请第一目标内存时,从节点Node0的镜像区内存ZONE_MIRROR0开始访问,若ZONE_MIRROR0的内存不足,则向ZONE_MIRROR1访问,由此,依次访问各节点内存的ZONE_MIRROR区域内存以申请第一目标内存,当各节点内存的镜像区内存ZONE_MIRROR的剩余内存不能满足第一目标内存时,返回节点Node0,依次访问各节点中除镜像区内存外的其他内存区域以申请第一目标内存。

本发明实施例所提供的一种系统内存的申请方法,在内核进程访问系统内存中的镜像区内存以申请第一目标内存时,控制内核进程优先访问系统内存中各节点内存的镜像区内存以申请第一目标内存,进而提高系统内存的可靠性。

在具体实施中,如图4所示,在原始非镜像区内存ZONE_MOVABLE和原始镜像区内存ZONE_NORMAL中间新增镜像区内存ZONE_MIRROR,并将原始镜像区内存ZONE_NORMAL设置为非镜像区内存,内核进程申请第一目标内存时,若各节点内存的镜像区内存ZONE_MIRROR的剩余内存不满足第一目标内存时,内核进程可以访问非镜像区内存ZONE_MOVABLE,也可以访问非镜像区内存ZONE_NORMAL以申请第一目标内存。但是,保护系统内存设计ZONE_MOVABLE区域特性的角度出发,控制内核进程优先访问非镜像区内存ZONE_NORMAL以申请第一目标内存。

本发明实施例所提供的一种系统内存的申请方法,在原始非镜像区内存和原始镜像区内存中间新增镜像区内存,并将原始镜像区内存设置为非镜像区内存后,若镜像区内存的剩余内存不满足内核进程需要申请的内存时,控制内核进程优先访问除原始非镜像区内存以申请目标内存,由此,在保证原始非镜像区内存特性的同时,还可以避免系统内存中镜像区内存不足带来的OOM。

在上述实施例的基础上,当除原始非镜像区内存外的其他区域内存均不满足内核进程需要申请的第一目标内存时,为了进一步保证原始非镜像区内存特性,本发明提供的系统内存的申请方法还可以在系统内存的链表末端新增内存区域,且该新增内存区域为非镜像区内存。当除原始非镜像区内存外的其他区域内存均不满足内核进程需要申请的第一目标内存时,可以申请链表末端新增的非镜像区的内存以避免出现OOM。

本发明实施例所提供的一种系统内存的申请方法,在系统内存的链表末端新增非镜像区内存,当除原始非镜像区内存外的其他区域内存均不满足内核进程需要申请的第一目标内存时,内核进程可以访问链表末端新增的非镜像内存以申请第一目标内存,进一步保证原始非镜像区内存特性的同时,避免系统内存中镜像区内存不足带来的OOM。

目前,当用户进程访问系统内存中的非镜像区内存以申请内存时,非镜像区内存的剩余内存不满足用户进程需要申请的内存时,并不能阻止用户进程访问镜像区内存以申请内存,当镜像区内存被过多占用,依旧可能会导致镜像区内存不足发生OOM。因此,为了进一步避免镜像区内存不足时出现的OOM,本发明提供的系统内存的申请方法还包括:

获取用户进程访问系统内存的非镜像区内存以申请第二目标内存的请求;

控制用户进程访问除镜像区内存外的其他内存区域以申请第二目标内存。

如图3所示,按照当前自上而下的申请逻辑,当用户进程访问系统内存中的非镜像区以申请内存时,从非镜像区内存ZONE_MOVABLE的内存开始申请,若非镜像区内存的剩余内存不满足用户进程需要申请的内存时,则向下申请镜像区内存ZONE_NORMA的内存,进而可能出现过多占用ZONE_NORMA区域的内存导致镜像区内存不足出现OOM。

因此,为了避免出现OOM,本申请提供的系统内存的申请方法,当获取到用户进程访问系统内存的非镜像区内存以申请第二目标内存的请求时,控制用户进程访问除镜像区内存外的其他内存区域以申请第二目标内存,进而避免镜像区内存被过多占用导致的OOM。如图3所示,当非镜像区内存ZONE_MOVABLE的内存不足时,跳过镜像区内存ZONE_NORMA向下申请第二目标内存。当然,也可以是如图4所示,当非镜像区内存ZONE_MOVABLE的内存不足时,跳过镜像区内存ZONE_MIRROR向下申请非镜像区内存ZONE_NORMA的内存。

本发明实施例所提供的一种系统内存的申请方法,当用户进程访问系统内存的非镜像区内存以申请第二目标内存时,为了避免当非镜像区内存的剩余内存不满足第二目标内存时,用户进程占用镜像区内存导致镜像区内存不足出现OOM,确定是用户进程访问系统内存后,控制用户进程仅访问除镜像区内存外的其他内存以申请第二目标内存,由此避免系统出现OOM的同时,提高系统的可靠性。

在具体实施中,依据用户需求,少部分用户进程需要申请镜像区内存,因此在上述实施例的基础上,在获取用户进程访问系统内存的镜像区内存以申请第二目标内存的请求之后还包括:

判断申请内存页是否存在优先申请镜像区内存的目标标志。

若存在,则控制用户进程访问各节点内存中的镜像区内存以申请第二目标内存,判断镜像区内存的剩余内存是否满足第二目标内存,若不满足,控制用户进程访问非镜像区内存以申请第二目标内存;

若不存在,进入控制用户进程访问除镜像区内存外的其他内存区域以申请第二目标内存的步骤。

在获取用户进程申请第二目标内存的请求后,先判断申请内存页是否存在优先申请镜像区内存的目标标志,若存在目标标志,则控制用户进程从各节点的镜像区内存开始访问以申请第二目标内存,当镜像区内存不足时,再控制用户进程访问非镜像区内存以申请第二目标内存。需要说明的是,当用户进程需要申请镜像区内存时,申请逻辑与内核进程的申请逻辑相同。即,优先申请各节点内存的镜像区内存,当镜像区内存不足时,回到起始节点申请除镜像区内存的其他区域内存。若申请内存页不存在目标标志,则确定用户进程需要申请非镜像区内存,此时,控制用户进程从非镜像区内存开始访问以申请第二目标内存。

在具体实施中,依据用户实际业务需求,部分用户进程需要申请内核进程时,在申请内存页中添加一个标记,在缺页异常并进行申请内存页的过程中进行检查,如果发现该标记,说明该进程需要从镜像区内存申请内存,则添加目标标志,当获取用户进程访问系统内存以申请第二目标内存请求时获取到该目标标志,则控制用户进程访问各节点内存中的镜像区内存以申请第二目标内存。为了便于理解,下面将举例说明。

例如,依据用户实际业务需求,部分用户进程需要申请内核进程时,在申请内存页中添加MAD_MIRROR标记,在缺页异常并进行申请内存页的过程中进行检查,如果发现MAD_MIRROR标记,说明该进程需要从镜像区内存申请内存,则添加目标标志GFP_MIRROR,在用户进程申请第二目标内存访问内存区域时,若发现目标标志GFP_MIRROR,则控制用户进程访问各节点内存中的镜像区内存以申请第二目标内存。否则,控制用户进程访问除镜像区内存外的其他内存区域以申请第二目标内存。

本发明实施例所提供的一种系统内存的申请方法,当申请内存页存在优先申请镜像区内存的目标标志时,控制用户进程访问各节点内存中的镜像区内存以申请第二目标内存,进而满足用户进程的不同申请需求。

最后,为了便于本领域技术人员更好理解本发明的技术方案,下面将结合图4对内核进行和用户进行申请系统内存进行详细说明。

需要说明的是,为了保证系统内存中ZONE_MOVABLE区域的特性同时,避免系统内存中镜像区内存不足时出现的OOM,本发明优选在原始非镜像区内存ZONE_MOVABLE和原始镜像区内存ZONE_NORMAL中间新增镜像区内存ZONE_MIRROR,并将原始镜像区内存ZONE_NORMAL设置为非镜像区内存。此时,ZONE_MOVABLE区域为非镜像区内存,ZONE_MIRROR为镜像区内存,ZONE_NORMAL为非镜像区内存。

在具体实施中,首先需要判断申请的进程时内核进程还是用户进程,若确定为内核进程时,则从系统内存中各节点内存的镜像区内存ZONE_MIRROR开始申请,依次访问各节点的镜像区内存ZONE_MIRROR后,若镜像区内存的剩余内存不能满足内核进程需要申请的内存时,控制内核进程访问非镜像区ZONE_NORMAL内存以申请内存。

若申请进程为用户进程时,先判断该用户进程是否存在优先申请镜像区内存的目标标志,若存在目标标志,则按照内核进行的申请逻辑进行内存申请,即优先申请镜像区内存,当镜像区内存不足时,再申请非镜像区内存。若不存在目标标志时,则控制用户进程从非镜像区内存ZONE_MOVABLE开始访问,当各节点内存中的非镜像区内存ZONE_MOVABLE的内存不足时,控制用户进程跳过镜像区内存ZONE_MIRROR访问非镜像区ZONE_NORMAL以申请内存。

在上述实施例中,对于系统内存的申请方法进行了详细描述,本申请还提供系统内存的申请装置对应的实施例。需要说明的是,本申请从两个角度对装置部分的实施例进行描述,一种是基于功能模块的角度,另一种是基于硬件结构的角度。

图5为本发明实施例所提供的系统内存的申请装置的结构图,如图5所示,该装置包括:

获取模块10,用于获取内核进程访问系统内存的镜像区内存以申请第一目标内存的请求。

控制模块11,用于在镜像区内存的剩余内存不满足第一目标内存时,控制内核进程访问非镜像区内存以申请第一目标内存。

其中,非镜像区内存为系统内存中各节点内存的原始非镜像区内存,或非镜像区内存为各节点内存中的原始镜像区内存,在各节点内存的原始非镜像区内存与原始镜像区内存之间新增有镜像区内存,且将原始镜像区内存设置为非镜像区内存。

由于装置部分的实施例与方法部分的实施例相互对应,因此装置部分的实施例请参见方法部分的实施例的描述,这里暂不赘述。

本发明实施例所提供的一种系统内存的申请装置,包括:获取内核进程访问系统内存中的镜像区内存以申请第一目标内存的请求,在获取请求后,确定镜像区内存的剩余内存不满足第一目标内存时,控制内核进程访问系统内存中的非镜像区内存以申请第一目标内存。其中,非镜像区内存为系统内存中各节点内存的原始非镜像区内存,或在各节点内存的原始非镜像区内存与原始镜像区内存之间新增镜像区内存,且将原始镜像区内存设置为非镜像区内存,则非镜像区内存为各节点内存中的原始镜像区内存。由此可见,本发明所提供的技术方案,内核进程申请第一目标内存且镜像区内存的剩余内存不足时,可以申请原始非镜像区的内存,也可以在各节点内存的原始非镜像区内存与原始镜像区内存之间新增有镜像区内存,且将原始镜像区内存设置为非镜像区内存,由此,当镜像区内存不足时,可以访问将原始镜像区内存设置为非镜像区内存的内存以申请第一目标内存,避免了传统镜像区内存的剩余内存不足时,无法申请非镜像区的内存导致的OOM现象,进而提高了系统内存的可靠性。

图6为本发明另一实施例提供的系统内存的申请设备的结构图,如图6所示,系统内存的申请设备包括:存储器20,用于存储计算机程序;

处理器21,用于执行计算机程序时实现如上述实施例所提到的系统内存的申请方法的步骤。

本实施例提供的系统内存的申请设备可以包括但不限于智能手机、平板电脑、笔记本电脑或台式电脑等。

其中,处理器21可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器21可以采用数字信号处理器(Digital Signal Processor,简称DSP)、现场可编程门阵列(Field-Programmable Gate Array,简称FPGA)、可编程逻辑阵列(ProgrammableLogic Array,简称PLA)中的至少一种硬件形式来实现。处理器21也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称中央处理器(Central Processing Unit,简称CPU);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器21可以在集成有图像处理器(GraphicsProcessing Unit,简称GPU),GPU用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器21还可以包括人工智能(Artificial Intelligence,简称AI)处理器,该AI处理器用于处理有关机器学习的计算操作。

存储器20可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器20还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。本实施例中,存储器20至少用于存储以下计算机程序201,其中,该计算机程序被处理器21加载并执行之后,能够实现前述任一实施例公开的系统内存的申请方法的相关步骤。另外,存储器20所存储的资源还可以包括操作系统202和数据203等,存储方式可以是短暂存储或者永久存储。其中,操作系统202可以包括Windows、Unix、Linux等。数据203可以包括但不限于系统内存的申请方法中涉及的相关数据等。

在一些实施例中,系统内存的申请设备还可包括有显示屏22、输入输出接口23、通信接口24、电源25以及通信总线26。

本领域技术人员可以理解,图6中示出的结构并不构成对系统内存的申请设备的限定,可以包括比图示更多或更少的组件。

本申请实施例提供的系统内存的申请设备,包括存储器和处理器,处理器在执行存储器存储的程序时,能够实现如下方法:系统内存的申请方法。

本发明实施例所提供的一种系统内存的申请设备,在内核进程申请第一目标内存且镜像区内存的剩余内存不足时,可以申请原始非镜像区的内存,也可以在各节点内存的原始非镜像区内存与原始镜像区内存之间新增有镜像区内存,且将原始镜像区内存设置为非镜像区内存,由此,当镜像区内存不足时,可以访问将原始镜像区内存设置为非镜像区内存的内存以申请第一目标内存,避免了传统镜像区内存的剩余内存不足时,无法申请非镜像区的内存导致的OOM现象,进而提高了系统内存的可靠性。

最后,本申请还提供一种计算机可读存储介质对应的实施例。计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现如上述方法实施例中记载的步骤。

可以理解的是,如果上述实施例中的方法以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,简称ROM)、随机存取存储器(Random Access Memory,简称RAM)、磁碟或者光盘等各种可以存储程序代码的介质。

以上对本申请所提供的一种系统内存的申请方法、装置、设备及介质进行了详细介绍。说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。

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

本文发布于:2024-09-25 20:23:07,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/86139.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议