一种内存分配方法以及多核并发的内存分配方法与流程

文档序号:13985344
一种内存分配方法以及多核并发的内存分配方法与流程

本发明涉及通信技术领域,尤其涉及一种内存分配方法以及多核并发的内存分配方法。



背景技术:

随着音视频编解码技术的进步,在嵌入式平台上,GPU,Camera,HDMI等都需要预留大量连续内存,而这部分内存平时不用,但是一般的做法又必须先预留,为了避免这种预留内存造成资源不能充分利用的问题,通过CMA(Contiguous Memory Allocator、连续内存分配器),即可实现不预留内存,这些内存平时的应用程序是可用的,只有当需要的时候才被分配给Camera,HDMI等设备的驱动程序使用,CMA现已成为嵌入式平台上驱动使用大量内存的最佳解决方案。CMA可通过特殊标记的迁移类型,能在驱动程序不使用内存的时候将内存共享给应用程序使用,在驱动需要内存的时候借助内核的内存回收、迁移机制为驱动整理出足够的连续内存出来。它很好的平衡了应用和驱动程序对内存的需求,大大缓解了内存不足带来的卡顿,不流畅等负面效果。但是这种解决方案存在以下问题,当内存的使用率较高时,通过CMA将内存共享给应用程序使用时,应用程序提供的数据可能提供给块设备驱动层处理,如此便造成了驱动程序在通过CMA分配连续内存时需要等待较长的时间,另外还存在CMA将内存共享给应用程序使用时,如果当前的应用程序需要执行大量的输入输出操作,则CMA为驱动程序分配连续内存所需占用的时间会更长。



技术实现要素:

针对现有技术中CMA为驱动程序分配连续内存存在的上述问题,现提供一种旨在实现去除占用CMA分配的连续内存时间较长的应用程序,进而可以通过CMA为驱动程序提供更快的分配时间的内存分配方法以及多核并发的内存分配方法。

具体技术方案如下:

一种内存分配方法,应用于嵌入式系统中,其中,提供一内核模块以及多个应用程序;

包括以下步骤:

步骤S1、获取所述应用程序的第一内存分配请求;

步骤S2、所述内核模块判断所述第一内存分配请求中否存在预设的筛选标志;

步骤S3、所述内核模块在存在所述筛选标志时,禁止为当前所述应用程序分配连续内存分配器管理的内存。优选的,所述筛选标志包括:

第一标志,用以表示所述应用程序将数据提供给块设备进行处理;

第二标志,用以表示所述应用程序执行的写操作。

优选的,所述内存分配请求为一标志集合,所述标志集合用以指定内存分配的标志和控制内存分配的行为。

优选的,还包括多个驱动程序,当所述内核模块获取到所述驱动模块的第二内存分配请求时,执行以下步骤:

步骤A1、判断所述连续内存分配器分配的连续内存是否被其它所述应用程序占用;

若是,执行步骤A2;

若否,执行步骤A3;

步骤A2、将所述应用程序从所述连续内存中迁移至新分配的内存中;

步骤A3、所述内核模块根据所述驱动模块的内存分配请求,为所述驱动模块分配连续内存。

还包括一种多核并发的内存配置方法,其特征在于,包括上所述的内存分配方法,具体包括以下步骤:

所述嵌入式系统中提供数量为M个的处理单元,当接收的是所述驱动模块发送的所述第二内存分配请求时,包括以下步骤:

步骤B1、根据所述第二内存分配请求获取需要分配的连续内存的数量;

步骤B2、将分配的所述连续内存的数量均分为N份;

步骤B3、将所述第二内存分配请求发送至每一个所述处理单元;

步骤B4、每个所述处理单元根据所述第二内存分配请求,分配所述N份中每一份对应的所述连续内存的数量。

优选的,M=N。

优选的,M=4,N=4。

上述技术方案具有如下优点或有益效果:通过内存分配方法,可以将占用连续内存分配器分配的连续内存时间较长的应用程序筛选去除,进而可以对驱动程序提供更快的分配连续内存的时间,另一方面通过多个处理单元同时为驱动程序分配对应的连续内存,可以使分配的效率更高。

附图说明

参考所附附图,以更加充分的描述本发明的实施例。然而,所附附图仅用于说明和阐述,并不构成对本发明范围的限制。

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

图2为本发明一种内存分配方法的实施例中,关于应用程序迁移的实施例的流程图;

图3为本发明一种内存分配方法的实施例中,关于传统的默认CMA分配方式与本发明的分配方式对比的折线图;

图4为本发明中一种多核并发的内存配置方法的实施例的流程图;

图5为本发明中一种多核并发的内存配置方法的实施例中,关于不同个数的处理单元执行内存分配所需的时间的柱形图。

具体实施方式

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

需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。

下面结合附图和具体实施例对本发明作进一步说明,但不作为本发明的限定。

本发明的技术方案中包括一种内存分配方法。

一种内存分配方法的实施例,应用于嵌入式系统中,其中,提供一内核模块以及多个应用程序;

如图1所示,包括以下步骤:

步骤S1、获取所述应用程序的第一内存分配请求;

