基于ION分配器的内存分配方法、装置和电子设备与流程

文档序号:31415614发布日期:2022-09-03 13:52阅读:338来源:国知局
基于ION分配器的内存分配方法、装置和电子设备与流程
基于ion分配器的内存分配方法、装置和电子设备
技术领域
1.本技术属于内存管理技术领域,具体涉及一种基于ion分配器的内存分配方法、装置、电子设备和可读存储介质。


背景技术:

2.智能终端设备的发展和普及给人们的生活和工作带来了极大的便利,随着应用占用内存的不断扩大,终端设备可用内存变得越来越低。当终端设备中的目标应用需要申请大量内存时,例如相机启动、拍照、录像等场景,对内存申请的实时性要求特别高,会发生内存申请过慢的情况。
3.如此,导致终端设备出现相机启动慢,拍照卡顿,录像卡顿、掉帧等问题,极大影响了用户的使用体验。


技术实现要素:

4.本技术实施例的目的是提供一种基于ion分配器的内存分配方法、装置、电子设备和可读存储介质,能够解决现有大量内存申请速度慢的问题。
5.第一方面,本技术实施例提供了一种基于ion分配器的内存分配方法,该方法包括:
6.在终端设备启动目标应用的情况下,在所述终端设备的用户空间确定所述目标应用所需内存;
7.在所述用户空间,向所述终端设备的内核空间发送内存扩充请求,所述内存扩充请求中包括所述目标应用所需内存;
8.在所述内核空间,基于所述内存扩充请求从所述系统内存扩充所述目标应用所需内存至所述终端设备ion分配器的内存池中,并向所述用户空间返回扩充完成命令;
9.在所述用户空间,在接收到所述扩充完成命令后向所述内存池申请内存以用于所述目标应用。
10.第二方面,本技术实施例提供了一种基于ion分配器的内存分配装置,该装置包括:
11.确定模块,用于在终端设备启动目标应用的情况下,在所述终端设备的用户空间确定所述目标应用所需内存;
12.发送模块,用于在所述用户空间,向所述终端设备的内核空间发送内存扩充请求,所述内存扩充请求中包括所述目标应用所需内存;
13.扩充模块,用于在所述内核空间,基于所述内存扩充请求从所述系统内存扩充所述目标应用所需内存至所述终端设备ion分配器的内存池中,并向所述用户空间返回扩充完成命令;
14.申请模块,用于在所述用户空间,在接收到所述扩充完成命令后向所述内存池申请内存以用于所述目标应用。
15.第三方面,本技术实施例提供了一种电子设备,该电子设备包括处理器和存储器,所述存储器存储可在所述处理器上运行的程序或指令,所述程序或指令被所述处理器执行时实现如第一方面所述的方法的步骤。
16.第四方面,本技术实施例提供了一种可读存储介质,所述可读存储介质上存储程序或指令,所述程序或指令被处理器执行时实现如第一方面所述的方法的步骤。
17.第五方面,本技术实施例提供了一种芯片,所述芯片包括处理器和通信接口,所述通信接口和所述处理器耦合,所述处理器用于运行程序或指令,实现如第一方面所述的方法。
18.第六方面,本技术实施例提供一种计算机程序产品,该程序产品被存储在存储介质中,该程序产品被至少一个处理器执行以实现如第一方面所述的方法。
19.在本技术实施例中,通过在终端设备启动目标应用的情况下,在所述终端设备的用户空间确定所述目标应用所需内存;在所述用户空间,向所述终端设备的内核空间发送内存扩充请求,所述内存扩充请求中包括所述目标应用所需内存;在所述内核空间,基于所述内存扩充请求从所述系统内存扩充所述目标应用所需内存至所述终端设备ion分配器的内存池中,并向所述用户空间返回扩充完成命令;在所述用户空间,在接收到所述扩充完成命令后向所述内存池申请内存以用于所述目标应用,由此可建立底层内存分配与上层应用的通讯,支持申请大量内存的多媒体应用能够提前扩充内存,保证内存的申请速度,避免应用启动慢、操作卡顿等问题。
附图说明
20.图1是本技术实施例的基于ion分配器的内存分配方法的流程示意图。
21.图2是本技术第一实施例的基于ion分配器的内存分配方法的流程示意图。
22.图3是本技术第二实施例的基于ion分配器的内存分配方法的流程示意图。
23.图4是本技术第三实施例的基于ion分配器的内存分配方法的流程示意图。
24.图5是本技术第四实施例的基于ion分配器的内存分配方法的流程示意图。
25.图6是本技术实施例的ion内存分配器的架构示意图。
26.图7是本技术实施例的基于ion分配器的内存分配装置的结构方框图。
27.图8是本技术实施例的电子设备的结构方框图。
28.图9是实现本技术实施例的一种电子设备的硬件结构示意图。
具体实施方式
29.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚地描述,显然,所描述的实施例是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员获得的所有其他实施例,都属于本技术保护的范围。
30.本技术的说明书和权利要求书中的术语“第一”、“第二”等是用于区别类似的对象,而不用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便本技术的实施例能够以除了在这里图示或描述的那些以外的顺序实施,且“第一”、“第二”等所区分的对象通常为一类,并不限定对象的个数,例如第一对象可以是一个,也可以是多个。此外,说明书以及权利要求中“和/或”表示所连接对象的至少其中之一,字符“/”,一般表示前后关联对象是一种“或”的关系。
31.下面结合附图,通过具体的实施例及其应用场景对本技术实施例提供的基于ion分配器的内存分配方法进行详细地说明。
32.图1是本技术实施例的基于ion分配器的内存分配方法的流程示意图。如图1所示,本技术实施例的基于ion分配器的内存分配方法包括以下步骤102至步骤108。
33.步骤102,在终端设备启动目标应用的情况下,在所述终端设备的用户空间确定所述目标应用所需内存。
34.目标应用为终端设备上安装的各种应用,尤其是启动和执行操作需要申请大量内存的应用,例如相机等多媒体应用。
35.可选地,在所述终端设备的用户空间确定所述目标应用所需内存,包括:在所述目标应用为预设类型的应用的情况下,在所述终端设备的用户空间确定所述目标应用所需内存。
36.不同类型的应用,所需的内存大小不同。本技术实施例中,目标应用为启动和执行操作需要申请大量内存的应用。也就是说,对于需要申请大量内存的应用,可预先在终端设备的用户空间确定应用所需内存。
37.在目标应用启动后,如果目标应用具有多种操作场景,例如目标应用为相机,相机包括拍照场景,或者录像场景,或者延迟摄影场景等等多种操作场景,则在上层用户空间基于应用当前选择的场景,确定目标应用执行该场景操作所需的内存大小。
38.例如,当相机启动进入录像预览前,此时用户空间会确定此场景下录像所需的内存。4k 60帧的录像场景,一般要求每5毫秒申请16mb内存,并且需要申请的内存总量约2gb。
39.同样地,对于拍照场景,可以在相机启动进入拍照预览前,确定相机所需的内存。
40.对于操作场景只有一种的目标应用,则在目标应用启动后,直接计算该应用将要使用的内存使用量。对于具有多种操作场景的目标应用,先识别不同的操作场景,再计算该应用将要使用的内存使用量。
41.步骤104,在所述用户空间,向所述终端设备的内核空间发送内存扩充请求,所述内存扩充请求中包括所述目标应用所需内存。
42.在上述确定目标应用所需的内存步骤之后,终端设备的上层用户空间可以下发内存扩充请求到底层的内核空间,以让内核空间提前把目标应用所需的内存准备好。
43.步骤106,在所述内核空间,基于所述内存扩充请求从所述系统内存扩充所述目标应用所需内存至所述终端设备ion分配器的内存池中,并向所述用户空间返回扩充完成命令。
44.可选地,在所述内核空间,基于所述内存扩充请求从所述系统内存扩充所述目标应用所需内存至所述终端设备ion分配器的内存池中,包括:响应所述内存扩充请求,唤醒所述内核空间的目标线程;将所述目标线程绑定至所述终端设备的cpu大核;通过所述cpu大核从所述系统内存申请扩充内存,以扩充所述目标应用所需内存至所述内存池中。
45.在该步骤中,内核空间收到内存扩充请求之后,用于内存扩充的线程被唤醒,并且此线程被绑定cpu大核,将会从系统内存(buddy系统)申请内存以扩充内存到ion分配器的内存池(pool),从而以最快速度将ion分配器的内存池中的内存扩充到目标应用的使用要求。并在内存扩充完成后,向用户空间返回对应命令。
46.步骤108,在所述用户空间,在接收到所述扩充完成命令后向所述内存池申请内存以用于所述目标应用。
47.上层用户空间在接收到内存扩充完成命令后开始申请内存,此时直接从ion分配器的内存池中拿取内存,并用于目标应用,则能够满足目标应用在需要大量内存场景的高速度与高用量的内存要求。
48.在一个实施例中,可选地,在所述目标应用启动的情况下,将扩充至所述内存池中的内存配置为所述目标应用的专属内存,所述专属内存为不可回收内存。
49.由此,可保证扩充后的内存在目标应用打开期间不能够被其他应用申请并使用,保证只有该目标应用能够使用,并且此扩充内存不会被系统内存回收掉。
50.通过ion分配器内存扩充功能,建立底层内存分配与上层应用的通讯,支持目标应用能够提前扩充内存,保证内存的申请速度。从而能够加速目标应用的启动速度,使得目标应用能够在最快速度下申请到内存,可以有效的减少需要快速大量使用ion内存的应用申请内存的场景下,由于内存申请慢导致的卡顿和丢帧问题。
51.现在参考图2,图2是本技术第一实施例的基于ion分配器的内存分配方法的流程示意图,该实施例为图1的具体示例,其中目标应用以相机为例。
52.如图2所示,包括以下步骤:
53.步骤202,上层用户空间打开相机;
54.步骤204,当相机进入对应的场景模式,识别不同的操作场景,例如拍照或录像场景;
55.步骤206,计算相机在该操作场景下所需使用的内存用量;
56.步骤208,上层下发携带所需内存用量的charge(内存扩充)请求到底层的内核空间;
57.步骤210,基于该请求通知底层的kwork内核线程进行内存扩充;
58.步骤212,kwork内核线程被绑定cpu大核,以加速从buddy申请内存charge内存;
59.步骤214,内存扩充后设置内存不被shrink(回收);
60.步骤216,设置扩充内存只允许相机申请使用。
61.可选地,在一个实施例中,该方法还包括:
62.在所述ion分配器存在内存释放时,监测所述终端设备的cpu卡顿时间和所述系统内存的内存申请卡顿时间;
63.在所述系统内存的内存申请卡顿时间大于第一阈值的情况下,直接释放所述ion分配器的内存池中的内存;
64.在所述系统内存的内存申请卡顿时间小于或等于第一阈值且所述cpu卡顿时间大于第二阈值的情况下,直接释放所述ion分配器的内存池中的内存;
65.在所述系统内存的内存申请卡顿时间小于或等于第一阈值且所述cpu卡顿时间小于或等于第二阈值的情况下,延时释放所述ion分配器的内存池中的内存。
66.目标应用申请内存的时候,卡顿时间越长说明系统压力越大,内存申请卡顿时间单位是μs。
67.在该实施例中,使用压力停顿信息(pressure stall information,psi)作为指标来衡量硬件资源,例如cpu、内存和io的压力情况,根据系统的psi监测cpu和内存的压力值
作为压力大小的参考。
68.psi量化了由于硬件资源紧张造成的任务执行中断,统计了系统中任务等待硬件资源的时间。内存申请时停顿的时间越长,说明资源面临的压力越大。
69.在一个实施例中,第一阈值例如为60-70ms,第二阈值例如为60-70ms。
70.下面结合图3,对本技术的内存释放实施例进行示例说明。
71.如图3所示,包括以下步骤:
72.步骤302,ion分配器释放(free)内存;
73.步骤304,释放过程总会监测终端设备当前的系统内存压力和cpu占用情况;
74.步骤306,在监测到内存压力大,或者内存压力小并且cpu占用高的情况下,进入步骤308;
75.步骤308,会直接释放内存;
76.步骤310,若上层应用申请的内存来源于buddy系统,则释放内存回到buddy系统;
77.步骤312,若上层应用申请的内存来源于ion分配器的内存池(ion pool),则释放内存回到内存池;
78.步骤314,在监测到系统内存压力小,并且cpu占用低的情况下,进入步骤316;
79.步骤316,此时将走defer free的流程,将内存释放任务加入一个defer free链表,从而在下次内存申请时去唤醒释放线程以延时释放该内存。
80.由此,通过采用上述实施例的不同场景的内存释放方式,可以增加对ion分配器内存的释放速度。通过识别不同的内存压力场景,可在兼顾内存释放速度的同时减少cpu资源竞争。
81.可选地,在一个实施例中,该方法还包括:
82.监测所述ion分配器的内存池中的内存规格;
83.在所述内存低于预设阈值的情况下,根据所述ion分配器的内存池中内存规格,按照预设顺序申请所述系统内存向所述内存池填充内存;
84.其中,所述内存规格包括order1、order2、order4及order9,所述order4和order9配置放弃内存申请标识,所述放弃内存申请标识用于告知所述ion分配器在未申请到请求规格内存的情况下,放弃内存申请。
85.order1、order2、order4及order9为表述内存大小的内存规格,其中内存规格对应的内存大小排序为order9》order4》order2》order1。在该实施例中,预设顺序为order9先于order4,order4先于order2,order2先于order1,也即优先申请大规格的内存,在申请不到对应的大规格连续内存后,再依次申请小规格的内存。
86.目标大规格内存,例如order9、order4依次申请后,剩余的系统内存为碎片化的少量内存,如果仍使用大规格内存进行申请并填充,则大部分情况下会存在内存申请失败。使用小规格的order2、order1依次申请碎片化内存,可以增加内存申请和填充成功的概率。
87.另外,通过为order4、order9的内存申请配置放弃内存申请标识gfp_noretry,则可以在大规格内存申请失败的情况下,及时切换为使用小规格内存进行申请,如此可以避免大规格内存在申请失败后仍多次去尝试申请,提高内存申请及填充的效率。
88.可选地,在一个实施例中,所述在接收到所述扩充完成命令后向所述内存池申请内存以用于所述目标应用之后,还包括:
89.确定向所述内存池申请用于所述目标应用的内存类型和内存规格,其中,所述内存池的内存类型包括缓冲内存和非缓冲内存;
90.在申请的所述内存类型为缓冲内存且所述申请的内存超出所述内存池中缓冲内存的情况下,从所述内存池中的非缓冲内存迁移目标非缓冲内存至所述缓冲内存中;
91.在申请的所述内存类型为非缓冲内存且所述申请的内存超出所述内存池中非缓冲内存的情况下,从所述内存池中的缓冲内存迁移目标缓冲内存至所述非缓冲内存中。
92.该实施例中,ion分配器的内存池中包括两种类型的内存,缓冲内存(cache)和非缓冲内存(uncache),申请的内存规格即申请的内存大小。
93.ion分配器的内存池中两种类型的内存池,缓冲内存(cache pool)和非缓冲内存(uncache pool)可以互通,如果上层应用申请的目标内存规格的内存大小,超出申请的目标内存类型的内存池中的内存存量,则可以将内存池中另一内存类型的内存池中的内存迁移至目标内存类型的内存池中,以满足上层的内存申请所需的内存大小。
94.下面结合图4,对本技术的内存迁移实施例进行示例说明。
95.如图4所示,包括以下步骤:
96.步骤402,启动目标应用时,向ion分配器的内存池申请目标内存类型的内存,例如,缓冲内存或非缓冲内存;
97.步骤404,在目标内存类型为非缓冲内存时,若申请的内存规格对应的内存量很大,导致uncache pool的内存被迅速被消耗,内存不足时,但是cache pool中还有很多内存,此时可以将cache pool中内存迁移加入到uncache pool中,满足uncache pool的申请;
98.步骤406,反之当cache pool中的内存不足时,可以将uncache pool中的内存迁移到cache pool中。
99.由此,通过打通cache pool和uncache pool的互通,达到ion分配器内存使用的最大化,增加系统的可用内存。
100.可选地,在一个实施例中,该方法还包括:
101.在所述终端设备开机时,读取所述ion分配器的内存配置文件,所述内存配置文件用于在所述ion分配器的内存池中配置第一预留内存;
102.基于所述内存配置文件,从所述终端设备的系统内存填充所述第一预留内存至所述内存池中,其中,所述第一预留内存基于所述终端设备的可用内存确定。
103.预留内存被锁定不被释放回收,只有当系统内存压力特别大时才根据系统压力的等级释放部分或全部预留内存,当系统内存压力恢复时,将预留内存恢复到原始值。
104.预留内存大小可用基于终端设备开机的可用内存大小确定,例如,初始化的预留内存大小为终端设备开机的可用内存除以某个常数k,k的取值为8-10,也就是初始可以将终端设备开机的可用内存的10%左右提前预留出来。
105.随着终端设备的使用,不同终端设备使用的内存压力可能也不一样,可用内存大小也会不一样,所以内存池的预留内存大小需要跟据终端设备使用的具体情况做出动态的调整。
106.可选地,该方法还包括:监测所述终端设备的第一可用内存;基于所述第一可用内存,更新所述内存配置文件。
107.所述监测所述终端设备的第一可用内存,包括:以预设时间间隔统计所述终端设
备在开机后预设时长内的可用内存;计算所述预定时长内的平均可用内存,得到所述终端设备的第一可用内存。
108.所述基于所述第一可用内存,更新所述内存配置文件,包括:获取所述内存配置文件中所述预留内存对应的所述终端设备的历史可用内存;在所述第一可用内存与所述历史可用内存的变化值大于预设阈值的情况下,基于所述第一可用内存更新所述内存配置文件中的第一预留内存。
109.例如,以每10-30分钟统计一次终端设备的可用内存的状态,每12小时或24小时的时长内取一次可用内存均值。以一天24小时计算一次平均可用内存为例,计算当天的平均可用内存值与前一天的平均可用内存值的变化绝对值。判断变化绝对值是否在设置的预设阈值内,如果超过预设阈值,则用当前的平均可用内存值去更新前一天的平均可用内存值,也即终端设备的可用内存,从而基于当前终端设备的可用内存,更新内存配置文件中对应的预留内存。
110.下次终端设备重启时则去读取最新的内存配置文件,初始化内存池预留的内存。
111.在另一个实施例中,还包括:
112.接收服务器发送的配置命令,所述配置命令携带配置的第二预留内存;
113.基于所述配置的第二预留内存,更新所述配置文件中的第一预留内存。
114.在该实施例中,为了方便及时地对内存池的大小做出调整,也可以通过服务器根据终端设备的机型内存大小等配置预留内存,下发更改内存池的内存配置文件。服务器配置的优先级要高于上述实施例基于监测终端设备的可用内存的配置,当二者的预留内存值同时存在时,先取服务器配置的预留内存大小。
115.可选地,所述从所述终端设备的系统内存填充所述第一预留内存至所述内存池中之后,还包括:
116.监测所述系统内存的内存压力;
117.基于所述系统内存的内存压力等级,将所述内存池中目标预留内存回收至所述系统内存;
118.在所述系统内存的内存压力低于预设阈值的情况下,将回收至所述系统内存的预留内存填充至所述内存池。
119.该实施例中,预留内存可在系统内存压力特别大时才根据系统压力的等级释放部分或全部预留内存,当系统内存压力恢复时,将预留内存恢复到原始值。
120.系统压力的等级越大,释放的预留内存越多,在系统出现内存用完了(out of memory,oom)之前,则释放全部预留内存,防止系统崩溃。
121.下面结合图5,对本技术的预留内存配置及释放的实施例进行示例说明。
122.如图5所示,包括以下步骤:
123.步骤502,在配置文件中预留内存(pool);
124.步骤504,手机开机启动读取配置文件;
125.步骤506,获取预留pool的大小;
126.步骤508,根据预留大小初始化ion内存分配器池内存大小(pool size);
127.步骤510,锁定pool的内存大小不被回收;
128.步骤512,大应用申请大量内存产生内存压力;
129.步骤514,根据压力等级释放部分内存;
130.步骤516,系统发射oom前释放全部内存;
131.步骤518,释放内存回收到buddy系统。
132.步骤504中配置文件可以基于步骤520至步骤532的方式进行更新,也可以基于步骤534至步骤538的方式进行更新,具体如下:
133.步骤520,建立终端设备可用内存与预留pool的对应关系;
134.步骤522,根据用户使用习惯动态调整预留pool的大小;
135.步骤524,统计用户的平均可用内存水平;
136.步骤526,每10分钟统计一次,每天取平均值;
137.步骤528,当天均值与上一天均值的差值超过设定阈值;
138.步骤530,根据pool大小与可用内存对应关系计算pool size;
139.步骤532,更新pool大小的配置文件。
140.步骤534,服务器下发配置命令;
141.步骤536,下发配置pool的大小;
142.步骤538,根据配置命令修改手机中的pool大小的配置文件。
143.由此,在该实施例中,通过为ion分配器增加预留内存,可以提高目标应用的起启动速度,并且预留内存在系统内存压力大的时候能够被回收,预留内存的大小能够根据不同用户及使用习惯自适应更新,还支持服务器下发预留内存的大小配置。
144.在ion分配器同时具有上述各功能的情况下,对应的ion分配器的架构如图6所示,图6是本技术实施例的基于ion分配器的内存分配方法对应的ion内存分配器的架构示意图。
145.如图6所示,ion内存分配器可以实现以下功能:功能

