一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

内存分配方法及装置与流程

2021-11-05 20:44:00 来源:中国专利 TAG:


1.本说明书实施例涉及计算机技术领域,特别涉及一种内存分配方法。本说明书一个或者多个实施例同时涉及一种内存分配装置,一种计算设备,以及一种计算机可读存储介质。


背景技术:

2.大页(huge pages)是指大的内存页。目前,计算机处理器的内存一般的一个页大小是4kb,但是随着计算机处理器的内存越来越大,tlb(内存管理单元(mmu)硬件上为加速页表查询做的缓存)的miss(未命中)率越来越高,计算机处理器的内存又支持了大页(例如x86里面的2m大页和1g大页),使用大页可以降低页表项,降低需要的tlb条目数,从而降低tlb的miss率,提高计算机处理器的内存的操作效率以及整体性能。
3.但是,传统的大页分配都是提前规划好的,即预先为应用程序分配大页,这些预先分配的内存大页不能给其他应用程序使用,那么若预先为应用程序分配的内存大页不足,则可能会导致应用程序无法启动,若预先为应用程序分配的大页过多,则可能会造成资源浪费。


技术实现要素:

4.有鉴于此,本说明书施例提供了计算机技术领域,特别涉及一种内存分配方法。本说明书一个或者多个实施例同时涉及一种内存分配装置,一种计算设备,以及一种计算机可读存储介质,以解决现有技术中存在的技术缺陷。
5.根据本说明书实施例的第一方面,提供了一种内存分配方法,应用于操作系统,包括:
6.基于内存需求将内存分配为普通内存区域和指定内存区域,并接收应用程序发送的携带有配置参数的内存分配请求,其中,所述指定内存区域用来进行连续内存分配;
7.在基于所述配置参数确定所述应用程序满足预设条件的情况下,基于所述内存分配请求为所述应用程序调整使用目标内存页的操作参数;
8.接收所述应用程序基于所述操作参数发送的目标内存页分配请求,并基于所述目标内存页分配请求中携带的所述目标内存页的数量,从所述普通内存区域和/或所述指定内存区域动态为所述应用程序分配对应数量的目标内存页。
9.根据本说明书实施例的第二方面,提供了一种内存分配装置,应用于操作系统,包括:
10.内存请求模块,被配置为基于内存需求将内存分配为普通内存区域和指定内存区域,并接收应用程序发送的携带有配置参数的内存分配请求,其中,所述指定内存区域用来进行连续内存分配;
11.参数调整模块,被配置为在基于所述配置参数确定所述应用程序满足预设条件的情况下,基于所述内存分配请求为所述应用程序调整使用目标内存页的操作参数;
12.内存页分配模块,被配置为接收所述应用程序基于所述操作参数发送的目标内存页分配请求,并基于所述目标内存页分配请求中携带的所述目标内存页的数量,从所述普通内存区域和/或所述指定内存区域动态为所述应用程序分配对应数量的目标内存页。
13.根据本说明书实施例的第三方面,提供了一种计算设备,包括:
14.存储器和处理器;
15.所述存储器用于存储计算机可执行指令,该计算机可执行指令被处理器执行时实现上述内存分配方法的步骤。
16.根据本说明书实施例的第四方面,提供了一种计算机可读存储介质,其存储有计算机可执行指令,该计算机可执行指令被处理器执行时实现上述内存分配方法的步骤。
17.根据本说明书实施例的第五方面,提供了一种计算机程序,其中,当所述计算机程序在计算机中执行时,令计算机执行上述内存分配方法的步骤。
18.本说明书一个实施例实现了一种内存分配方法及装置,其中,所述内存分配方法应用于操作系统,包括基于内存需求将内存分配为普通内存区域和指定内存区域,并接收应用程序发送的携带有配置参数的内存分配请求;在基于所述配置参数确定所述应用程序满足预设条件的情况下,基于所述内存分配请求为所述应用程序调整使用目标内存页的操作参数;接收所述应用程序基于所述操作参数发送的目标内存页分配请求,并基于所述目标内存页分配请求中携带的所述目标内存页的数量,从所述普通内存区域和/或所述指定内存区域动态为所述应用程序分配对应数量的目标内存页。具体的,所述内存分配方法基于内存需求可以将内存划分为能被可迁移的内存使用的指定内存区域和被普通小页使用的普通内存区域,在应用程序不需要使用大页时,指定内存区域可被作为普通小页使用,而应用程序需要使用大页时,可以把指定内存区域中的内存迁移走,为应用程序腾出需要连续的大页区域,解决了不同应用程序的内存需求量不一样的问题,避免资源浪费;并且操作系统会根据有内存需求的应用程序的配置参数(如文件名)确定哪些应用程序需要使用大页,自动修改要使用大页的应用程序的命令行参数或自动给该使用大页的应用程序添加使用大页的环境变量,来使能应用程序可以在操作系统内核使用大页,实现应用程序无感知,提升用户体验。
附图说明
19.图1是本说明书一个实施例提供的一种内存分配方法的具体应用示意图;
20.图2是本说明书一个实施例提供的一种内存分配方法的流程图;
21.图3是本说明书一个实施例提供的一种内存分配方法的交互处理过程流程图;
22.图4是本说明书一个实施例提供的一种内存分配装置的结构示意图;
23.图5是本说明书一个实施例提供的一种计算设备的结构框图。
具体实施方式
24.在下面的描述中阐述了很多具体细节以便于充分理解本说明书。但是本说明书能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本说明书内涵的情况下做类似推广,因此本说明书不受下面公开的具体实施的限制。
25.在本说明书一个或多个实施例中使用的术语是仅仅出于描述特定实施例的目的,
而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本说明书一个或多个实施例中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
26.应当理解,尽管在本说明书一个或多个实施例中可能采用术语第一、第二等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一也可以被称为第二,类似地,第二也可以被称为第一。取决于语境,如在此所使用的词语“如果”可以被解释成为“在
……
时”或“当
……
时”或“响应于确定”。
27.首先,对本说明书一个或多个实施例涉及的名词术语进行解释。
28.内存页:计算机硬件上的内存管理单元(mmu,memory management unit)的页表识别的一个连续内存区域,可以被作为给软件访问的一个最小粒度单元。在不同体系结构下硬件支持的页大小不同,例如x86当前支持的有4kb、2mb、1gb三种,越大的页性能越好(所需的tlb条目数越少,tlb miss率越低)。
29.1g大页:x86上目前支持的最大的内存页大小。
30.tlb:内存管理单元(mmu)硬件上为加速页表查询做的缓存,受限于硬件成本、性能等考虑,缓存条目数比较有限。
31.cma(contiguous memory allocator):linux上的一种内存预留方式,启动时预留一些内存为cma区域,在cma区域中的内存只能给可以被移动的内存分配来使用,这样当后续需要通过移动这些已被分配出去的内存时,就可以合并出一大段连续的空闲内存页,例如用作1g大页使用。
32.小页:指小的内存页,例如4kb的内存页。
33.指定内存区域:cma内存区域,可以对内存进行调整,合并出一大段连续的空闲内存页,用来进行连续内存分配。
34.普通内存区域:非cma内存区域区域。
35.计算机处理器一般的一个页大小是4kb,但是随着计算机内存越来越大,tlb的miss率越来越高。因此计算机处理器又支持了大页(例如x86里面的2m大页和1g大页),使用大页可以降低页表项,降低需要的tlb条目数,从而降低tlb的miss率;相比使用4k小页和2m大页,使用1g大页,可以进一步降低tlb的miss率,提升性能。但1g大页使用起来不方便,有两个原因:第一:如果某个应用程序只需要几百字节,则分配1g大页会导致浪费接近1g内存,因此只有使用内存较大且连续的应用程序才适合使用1g大页,例如java的堆内存,而有的应用程序可能不适合使用1g大页,例如大多数c或c 程序。第二:如果预先为应用程序分配好1g大页,则这些预留的1g大页不能给普通进程使用(普通进程使用小页),那么如果启动的容器内跑的是不使用1g大页的应用程序,则会造成内存的资源浪费;而如果不预先分配,使用1g大页的应用程序需要使用1g大页时,大概率又分配不出来1g大页(因为每个1g大页需要“连续”的1g内存空间),导致得不到性能收益。由上可知,导致1g大页在生产环境中很难用起来,通常只能针对所有容器都跑同样任务的单一场景来一开始就定制化预留好这个应用程序需要的1g大页个数的场景才能使用。
36.目前,最常用的方案就是上述的提前预留1g大页,但是这种方案只适用于能够提
前规划好一共需要多少1g大页的应用程序,即对于不同的应用程序需求,例如不同应用程序使用的内存量不同,需求的1g大页数量不同,对系统内的大页个数进行相应的配置。而对于无法提前规划好需要多少1g大页的应用程序,该方案不可行,因为分配少了,可能不够用,分配多了,可能会造成资源浪费。
37.基于此种缺陷,可以采用在操作系统中预留cma区域的方案,即在操作系统启动时,将一大块内存区域标记为cma区域,只有能被迁移的内存可以从该cma区域内分配。在应用程序没有使用1g大页时,这些cma区域可以被作为普通小页使用(用途上可以被迁移的前提下),需要分配1g大页时,再把被占用的内存迁移走,在cma区域腾出连续的1g大页区域来,这样就可以临时分配出1g大页。该方案能解决不同应用程序的1g大页需求量不一样的问题,但是依然存在需要在应用程序启动前手动或通过脚本方式自动化分配出1g大页的问题,也就是说需要不同的应用程序做感知,无法做到对应用程序透明。
38.为了解决上述技术问题,本说明书实施例提供了一种内存分配方法,通过该内存分配方法的一套配置就能支撑任意不同的应用程序,包括有的应用程序不使用大页(如1g大页),以及使用1g大页的应用程序所需的1g大页个数不一样等各种复杂场景,而且应用程序不需要做任何感知或管理,就可以很好地适应有各种应用程序的复杂环境,例如有很多不用应用的电商场景或云上的弹性容器实例服务等,在这些场景下,应用的参数由不同的应用维护者或公有云客户提供,本方案可以在不需要这些应用的开发者修改现有应用的前提下,让能使用1g大页的应用程序透明地享受到1g大页带来的性能收益。
39.在本说明书中,提供了一种内存分配方法,本说明书同时涉及一种内存分配装置,一种计算设备,以及一种计算机可读存储介质,在下面的实施例中逐一进行详细说明。
40.参见图1,图1示出了根据本说明书一个实施例提供的一种内存分配方法的具体应用示意图。
41.图1中包括操作系统内核102,应用程序a104,应用程序b106,其中,应用程序a104可以理解为至少一个普通应用程序,即使用普通小页的应用程序;应用程序b106可以理解为至少一个特定应用程序,即使用大页(如1g大页)的应用程序。
42.实际应用中,操作系统在启动之前,接收系统管理员发送的内存配置需求,例如将内存的20%划分为非cma区域,将内存的80%划分为cma区域的内存配置需求。操作系统启动,操作系统内核按照接收的内存配置需求将内存的20%划分为非cma区域,将内存的80%划分为cma区域。
43.操作系统内核102接收应用程序a104和/或应用程序b106的内存分配请求,操作系统内核102根据应用程序a104和/或应用程序b106的配置参数(如文件名),确定应用程序a104属于普通应用,为其分配需要的普通小页,以及确定应用程序b106属于能使用1g大页的应用,自动为该应用程序b106添加参数或环境变量来使能应用程序b106进入1g大页流程。
44.应用程序b106基于添加的参数或环境变量确定要使用的1g大页的数量x,并向操作系统内核102发送分配x个1g大页的内存分配请求;操作系统内核102按照应用程序b106指定的1g大页的数量x,从非cma区域和/或cma区域为应用程序b106分配出x个连续的1g大页。
45.操作系统内核102记录给应用程序b106分配的1g大页的数量,且将按照应用程序
variables)一般是指在操作系统中用来指定应用程序运行环境的一些参数。本说明书实施例的环境变量是指在操作系统中使用1g大页的操作系统运行环境的一些参数。
58.具体的,基于所述内存分配请求为所述应用程序调整使用目标内存页的操作参数,可以理解为基于所述内存分配请求通过改变所述应用程序的环境变量或者命令行参数等方式,为所述应用程序调整使用目标内存页的操作参数。
59.举例说明,若配置参数为文件名,操作系统内核在接收到携带有文件名的应用程序的内存分配请求之后,根据该文件名确定该应用程序可以使用1g大页的情况下,基于该应用程序的内存分配请求自动修改该应用程序的命令行参数或者自动为该应用程序添加使用目标内存页的环境变量,来使能该应用程序可以在操作系统内核上使用目标内存页。其中,目标内存页即可以理解为上述实施例的1g大页。
60.实际应用中,操作系统内核会预先设定哪些应用程序可以使用目标内存页,例如操作系统内核预先设置java语言的应用程序可以使用1g大页。而java语言的应用程序的命令行名称中携带有java参数,那么操作系统内核在接收到java语言的应用程序的内存分配请求的情况下,可以根据该应用程序的命令行名称确定出该应用程序满足使用1g大页的条件,此时则可以根据该应用程序的内存分配请求自动修改该应用程序的命令行参数或者自动为该应用程序添加使用1g大页的环境变量,使得后续该应用程序可以基于修改后的参数或者添加的环境变量在操作系统内核使用1g大页。
61.另外一种情况下,当操作系统内核根据应用程序的配置参数,确定应用程序不能使用1g大页的情况下,为了保证应用程序的正常运行,也会基于该应用程序的内存分配请求中携带的内存大小,为其分配与携带的内存大小对应的初始内存页(即小页)。具体实现方式如下所述:
62.所述接收携带有配置参数的应用程序的内存分配请求之后,还包括:
63.在基于所述配置参数确定所述应用程序不满足预设条件的情况下,基于所述内存分配请求中携带的内存大小,从所述普通内存区域或所述指定内存区域,为所述应用程序分配与所述内存大小对应的初始内存页,
64.其中,所述初始内存页小于所述目标内存页。
65.具体的,基于配置参数确定应用程序不满足预设条件,可以理解为基于应用程序的文件名确定该应用程序不能使用1g大页。
66.而内存分配请求中携带的内存大小,可以理解为应用程序待使用的内存大小;初始内存页可以理解为小于目标内存页的普通小页。
67.实际应用中,操作系统内核在基于应用程序的文件名确定应用程序不能使用1g大页的情况下,则基于该应用程序的内存分配请求中携带的待使用的内存大小,从cma区域和非cma区域,为该应用程序分配与该内存大小对应的小页。例如,当非cma区域中存在与给内存大小对应的连续的区域时,则从非cma区域中为该应用程序分配与该内存大小对应的小页;当非cma区域中不存在与给内存大小对应的连续的区域时,则从cma区域中为该应用程序分配与该内存大小对应的小页;当非cma区域以及cma区域中均不存在与给内存大小对应的连续的区域时,则将cma区域中被占用的内存进行迁移,腾出连续的内存区域,再从cma区域中为该应用程序分配与该内存大小对应的小页。其中,初始内存页可以理解为连续的小页,目标内存页可以理解为连续的大页。
68.本说明书实施例中,操作系统内核在接收携带有配置参数的应用程序的内存分配请求后,会基于每个应用程序的配置参数确定每个应用程序的内存分配方式,然后基于其应用程序对应的内存分配方式为其分配合理的内存使用,避免内存不足以及资源浪费。
69.步骤206:接收所述应用程序基于所述操作参数发送的目标内存页分配请求,并基于所述目标内存页分配请求中携带的所述目标内存页的数量,从所述普通内存区域和/或所述指定内存区域动态为所述应用程序分配对应数量的目标内存页。
70.具体的,操作系统内核为需要使用1g大页的应用程序修改了命令行参数或者,为其添加了使用1g大页的环境变量之后,该应用程序基于该命令行参数或该环境变量进入操作系统内核使用1g大页的操作系统运行环境,向操作系统内核发送目标内存页分配请求,其中,目标内存页可以理解为1g大页。
71.操作系统内核接收到使用1g大页的应用程序基于使用1g大页的操作系统运行环境,发送的使用1g大页的分配请求之后,基于该使用1g大页的分配请求中携带的使用1g大页的数量,从非cma区域和/或cma区域为该应用程序分配对应数量的1g大页。
72.实际应用中,具体是要从非cma区域中为该应用程序分配对应数量的1g大页,还是要从cma区域中为该应用程序分配对应数量的1g大页,或者是从非cma区域以及cma区域中为该应用程序分配对应数量的1g大页,需要根据该应用程序需要分配的1g大页的数量以及非cma区域和cma区域的可使用内存确定。具体的,所述从所述普通内存区域和/或所述指定内存区域动态为所述应用程序分配对应数量的目标内存页之前,还包括:
73.确定每个目标内存页的大小,并基于所述每个目标内存页的大小和所述目标内存页的数量,确定所述目标内存页的总大小;以及
74.确定所述普通内存区域和所述指定内存区域的可使用内存大小;
75.其中,所述目标内存页中每个目标内存页的大小相同。
76.首先,确定每个目标内存页的大小,例如目标内存页为1g大页,那么每个目标内存页的大小为1g。然后基于每个目标内存页的大小和目标内存页的数量,确定目标内存页的总大小。
77.举例说明,若每个目标内存页的大小为1g,应用程序待使用的目标内存页的数量为5个,那么基于每个目标内存页的大小和目标内存页的数量,确定目标内存页的总大小则为5g。
78.其次,确定普通内存区域和指定内存区域的可使用内存大小,可以理解为确定非cma区域的剩余可使用内存大小以及cma区域的剩余可使用内存大小。
79.本说明书实施例中,确定应用程序待使用的目标内存页的大小,以及非cma区域的剩余可使用内存大小、cma区域的剩余可使用内存大小;后续可以基于确定的这三个内存参数确定出要从哪个区域可以为该应用程序分配合理的、对应数量的目标内存页。
80.第一种情况下,在非cma区域的剩余可使用内存大小大于等于应用程序待使用的目标内存页的大小的情况下,可以从非cma区域为该应用程序分配合理的、对应数量的目标内存页;具体实现方式如下所述:
81.所述从所述普通内存区域和/或所述指定内存区域动态为所述应用程序分配对应数量的目标内存页,包括:
82.在所述普通内存区域的可使用内存大小大于等于所述目标内存页的总大小的情
况下,从所述普通内存区域为所述应用程序分配对应数量的目标内存页。
83.沿用上例,仍以目标内存页的总大小为5g为例,若普通内存区域的可使用内存大小为5.5g,则可以确定普通内存区域的可使用内存大小大于等于目标内存页的总大小,即可以从非cma区域的剩余可使用内存大小中为应用程序分配对应数量的目标内存页。
84.而1g大页的分配是需要使用连续的内存区域,因此在普通内存区域的可使用内存大小大于等于目标内存页的总大小的情况下,确保可以从普通内存区域的可使用内存中成功的为应用程序分配对应数量的目标内存页,不仅需要普通内存区域的可使用内存大小大于等于目标内存页的总大小,并且需要普通内存区域的可使用内存为连续的可使用内存。具体实现方式如下所述:
85.所述在所述普通内存区域的可使用内存大小大于等于所述目标内存页的总大小的情况下,从所述普通内存区域为所述应用程序分配对应数量的目标内存页,包括:
86.在所述普通内存区域的可使用内存大小大于等于所述目标内存页的总大小,并且所述普通内存区域的可使用内存为连续的可使用内存的情况下,从所述普通内存区域为所述应用程序分配对应数量的目标内存页。
87.第二种情况下,在非cma区域的剩余可使用内存大小小于应用程序待使用的目标内存页的大小的情况下,可以从cma区域为该应用程序分配合理的、对应数量的目标内存页;具体实现方式如下所述:
88.所述从所述普通内存区域和/或所述指定内存区域动态为所述应用程序分配对应数量的目标内存页,包括:
89.在所述普通内存区域的可使用内存大小小于所述目标内存页的总大小的情况下,从所述指定内存区域为所述应用程序分配对应数量的目标内存页。
90.沿用上例,仍以目标内存页的总大小为5g为例,若普通内存区域的可使用内存大小为4g,则可以确定普通内存区域的可使用内存大小小于目标内存页的总大小,此时,则可以从cma区域的剩余可使用内存大小中为应用程序分配对应数量的目标内存页。
91.但是,从cma区域的剩余可使用内存大小中为应用程序分配对应数量的目标内存页也会存在两种限制情况,一种是cma区域的剩余可使用内存大小大于等于目标内存页的总大小,另一个是cma区域的剩余可使用内存需要为连续的可使用内存的情况下,才可以成功的从cma区域的剩余可使用内存大小中为应用程序分配对应数量的目标内存页。具体实现方式如下所述:
92.所述在所述普通内存区域的可使用内存大小小于所述目标内存页的总大小的情况下,从所述指定内存区域为所述应用程序分配对应数量的目标内存页,包括:
93.在所述普通内存区域的可使用内存大小小于所述目标内存页的总大小的情况下,判断所述指定内存区域的可使用内存大小是否大于等于所述目标内存页的总大小,
94.若是,则在所述指定内存区域的可使用内存为连续的可使用内存的情况下,从所述指定内存区域为所述应用程序分配对应数量的目标内存页,
95.若否,则从所述普通内存区域和所述指定内存区域为所述应用程序分配对应数量的目标内存页。
96.具体的,在非cma区域的可使用内存大小小于目标内存页的总大小的情况下,要判断cma区域的可使用内存大小是否大于等于目标内存页的总大小,
97.若是,则继续判断cma区域的可使用内存是否为连续的可使用内存,
98.若是,则cma区域的剩余可使用内存大小中为应用程序分配对应数量的目标内存页,
99.若否,则结合非cma区域和cma区域,从这两个cma区域的总的剩余可使用内存中为应用程序分配对应数量的目标内存页。
100.本说明书实施例中,在非cma区域的可使用内存大小不能够为应用程序分配对应数量的目标内存页时,可以在cma区域的可使用内存为连续的可使用内存并且大于目标内存页的总大小的情况下,从cma区域为应用程序分配对应数量的目标内存页;而在cma区域不能满足上述两种条件的情况下,为了成功的给应用程序分配对应数量的目标内存页,则可以结合非cma区域和cma区域,以完成为应用程序分配对应数量的目标内存页的任务。
101.而在cma区域的可使用内存大小大于等于目标内存页的总大小,但是cma区域的可使用内存不是连续的可使用内存的情况下,为了成功的为应用程序分配对应数量的目标内存页,可以将cma区域的已使用内存进行迁移,空出连续的可使用内存为应用程序分配对应数量的目标内存页;具体实现方式如下所述:
102.所述从所述指定内存区域为所述应用程序分配对应数量的目标内存页之前,还包括:
103.在所述指定内存区域的可使用内存为不连续的可使用内存的情况下,将所述指定内存区域的已使用内存进行迁移,形成所述指定内存区域的连续的可使用内存。
104.例如,将cma区域中已使用的内存迁移聚集在一起,使得剩余的可使用内存形成一个连续的可使用的区域。
105.那么在具体实施时,若非cma区域的可使用内存大小小于目标内存页的总大小,cma区域的可使用内存大小也小于目标内存页的总大小,但是非cma区域的可使用内存大小和cma区域的可使用内存大小之和,大于等于目标内存页的总大小;即非cma区域和cma区域的可使用内存的结合,可以成功的为应用程序分配对应数量的目标内存页的情况下,则可以从非cma区域的可使用内存为应用程序分配对应一定数量的目标内存页,再从cma区域的可使用内存为应用程序分配对应一定数量的目标内存页;具体实现方式如下所述:
106.所述从所述普通内存区域和所述指定内存区域为所述应用程序分配对应数量的目标内存页,包括:
107.确定所述普通内存区域的连续的可使用内存的大小,以及所述指定内存区域的连续的可使用内存的大小;
108.基于所述普通内存区域的连续的可使用内存的大小,以及每个目标内存页的大小,确定所述普通内存区域可为所述应用程序分配的目标内存页的第一数量;
109.基于所述指定内存区域的连续的可使用内存的大小,以及每个目标内存页的大小,确定所述指定内存区域可为所述应用程序分配的目标内存页的第二数量;
110.从所述普通内存区域为所述应用程序分配所述第一数量的目标内存页,以及从所述指定内存区域为所述应用程序分配所述第二数量的目标内存页。
111.具体的,首先确定出非cma区域的连续的可使用内存的大小,以及cma区域的连续的可使用内存的大小,其中,该cma区域的连续的可使用内存的大小,包括进行内存迁移后形成的连续的可使用内存的大小。
112.然后,基于非cma区域的连续的可使用内存的大小,以及每个目标内存页的大小,确定非cma区域可以为应用程序分配的目标内存页的数量;同时,基于cma区域的连续的可使用内存的大小,以及每个目标内存页的大小,确定cma区域可以为应用程序分配的目标内存页的数量。
113.最后,从非cma区域的可使用内存中为应用程序分配一定数量的目标内存页,从cma区域的可使用内存中为应用程序分配一定数量的目标内存页,而从非cma区域和cma区域分配的目标内存页的数量之和,为该应用程序请求的待分配的目标内存页的数量。
114.举例说明,若非cma区域的连续的可使用内存的大小为1g,cma区域的连续的可使用内存的大小为4g,应用程序待使用的目标内存页的数量为5个,每个目标内存页的大小为1g。
115.基于上述方式,则可以从非cma区域的可使用内存中为应用程序分配1个目标内存页,可以从cma区域的可使用内存中为应用程序分配4个目标内存页。通过此种非cma区域和cma区域的可使用内存结合的方式,成功的为应用程序分配满足对应数量的目标内存页,提升用户体验。
116.具体实施时,为了在应用程序释放分配的目标内存页之后,操作系统内核可以准确的为非cma区域和/或cma区域释放对应数量的内存空间,可以在为应用程序分配目标内存页时,对为该应用程序分配的目标内存页的数量进行记录,以便后续可以基于记录的该应用程序的目标内存页的数量为非cma区域和/或cma区域释放对应数量的内存空间;具体实现方式如下所述:
117.所述从所述普通内存区域和/或所述指定内存区域动态为所述应用程序分配对应数量的目标内存页之后,还包括:
118.记录为所述应用程序分配的目标内存页的数量,并将为所述应用程序分配的目标内存页分配给所述应用程序使用;
119.接收所述应用程序针对所述目标内存页的释放指令,基于所述释放指令中携带的所述应用程序的应用标识,确定为所述应用程序分配的目标内存页的数量;
120.基于所述目标内存页的数量从所述普通内存区域和/或所述指定内存区域中释放所述目标内存页。
121.具体的,记录为应用程序分配的目标内存页的数量,可以理解为记录为该应用程序分配的所有目标内存页的数量。例如,该应用程序一共发送了三次目标内存页分配请求,则操作系统内核要累计记录为该应用程序分配的目标内存页的数量。并将根据应用程序的当前目标内存页分配请求为该应用程序分配的目标内存页分配给应用程序使用。
122.当应用程序发送针对所有分配的目标内存页的释放指令(如应用程序退出运行)的情况下,基于该释放指令中携带的该应用程序的应用标识,从目标内存页记录表中查询到为该应用程序分配的所有目标内存页的数量,基于该应用程序分配的所有目标内存页的数量从非cma区域和/或cma区域释放对应的目标内存页,使得释放掉的目标内存页后续可以被其他应用程序使用,形成资源的循环利用。
123.本说明书实施例提供的,所述内存分配方法基于内存需求可以将内存划分为能被可迁移的内存使用的指定内存区域和被普通小页使用的普通内存区域,在应用程序不需要使用大页时,指定内存区域可被作为普通小页使用,而应用程序需要使用大页时,可以把指
定内存区域中的内存迁移走,为应用程序腾出需要连续的大页区域,解决了不同应用程序的内存需求量不一样的问题,避免资源浪费;并且操作系统会根据有内存需求的应用程序的配置参数(如文件名)确定哪些应用程序需要使用大页,自动修改要使用大页的应用程序的命令行参数或自动给该使用大页的应用程序添加使用大页的环境变量,来使能应用程序可以在操作系统内核使用大页,实现应用程序无感知,提升用户体验。
124.综上,本说明书实施例提供的所述内存分配方法在具体实施时,操作系统内核会将尽可能多的内存预留为cma区域,使得该cma区域和可能被锁定的内存区域隔离开;对于有的应用程序要通过修改命令行参数或环境变量来使能1g大页功能的情况下,操作系统内核会自动识别出该应用程序并修改相应的命令行参数或者添加相应的环境变量来使能该应用程序使用1g大页功能;同时,操作系统内核可以按需自适应地分配和管理应用程序所需的1g大页。
125.下述结合附图3,以本说明书提供的所述内存分配方法在应用程序使用1g大页的应用场景为例,对所述内存分配方法进行进一步说明。其中,图3示出了本说明书一个实施例提供的一种内存分配方法的交互处理过程流程图,具体包括以下步骤。
126.其中,所述内存分配方法中包括系统管理员、操作系统内核、普通应用和使用1g大页的应用。本说明书实施例的内存分配方法通过结合cma区域的使用,操作系统内核按照应用的需求自动分配和释放1g大页,达到应用无感知使用1g大页的效果。
127.步骤302:系统管理员在操作系统启动之前,在操作系统启动参数配置中将尽可能多的内存预留为cma区域。
128.例如将内存的90%预留为cma区域。
129.步骤304:操作系统内核启动或者重启,根据系统管理员的操作系统启动参数配置将内存分配为cma区域和非cma区域。
130.步骤306:操作系统内核接收普通应用的内存分配请求,根据内存分配请求中携带的普通应用的文件名确定该普通应用没有1g大页需求,确定为该普通应用分配普通小页。
131.其中,普通应用可以理解为没有1g大页使用需求的应用程序,小页可以理解为上述的占用内存较小的内存页,比如4kb的内存页。
132.步骤308:操作系统内核按照正常处理流程,从cma区域或非cma区域为普通应用分配待使用内存大小的小页。
133.步骤310:操作系统内核接收使用1g大页的应用的内存分配请求,根据内存分配请求中携带的文件名确定该使用1g大页的应用有1g大页需求,自动给该应用添加参数或环境变量来使能该应用进入1g大页流程。
134.其中,使用1g大页的应用可以理解为上述使用目标内存页的应用程序。
135.步骤312:使用1g大页的应用识别操作系统内核添加的参数或环境变量之后,向操作系统内核请求分配x个1g大页。
136.步骤314:操作系统内核按照使用1g大页的应用请求分配的1g大页的数量x,自动分配出x个1g大页。
137.具体的,操作系统内核按照使用1g大页的应用请求分配的1g大页的数量x,自动分配出x个1g大页的具体分配方式,可以参见步骤316和步骤318。
138.步骤316:操作系统内核在确定非cma区域的剩余空闲连续内存足够,则从非cma区
域分配出x个1g大页。
139.步骤318:操作系统内核在确定非cma区域的剩余空闲连续内存不够,则从操作系统内核启动时预留的cma区域迁移内存,腾挪出x个1g大页。
140.步骤320:操作系统内核记录一共给该使用1g大页的应用分配的1g大页个数。
141.例如,首次分配x个,第二次分配y个,第三次分配z个,则记录给该使用1g大页的应用分配了x y z个1g大页。
142.步骤322:操作系统内核将按照使用1g大页的应用的需求分配出来的1g大页,分配给该使用1g大页的应用。
143.步骤324:该使用1g大页的应用使用操作系统内核分配出来的1g大页运行。
144.步骤326:该使用1g大页的应用使用完1g大页或应用运行完后退出时,给操作系统内核发送针对这些1g大页的释放指令。
145.步骤328:操作系统内核接收到该使用1g大页的应用发送的针对这些1g大页的释放指令后,自动在操作系统内核中释放给该使用1g大页的应用分配出的1g大页。
146.具体的,操作系统内核在处理该使用1g大页的应用释放1g大页内存时,或处理该使用1g大页的应用的退出时,自动在操作系统内核中释放给该使用1g大页的应用分配出的1g大页,如果是从非cma区域分配的,则释放回非cma区域,如果是从cma区域分配的,则释放回cma区域,这样这些内存又可以被用来申请普通小页或者是被其他使用1g大页的应用申请大页等。
147.本说明书实施例中,操作系统内核启动时,会将尽可能多的内存预留为cma区域,通过添加一个让操作系统内核自动分配尽可能多的区域到cma的功能,达到在应用程序后续分配1g大页时,基本都能在线合并出1g大页的目的。例如,一种实现方法是将系统90%的内存预留为cma区域。并且在应用程序申请1g大页时,操作系统内核可以自动按需分配和释放,通过在操作系统内核中自适应地使用cma区域来分配1g大页,达成无论应用程序需求多少个1g大页,都能按照应用程序的需求分配出相应的1g大页个数,而无需应用程序提前规划自己的1g大页需求个数,或者不同应用程序进行不同的配置,因而本说明书实施例的内存分配方法可以自适应所有使用1g大页的应用程序的需求。
148.以java为例,本说明书实施例的内存分配方法针对这种java应用的一种实现是操作系统内核检查出应用进程是java时(例如通过命令行名称等),操作系统内核自动修改该应用的命令行参数或自动给该应用添加使用1g大页的环境变量,来使能该应用在本操作系统内核上使用1g大页。并且本方案不限于1g大页,其他大页大小同样可以使用,上文只是以x86上的1g大页为例来做流程描述;也不限于linux操作系统,也可以在其他操作系统上实现。
149.综上所述,本说明书实施例的内存分配方法通过将尽可能多的内存(例如系统的90%)预留为cma内存,可以避免内存被不可移动区域锁定,导致无法腾挪出一个连续的1g大页,从而保证尽可能地分配出应用所需的1g大页个数;通过自适应地自动分配和释放应用所需的1g大页个数,达成了能自动适配任意应用的目的,而不需要每个应用都单独做配置,也避免了这个问题导致的1g大页在复杂生产环境中(多种应用,对1g大页个数的需求不一样)不太能用起来的问题;以上两点结合,本说明书实施例的内存分配方法能支撑任意不同的应用,包括有的应用不使用1g大页,使用1g大页的应用所需的1g大页个数不一样等各
种复杂场景,而且应用不需要做任何感知或管理。
150.与上述方法实施例相对应,本说明书还提供了内存分配装置实施例,图4示出了本说明书一个实施例提供的一种内存分配装置的结构示意图。如图4所示,该装置应用于操作系统,包括:
151.内存请求模块402,被配置为基于内存需求将内存分配为普通内存区域和指定内存区域,并接收应用程序发送的携带有配置参数的内存分配请求,其中,所述指定内存区域用来进行连续内存分配;
152.参数调整模块404,被配置为在基于所述配置参数确定所述应用程序满足预设条件的情况下,基于所述内存分配请求为所述应用程序调整使用目标内存页的操作参数;
153.内存页分配模块406,被配置为接收所述应用程序基于所述操作参数发送的目标内存页分配请求,并基于所述目标内存页分配请求中携带的所述目标内存页的数量,从所述普通内存区域和/或所述指定内存区域动态为所述应用程序分配对应数量的目标内存页。
154.可选地,所述装置,还包括:
155.小页分配模块,被配置为在基于所述配置参数确定所述应用程序不满足预设条件的情况下,基于所述内存分配请求中携带的内存大小,从所述普通内存区域或所述指定内存区域,为所述应用程序分配与所述内存大小对应的初始内存页,
156.其中,所述初始内存页小于所述目标内存页。
157.可选地,所述装置,还包括:
158.内存大小确定模块,被配置为确定每个目标内存页的大小,并基于所述每个目标内存页的大小和所述目标内存页的数量,确定所述目标内存页的总大小;以及
159.确定所述普通内存区域和所述指定内存区域的可使用内存大小;
160.其中,所述目标内存页中每个目标内存页的大小相同。
161.可选地,所述内存页分配模块406,进一步被配置为:
162.在所述普通内存区域的可使用内存大小大于等于所述目标内存页的总大小的情况下,从所述普通内存区域为所述应用程序分配对应数量的目标内存页。
163.可选地,所述内存页分配模块406,进一步被配置为:
164.在所述普通内存区域的可使用内存大小大于等于所述目标内存页的总大小,并且所述普通内存区域的可使用内存为连续的可使用内存的情况下,从所述普通内存区域为所述应用程序分配对应数量的目标内存页。
165.可选地,所述内存页分配模块406,进一步被配置为:
166.在所述普通内存区域的可使用内存大小小于所述目标内存页的总大小的情况下,从所述指定内存区域为所述应用程序分配对应数量的目标内存页。
167.可选地,所述内存页分配模块406,进一步被配置为:
168.在所述普通内存区域的可使用内存大小小于所述目标内存页的总大小的情况下,判断所述指定内存区域的可使用内存大小是否大于等于所述目标内存页的总大小,
169.若是,则在所述指定内存区域的可使用内存为连续的可使用内存的情况下,从所述指定内存区域为所述应用程序分配对应数量的目标内存页,
170.若否,则从所述普通内存区域和所述指定内存区域为所述应用程序分配对应数量
的目标内存页。
171.可选地,所述装置,还包括:
172.迁移模块,被配置为在所述指定内存区域的可使用内存为不连续的可使用内存的情况下,将所述指定内存区域的已使用内存进行迁移,形成所述指定内存区域的连续的可使用内存。
173.可选地,所述内存页分配模块406,进一步被配置为:
174.确定所述普通内存区域的连续的可使用内存的大小,以及所述指定内存区域的连续的可使用内存的大小;
175.基于所述普通内存区域的连续的可使用内存的大小,以及每个目标内存页的大小,确定所述普通内存区域可为所述应用程序分配的目标内存页的第一数量;
176.基于所述指定内存区域的连续的可使用内存的大小,以及每个目标内存页的大小,确定所述指定内存区域可为所述应用程序分配的目标内存页的第二数量;
177.从所述普通内存区域为所述应用程序分配所述第一数量的目标内存页,以及从所述指定内存区域为所述应用程序分配所述第二数量的目标内存页。
178.可选地,所述装置,还包括:
179.内存释放模块,被配置为:
180.记录为所述应用程序分配的目标内存页的数量,并将为所述应用程序分配的目标内存页分配给所述应用程序使用;
181.接收所述应用程序针对所述目标内存页的释放指令,基于所述释放指令中携带的所述应用程序的应用标识,确定为所述应用程序分配的目标内存页的数量;
182.基于所述目标内存页的数量从所述普通内存区域和/或所述指定内存区域中释放所述目标内存页。
183.本说明书实施例提供的所述内存分配装置,基于内存需求可以将内存划分为能被可迁移的内存使用的指定内存区域和被普通小页使用的普通内存区域,在应用程序不需要使用大页时,指定内存区域可被作为普通小页使用,而应用程序需要使用大页时,可以把指定内存区域中的内存迁移走,为应用程序腾出需要连续的大页区域,解决了不同应用程序的内存需求量不一样的问题,避免资源浪费;并且操作系统会根据有内存需求的应用程序的配置参数(如文件名)确定哪些应用程序需要使用大页,自动修改要使用大页的应用程序的命令行参数或自动给该使用大页的应用程序添加使用大页的环境变量,来使能应用程序可以在操作系统内核使用大页,实现应用程序无感知,提升用户体验。
184.上述为本实施例的一种内存分配装置的示意性方案。需要说明的是,该内存分配装置的技术方案与上述的内存分配方法的技术方案属于同一构思,内存分配装置的技术方案未详细描述的细节内容,均可以参见上述内存分配方法的技术方案的描述。
185.图5示出了根据本说明书一个实施例提供的一种计算设备500的结构框图。该计算设备500的部件包括但不限于存储器510和处理器520。处理器520与存储器510通过总线530相连接,数据库550用于保存数据。
186.计算设备500还包括接入设备540,接入设备540使得计算设备500能够经由一个或多个网络560通信。这些网络的示例包括公用交换电话网(pstn)、局域网(lan)、广域网(wan)、个域网(pan)或诸如因特网的通信网络的组合。接入设备540可以包括有线或无线的
任何类型的网络接口(例如,网络接口卡(nic))中的一个或多个,诸如ieee802.11无线局域网(wlan)无线接口、全球微波互联接入(wi

max)接口、以太网接口、通用串行总线(usb)接口、蜂窝网络接口、蓝牙接口、近场通信(nfc)接口,等等。
187.在本说明书的一个实施例中,计算设备500的上述部件以及图5中未示出的其他部件也可以彼此相连接,例如通过总线。应当理解,图5所示的计算设备结构框图仅仅是出于示例的目的,而不是对本说明书范围的限制。本领域技术人员可以根据需要,增添或替换其他部件。
188.计算设备500可以是任何类型的静止或移动计算设备,包括移动计算机或移动计算设备(例如,平板计算机、个人数字助理、膝上型计算机、笔记本计算机、上网本等)、移动电话(例如,智能手机)、可佩戴的计算设备(例如,智能手表、智能眼镜等)或其他类型的移动设备,或者诸如台式计算机或pc的静止计算设备。计算设备500还可以是移动式或静止式的服务器。
189.其中,处理器520用于执行如下计算机可执行指令,该计算机可执行指令被处理器执行时实现所述内存分配方法的步骤。
190.上述为本实施例的一种计算设备的示意性方案。需要说明的是,该计算设备的技术方案与上述的内存分配方法的技术方案属于同一构思,计算设备的技术方案未详细描述的细节内容,均可以参见上述内存分配方法的技术方案的描述。
191.本说明书一实施例还提供一种计算机可读存储介质,其存储有计算机指令,该计算机可执行指令被处理器执行时实现所述内存分配方法的步骤。
192.上述为本实施例的一种计算机可读存储介质的示意性方案。需要说明的是,该存储介质的技术方案与上述的内存分配方法的技术方案属于同一构思,存储介质的技术方案未详细描述的细节内容,均可以参见上述内存分配方法的技术方案的描述。
193.本说明书一实施例还提供一种计算机程序,其中,当所述计算机程序在计算机中执行时,令计算机执行上述内存分配方法的步骤。
194.上述为本实施例的一种计算机程序的示意性方案。需要说明的是,该计算机程序的技术方案与上述的内存分配方法的技术方案属于同一构思,计算机程序的技术方案未详细描述的细节内容,均可以参见上述内存分配方法的技术方案的描述。
195.上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
196.所述计算机指令包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read

only memory)、随机存取存储器(ram,random access memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
197.需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本说明书实施例并不受所描述的动作顺序的限制,因为依据本说明书实施例,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本说明书实施例所必须的。
198.在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
199.以上公开的本说明书优选实施例只是用于帮助阐述本说明书。可选实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施方式。显然,根据本说明书实施例的内容,可作很多的修改和变化。本说明书选取并具体描述这些实施例,是为了更好地解释本说明书实施例的原理和实际应用,从而使所属技术领域技术人员能很好地理解和利用本说明书。本说明书仅受权利要求书及其全部范围和等效物的限制。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献