步骤S2、所述内核模块判断所述第一内存分配请求中否存在预设的筛选标志;

步骤S3、所述内核模块在存在所述筛选标志时,禁止为当前的应用程序分配连续内存分配器管理的内存。但可以分配其它类型的内存给当前的应用程序。

针对现有技术中,存在的对CMA分配的连续内存占用时间较长的应用程序,例如,需要执行大量的输入输出的应用程序、提供的数据需要块设备驱动层进行处理的应用程序等,一旦这些应用程序占用CMA分配的连续内存之后,若此时需要为驱动程序分配连续内存时,由于此时应用程序正占用CMA分配的连续内存,而且对应用程序不能马上执行迁移操作,因为马上执行迁移出的操作可能导致应用程序出错,所以现有的做法是等待应用程序执行完毕之后,再通过CMA为驱动程序分配相应的连续内存,因此会造成CMA等待较长的时间,直接的影响包括解码过程中造成的延迟,给使用者带来较差的体验。

本发明中,通过对存在占用CMA分配的连续内存时间较长的应用程序进行筛选去除,需要说明的是此处的筛选去除并不是不执行该应用程序,而是该应用程序不会使用CMA分配的连续内存,而是使用其它方式分配的内存,如此操作带来的有益效果是可当需要为驱动程序分配连续内存时,CMA可快速执行分配操作,而不需要耗费较长的等待时间。

在一种较优的实施方式中,所述筛选标志包括:

第一标志,第一标志可为GFP_BDEV标志,用以表示所述应用程序将数据提供给块设备进行处理;

第二标志,第二标志可为GFP_WRITE标志,用以表示所述应用程序执行的写操作。

在一种较优的实施方式中,所述内存分配请求为一标志集合,该标志集合可为gfp_mask参数,所述gfp_mask参数用以指定内存分配的标志和控制内存分配的行为。

上述技术方案中,当内核模块接收到应用程序的第一内存分配请求之后,首选是判断gfp_mask参数中是否包含预设的筛选标志,即上述的GFP_BDEV标志或者GFP_WRITE标志,若存在时则表示当前的应用程序会对CMA分配的连续内存占用较长的时间。

需要说明的是,任何应用程序和驱动程序分配内存的时候,都必须提供分配标志参数,这个参数叫做gfp_mask;

gfp_mask可包含GFP_BDEV/GFP_WRITE甚至GFP_FS/GFP_IO等标志中的一个或者多个。

在一种较优的实施方式中,还包括多个驱动程序,当所述内核模块获取到所述驱动模块的第二内存分配请求时,如图2所示,执行以下步骤:

步骤A1、判断所述连续内存分配器分配的连续内存是否被其它所述应用程序占用;

若是,执行步骤A2;

若否,执行步骤A3;

步骤A2、将所述应用程序从所述连续内存中迁移至新分配的内存中;

步骤A3、所述内核模块根据所述驱动模块的内存分配请求,为所述驱动模块分配连续内存。

上述技术方案中,将应用程序从当前的CMA分配的连续内存中迁移至新分配的内存中的方法,可通过相应的迁移机制进行处理。

如图3所示,左边竖轴表示现有的默认分配方式,右边竖轴为本发明中的分配方式,从图中可知,当默认分配程序存在大量文件操作时,200M左右的内存现有的分配需要耗时2秒至30秒不等,而采取了本本发明中分配方法可以在同等条件下将CMA的分配时间降低在600ms以下。

本发明的技术方案中还包括一种多核并发的内存配置方法。

一种多核并发的内存分配方法的实施例,其中,包括上所述的内存分配方法,如图4所示,具体包括以下步骤:

所述嵌入式系统中提供数量为M个的处理单元,当接收的是所述驱动模块发送的所述第二内存分配请求时,包括以下步骤:

步骤B1、根据所述第二内存分配请求获取需要分配的连续内存的数量;

步骤B2、将分配的所述连续内存的数量均分为N份;

步骤B3、将所述第二内存分配请求发送至每一个所述处理单元;

步骤B4、每个所述处理单元根据所述第二内存分配请求,分配所述N份中每一份对应的所述连续内存的数量。

在一种较优的实施方式中,M=N。

在一种较优的实施方式中,M=4,N=4。

上述技术方案中,通过一具体的实施例进行说明,如处理单元个数位为4时,当驱动程序所需分配的连续内存的数量为500M时,首选将该数量分为4等份即每一份为125M,当每个处理单元接收到第二内存分配请求时,每个处理单元同时分配一125M的连续内存,即可实现为驱动程序提供500M的连续内存,通过多核即过个处理单元(CPU)同时执行,可使CMA更快的完成连续内存的分配。

如图5所示,Y轴代表CMA分配内存的时间,X轴表示处理单元的个数,通过对比不同个数的处理单元,可以得出采用多核并发的内存分配方法,随着处理单元个数的增加处理的时间相应的减少。

以上所述仅为本发明较佳的实施例,并非因此限制本发明的实施方式及保护范围,对于本领域技术人员而言,应当能够意识到凡运用本发明说明书及图示内容所作出的等同替换和显而易见的变化所得到的方案,均应当包含在本发明的保护范围内。

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