内存扩充;功能

不同场景内存释放;功能

多个order申请填充;功能

不同类型内存互通;功能

内存预留。
146.在本技术实施例中,通过在终端设备启动目标应用的情况下,在所述终端设备的用户空间确定所述目标应用所需内存;在所述用户空间,向所述终端设备的内核空间发送内存扩充请求,所述内存扩充请求中包括所述目标应用所需内存;在所述内核空间,基于所述内存扩充请求从所述系统内存扩充所述目标应用所需内存至所述终端设备ion分配器的内存池中,并向所述用户空间返回扩充完成命令;在所述用户空间,在接收到所述扩充完成命令后向所述内存池申请内存以用于所述目标应用,由此建立底层内存分配与上层应用的通讯,支持目标应用能够提前扩充内存,保证内存的申请速度。从而能够加速目标应用的启动速度,使得目标应用能够在最快速度下申请到内存,可以有效的减少需要快速大量使用ion内存的应用申请内存的场景下,由于内存申请慢导致的卡顿和丢帧问题。
147.本技术实施例提供的基于ion分配器的内存分配方法,执行主体可以为基于ion分配器的内存分配装置。本技术实施例中以基于ion分配器的内存分配装置执行基于ion分配器的内存分配方法为例,说明本技术实施例提供的基于ion分配器的内存分配装置。
148.本技术实施例中的基于ion分配器的内存分配装置可以是电子设备,也可以是电子设备中的部件,例如集成电路、或芯片。该电子设备可以是终端,也可以为除终端之外的其他设备。示例性的,电子设备可以为手机、平板电脑、笔记本电脑、掌上电脑、车载电子设备、移动上网装置(mobile internet device,mid)、增强现实(augmented reality,ar)/虚
拟现实(virtual reality,vr)设备、机器人、可穿戴设备、超级移动个人计算机(ultra-mobile personal computer,umpc)、上网本或者个人数字助理(personal digital assistant,pda)等,还可以为个人计算机(personal computer,pc)等,本技术实施例不作具体限定。
149.本技术实施例中的基于ion分配器的内存分配装置可以为具有操作系统的装置。该操作系统可以为安卓(android)操作系统,可以为ios操作系统,还可以为其他可能的操作系统,本技术实施例不作具体限定。
150.本技术实施例提供的基于ion分配器的内存分配装置能够实现图1至图6的方法实施例实现的各个过程,为避免重复,这里不再赘述。
151.图7是本技术实施例的基于ion分配器的内存分配装置的结构方框图,参考图7,本技术实施例的基于ion分配器的内存分配装置800包括:
152.确定模块820,用于在终端设备启动目标应用的情况下,在所述终端设备的用户空间确定所述目标应用所需内存;
153.发送模块840,用于在所述用户空间,向所述终端设备的内核空间发送内存扩充请求,所述内存扩充请求中包括所述目标应用所需内存;
154.扩充模块860,用于在所述内核空间,基于所述内存扩充请求从所述系统内存扩充所述目标应用所需内存至所述终端设备ion分配器的内存池中,并向所述用户空间返回扩充完成命令;
155.申请模块880,用于在所述用户空间,在接收到所述扩充完成命令后向所述内存池申请内存以用于所述目标应用。
156.可选地,确定模块820具体用于:
157.在所述目标应用为预设类型的应用的情况下,在所述终端设备的用户空间确定所述目标应用所需内存。
158.可选地,扩充模块860具体用于:
159.响应所述内存扩充请求,唤醒所述内核空间的目标线程;
160.将所述目标线程绑定至所述终端设备的cpu大核;
161.通过所述cpu大核从所述系统内存申请扩充内存,以扩充所述目标应用所需内存至所述内存池中。
162.可选地,内存分配装置800还包括:
163.专属内存配置模块,用于在所述目标应用启动的情况下,将扩充至所述内存池中的内存配置为所述目标应用的专属内存,所述专属内存为不可回收内存。
164.在本技术实施例中,通过在终端设备启动目标应用的情况下,在所述终端设备的用户空间确定所述目标应用所需内存;在所述用户空间,向所述终端设备的内核空间发送内存扩充请求,所述内存扩充请求中包括所述目标应用所需内存;在所述内核空间,基于所述内存扩充请求从所述系统内存扩充所述目标应用所需内存至所述终端设备ion分配器的内存池中,并向所述用户空间返回扩充完成命令;在所述用户空间,在接收到所述扩充完成命令后向所述内存池申请内存以用于所述目标应用,由此建立底层内存分配与上层应用的通讯,支持目标应用能够提前扩充内存,保证内存的申请速度。从而能够加速目标应用的启动速度,使得目标应用能够在最快速度下申请到内存,可以有效的减少需要快速大量使用
ion内存的应用申请内存的场景下,由于内存申请慢导致的卡顿和丢帧问题。
165.可选地,内存分配装置800还包括:
166.时间监测模块,用于在所述ion分配器存在内存释放时,监测所述终端设备的cpu卡顿时间和所述系统内存的内存申请卡顿时间;
167.释放模块,用于在所述系统内存的内存申请卡顿时间大于第一阈值的情况下,直接释放所述ion分配器的内存池中的内存;在所述系统内存的内存申请卡顿时间小于或等于第一阈值且所述cpu卡顿时间大于第二阈值的情况下,直接释放所述ion分配器的内存池中的内存;在所述系统内存的内存申请卡顿时间小于或等于第一阈值且所述cpu卡顿时间小于或等于第二阈值的情况下,延时释放所述ion分配器的内存池中的内存。
168.由此,通过采用上述实施例的内存释放方式,可以增加对ion分配器内存的释放速度。通过识别不同的内存压力场景,可在兼顾内存释放速度的同时减少cpu资源竞争。
169.可选地,内存分配装置800还包括:
170.内存监测模块,用于监测所述ion分配器的内存池中的内存规格;
171.填充模块,用于在所述内存低于预设阈值的情况下,根据所述ion分配器的内存池中内存规格,按照预设顺序申请所述系统内存向所述内存池填充内存;
172.其中,所述内存规格包括order1、order2、order4及order9,所述order4和order9配置放弃内存申请标识,所述放弃内存申请标识用于告知所述ion分配器在未申请到请求规格内存的情况下,放弃内存申请。
173.由此,通过增加多个不同内存规格的order的填充,可以加速ion分配器的内存填充速度。
174.可选地,内存分配装置800还包括:
175.确定模块,用于在接收到所述扩充完成命令后向所述内存池申请内存以用于所述目标应用之后,确定向所述内存池申请用于所述目标应用的内存类型和内存规格,其中,所述内存池的内存类型包括缓冲内存和非缓冲内存;
176.迁移模块,用于在申请的所述内存类型为缓冲内存且所述申请的内存超出所述内存池中缓冲内存的情况下,从所述内存池中的非缓冲内存迁移目标非缓冲内存至所述缓冲内存中;在申请的所述内存类型为非缓冲内存且所述申请的内存超出所述内存池中非缓冲内存的情况下,从所述内存池中的缓冲内存迁移目标缓冲内存至所述非缓冲内存中。
177.由此,通过打通cache pool和uncache pool的互通,达到ion分配器内存使用的最大化,增加系统的可用内存。
178.可选地,内存分配装置800还包括:
179.读取模块,用于在所述终端设备开机时,读取所述ion分配器的内存配置文件,所述内存配置文件用于在所述ion分配器的内存池中配置第一预留内存;
180.填充模块,用于基于所述内存配置文件,从所述终端设备的系统内存填充所述第一预留内存至所述内存池中,其中,所述第一预留内存基于所述终端设备的可用内存确定。
181.可选地,内存分配装置800还包括:
182.内存监测模块,用于监测所述终端设备的第一可用内存;
183.第一更新模块,用于基于所述第一可用内存,更新所述内存配置文件。
184.可选地,所述内存监测模块,具体用于:
185.以预设时间间隔统计所述终端设备在开机后预设时长内的可用内存;
186.计算所述预定时长内的平均可用内存,得到所述终端设备的第一可用内存;
187.所述第一更新模块,具体用于:
188.获取所述内存配置文件中所述预留内存对应的所述终端设备的历史可用内存;
189.在所述第一可用内存与所述历史可用内存的变化值大于预设阈值的情况下,基于所述第一可用内存更新所述内存配置文件中的第一预留内存。
190.可选地,内存分配装置800还包括:
191.接收模块,用于接收服务器发送的配置命令,所述配置命令携带配置的第二预留内存;
192.第二更新模块,用于基于所述配置的第二预留内存,更新所述配置文件中的第一预留内存。
193.可选地,内存分配装置800还包括:
194.压力监测模块,用于从所述终端设备的系统内存填充所述第一预留内存至所述内存池中之后,监测所述系统内存的内存压力;
195.回收模块,用于基于所述系统内存的内存压力等级,将所述内存池中目标预留内存回收至所述系统内存;
196.填充模块,用于在所述系统内存的内存压力低于预设阈值的情况下,将回收至所述系统内存的预留内存填充至所述内存池。
197.由此,通过为ion分配器增加预留内存,可以提高目标应用的起启动速度,并且预留内存在系统内存压力大的时候能够被回收,预留内存的大小能够根据不同用户及使用习惯自适应更新,还支持服务器下发预留内存的大小配置。
198.可选地,如图8所示,本技术实施例还提供一种电子设备900,包括处理器940和存储器920,存储器920上存储有可在所述处理器940上运行的程序或指令,该程序或指令被处理器940执行时实现上述内存分配方法实施例的各个步骤,且能达到相同的技术效果,为避免重复,这里不再赘述。
199.需要说明的是,本技术实施例中的电子设备包括上述的移动电子设备和非移动电子设备。
200.图9为实现本技术实施例的一种电子设备的硬件结构示意图。
201.该电子设备1000包括但不限于:射频单元1001、网络模块1002、音频输出单元1003、输入单元1004、传感器1005、显示单元1006、用户输入单元1007、接口单元1008、存储器1009、以及处理器1010等部件。
202.本领域技术人员可以理解,电子设备1000还可以包括给各个部件供电的电源(比如电池),电源可以通过电源管理系统与处理器1010逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。图x中示出的电子设备结构并不构成对电子设备的限定,电子设备可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置,在此不再赘述。
203.其中,处理器1010,用于在终端设备启动目标应用的情况下,在所述终端设备的用户空间确定所述目标应用所需内存;在所述用户空间,向所述终端设备的内核空间发送内存扩充请求,所述内存扩充请求中包括所述目标应用所需内存;在所述内核空间,基于所述
内存扩充请求从所述系统内存扩充所述目标应用所需内存至所述终端设备ion分配器的内存池中,并向所述用户空间返回扩充完成命令;在所述用户空间,在接收到所述扩充完成命令后向所述内存池申请内存以用于所述目标应用
204.可选地,处理器1010,还用于:在所述目标应用为预设类型的应用的情况下,在所述终端设备的用户空间确定所述目标应用所需内存。
205.可选地,处理器1010,还用于:响应所述内存扩充请求,唤醒所述内核空间的目标线程;将所述目标线程绑定至所述终端设备的cpu大核;通过所述cpu大核从所述系统内存申请扩充内存,以扩充所述目标应用所需内存至所述内存池中。
206.可选地,处理器1010,还用于:在所述目标应用启动的情况下,将扩充至所述内存池中的内存配置为所述目标应用的专属内存,所述专属内存为不可回收内存。
207.可选地,处理器1010,还用于:在所述ion分配器存在内存释放时,监测所述终端设备的cpu卡顿时间和所述系统内存的内存申请卡顿时间;在所述系统内存的内存申请卡顿时间大于第一阈值的情况下,直接释放所述ion分配器的内存池中的内存;在所述系统内存的内存申请卡顿时间小于或等于第一阈值且所述cpu卡顿时间大于第二阈值的情况下,直接释放所述ion分配器的内存池中的内存;在所述系统内存的内存申请卡顿时间小于或等于第一阈值且所述cpu卡顿时间小于或等于第二阈值的情况下,延时释放所述ion分配器的内存池中的内存。
208.可选地,处理器1010,还用于:监测所述ion分配器的内存池中的内存规格;在所述内存低于预设阈值的情况下,根据所述ion分配器的内存池中内存规格,按照预设顺序申请所述系统内存向所述内存池填充内存;其中,所述内存规格包括order1、order2、order4及order9,所述order4和order9配置放弃内存申请标识,所述放弃内存申请标识用于告知所述ion分配器在未申请到请求规格内存的情况下,放弃内存申请。
209.可选地,处理器1010,还用于:在接收到所述扩充完成命令后向所述内存池申请内存以用于所述目标应用之后,确定向所述内存池申请用于所述目标应用的内存类型和内存规格,其中,所述内存池的内存类型包括缓冲内存和非缓冲内存;在申请的所述内存类型为缓冲内存且所述申请的内存超出所述内存池中缓冲内存的情况下,从所述内存池中的非缓冲内存迁移目标非缓冲内存至所述缓冲内存中;在申请的所述内存类型为非缓冲内存且所述申请的内存超出所述内存池中非缓冲内存的情况下,从所述内存池中的缓冲内存迁移目标缓冲内存至所述非缓冲内存中。
210.可选地,处理器1010,还用于:在所述终端设备开机时,读取所述ion分配器的内存配置文件,所述内存配置文件用于在所述ion分配器的内存池中配置第一预留内存;基于所述内存配置文件,从所述终端设备的系统内存填充所述第一预留内存至所述内存池中,其中,所述第一预留内存基于所述终端设备的可用内存确定。
211.可选地,处理器1010,还用于:监测所述终端设备的第一可用内存;基于所述第一可用内存,更新所述内存配置文件。
212.可选地,处理器1010,还用于:以预设时间间隔统计所述终端设备在开机后预设时长内的可用内存;计算所述预定时长内的平均可用内存,得到所述终端设备的第一可用内存;获取所述内存配置文件中所述预留内存对应的所述终端设备的历史可用内存;在所述第一可用内存与所述历史可用内存的变化值大于预设阈值的情况下,基于所述第一可用内
存更新所述内存配置文件中的第一预留内存。
213.可选地,输入单元1004用于:接收服务器发送的配置命令,所述配置命令携带配置的第二预留内存。
214.处理器1010,还用于:基于所述配置的第二预留内存,更新所述配置文件中的第一预留内存。
215.可选地,处理器1010,还用于:从所述终端设备的系统内存填充所述第一预留内存至所述内存池中之后,监测所述系统内存的内存压力;基于所述系统内存的内存压力等级,将所述内存池中目标预留内存回收至所述系统内存;在所述系统内存的内存压力低于预设阈值的情况下,将回收至所述系统内存的预留内存填充至所述内存池。
216.在本技术实施例中,通过在终端设备启动目标应用的情况下,在所述终端设备的用户空间确定所述目标应用所需内存;在所述用户空间,向所述终端设备的内核空间发送内存扩充请求,所述内存扩充请求中包括所述目标应用所需内存;在所述内核空间,基于所述内存扩充请求从所述系统内存扩充所述目标应用所需内存至所述终端设备ion分配器的内存池中,并向所述用户空间返回扩充完成命令;在所述用户空间,在接收到所述扩充完成命令后向所述内存池申请内存以用于所述目标应用,由此建立底层内存分配与上层应用的通讯,支持目标应用能够提前扩充内存,保证内存的申请速度。从而能够加速目标应用的启动速度,使得目标应用能够在最快速度下申请到内存,可以有效的减少需要快速大量使用ion内存的应用申请内存的场景下,由于内存申请慢导致的卡顿和丢帧问题。
217.应理解的是,本技术实施例中,输入单元1004可以包括图形处理器(graphics processing unit,gpu)10041和麦克风10042,图形处理器10041对在视频捕获模式或图像捕获模式中由图像捕获装置(如摄像头)获得的静态图片或视频的图像数据进行处理。显示单元1006可包括显示面板10061,可以采用液晶显示器、有机发光二极管等形式来配置显示面板10061。用户输入单元1007包括触控面板10071以及其他输入设备10072中的至少一种。触控面板10071,也称为触摸屏。触控面板10071可包括触摸检测装置和触摸控制器两个部分。其他输入设备10072可以包括但不限于物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆,在此不再赘述。
218.存储器1009可用于存储软件程序以及各种数据。存储器1009可主要包括存储程序或指令的第一存储区和存储数据的第二存储区,其中,第一存储区可存储操作系统、至少一个功能所需的应用程序或指令(比如声音播放功能、图像播放功能等)等。此外,存储器1009可以包括易失性存储器或非易失性存储器,或者,存储器1009可以包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(read-only memory,rom)、可编程只读存储器(programmable rom,prom)、可擦除可编程只读存储器(erasable prom,eprom)、电可擦除可编程只读存储器(electrically eprom,eeprom)或闪存。易失性存储器可以是随机存取存储器(random access memory,ram),静态随机存取存储器(static ram,sram)、动态随机存取存储器(dynamic ram,dram)、同步动态随机存取存储器(synchronous dram,sdram)、双倍数据速率同步动态随机存取存储器(double data rate sdram,ddrsdram)、增强型同步动态随机存取存储器(enhanced sdram,esdram)、同步连接动态随机存取存储器(synch link dram,sldram)和直接内存总线随机存取存储器(direct rambus ram,drram)。本技术实施例中的存储器1009包括但不限于这些和任意其它适合类型的存储器。
219.处理器1010可包括一个或多个处理单元;可选的,处理器1010集成应用处理器和调制解调处理器,其中,应用处理器主要处理涉及操作系统、用户界面和应用程序等的操作,调制解调处理器主要处理无线通信信号,如基带处理器。可以理解的是,上述调制解调处理器也可以不集成到处理器1010中。
220.本技术实施例还提供一种可读存储介质,所述可读存储介质上存储有程序或指令,该程序或指令被处理器执行时实现上述基于ion分配器的内存分配方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
221.其中,所述处理器为上述实施例中所述的电子设备中的处理器。所述可读存储介质,包括计算机可读存储介质,如计算机只读存储器rom、随机存取存储器ram、磁碟或者光盘等。
222.本技术实施例另提供了一种芯片,所述芯片包括处理器和通信接口,所述通信接口和所述处理器耦合,所述处理器用于运行程序或指令,实现上述基于ion分配器的内存分配方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
223.应理解,本技术实施例提到的芯片还可以称为系统级芯片、系统芯片、芯片系统或片上系统芯片等。
224.本技术实施例提供一种计算机程序产品,该程序产品被存储在存储介质中,该程序产品被至少一个处理器执行以实现如上述基于ion分配器的内存分配方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
225.需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。此外,需要指出的是,本技术实施方式中的方法和装置的范围不限按示出或讨论的顺序来执行功能,还可包括根据所涉及的功能按基本同时的方式或按相反的顺序来执行功能,例如,可以按不同于所描述的次序来执行所描述的方法,并且还可以添加、省去、或组合各种步骤。另外,参照某些示例所描述的特征可在其他示例中被组合。
226.通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分可以以计算机软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端(可以是手机,计算机,服务器,或者网络设备等)执行本技术各个实施例所述的方法。
227.上面结合附图对本技术的实施例进行了描述,但是本技术并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本技术的启示下,在不脱离本技术宗旨和权利要求所保护的范围情况下,还可做出很多形式,均属于本技术的保护之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1