一种内存回收方法和装置的制作方法

文档序号:6400810阅读:270来源:国知局
专利名称:一种内存回收方法和装置的制作方法
技术领域
本发明涉及计算机技术领域,特别是涉及一种内存回收方法和装置。
背景技术
在操作系统中,为了加快对磁盘进行读写操作的速度,将大量的数据缓存在内存中。业务进程在使用内存前需要提出申请并开始占用内存,当使用完内存后再及时释放内存。当内存被大量占用而得不到释放时,则会因为内存分配不足导致操作系统运行出现异堂巾O
为了避免因内存分配不足导致的系统异常的出现,操作系统引入了对内存的分配管理与回收机制。例如,在Linux操作系统中,由内存控制子系统Memcg (Memory ControlGroup,内存控制子系统)进行进程使用内存的控制,例如限制一组进程的内存使用量,统计一组进程的内存使用情况等。在使用了 Memcg的系统中,内核对内存的管理都基于Memcg来实现。下面以Linux操作系统为例,对Memcg进行介绍。在常见的非一致内存访问架构下,操作系统中存在多个内存节点(Node),每个内存节点又包括多个分区(Zone),每个分区上有多组LRU链表(Least Recently Used,最近最少使用链表,是Linux内核用于内存管理和回收控制的重要链表),每个LRU链表可能属于不同的Memcg。因此,对于同一个Memcg而言,其管理的进程所使用的内存可能分布在不同内存节点的不同分区上。而内存回收的对象即为Memcg在不同内存节点的不同分区上的LRU链表。当进行内存回收时,会通过对LRU链表回收一定数量的页来实现。
在现有技术中,内存的回收主要可以分为三类:第一种是紧缺回收,即在内存分配时发现没有可用内存时,则会触发内存紧缺回收,回收的对象为触发内存紧缺回收的进程所在的Memcg ;第二种是睡眠回收,即在系统休眠时回收不需要的内存;第三种是周期回收,内核线程周期性地进行内存回收。在第三种回收方式中,内核线程会遍历内存的每一个节点,回收每个节点上的每个分区。当对每个分区进行回收时,会获取此分区中所有使用了其内存的Memcg,找到该Memcg在该分区上的LRU链表,进行内存回收。具体实现时,采用轮询(Round Robin)的方式,对每一个分区,取一个Memcg,回收该Memcg在该分区上的内存,并判断是否遍历了每一个Memcg,直到回收完该分区的每一个Memcg对应的LRU链表。
在实现本发明的过程中,发明人发现现有技术中至少存在如下问题:现有技术提供的针对所有Memcg进行轮询遍历回收内存的方式,由于针对分区中的所有LRU链表都进行回收,会使得对可能不需要回收的LRU链表也进行了回收。例如回收的LRU链表所在的Memcg实际可能很空闲,或者该LRU链表的命中率很高,如果对这样的LRU链表进行回收可能导致资源浪费甚至会对内存的访问效率造成影响,不能达到很好的内存回收效果。发明内容
为解决上述技术问题,本发明实施例提供了一种内存回收方法和装置,可以提高内存回收效率,以解决现有技术中内存回收不合理导致的资源浪费以及系统性能下降问题。
技术方案如下:
根据本发明实施例的第一方面,公开了一种内存回收方法,所述方法包括:
当需要进行内存回收时,确定需要进行内存回收的内存节点的一个未处理分区作为当前分区;
获取所述当前分区中具有最高回收权重的链表,对所述链表进行内存回收,并更新所述链表的回收权重;
判断当前分区中具有最高回收权重的链表对应的回收权重是否小于基准回收权重,获取第一判断结果;
当所述第一判断结果表明当前分区中具有最高回收权重的链表对应的回收权重不小于基准回收权重时,进入所述获取所述当前分区中具有最高回收权重的链表,对所述链表进行内存回收的步骤;
当所述第一判断结果表明当前分区中具有最高回收权重的链表对应的回收权重小于基准回收权重时,判断是否还有未处理分区,获取第二判断结果;当所述第二判断结果表明还有未处理分区时,进入所述确定需要回收的内存节点的一个未处理分区作为当前分区的步骤,当所述第二判断结果表明没有未处理分区时,结束对当前内存节点的回收。
结合本发明的第一方面,本发明还具有第一种可能,即所述回收权重与页高速缓存命中率、链表的总长度、非活跃链表的长度、链表所属的内存控制子系统超出软限制阈值的数值中的一种或多种因素相关联。
结合本发明的第一方面,本发明还具有第二种可能,即所述对所述链表进行内存回收包括:
获取与所述链表对应的回收权重相对应的回收页数量,对所述链表回收与所述回收页数量对应的内存页。
结合本发明的第一方面,本发明还具有第三种可能,即在获取所述当前分区中具有最高回收权重的链表之后,在对所述链表进行内存回收之前,所述方法还包括:
判断所述链表对应的回收权重是否小于基准回收权重,获取第三判断结果;
当所述第三判断结果表明所述链表对应的回收权重不小于基准回收权重时,触发对所述链表进行内存回收的步骤;
当所述第三判断结果表明所述链表对应的回收权重小于基准回收权重时,进入确定需要进行内存回收的内存节点的一个未处理分区作为当前分区的步骤。
结合本发明的第一方面,本发明还具有第四种可能,即在获取所述当前分区中具有最高回收权重的链表之前,所述方法还包括:
获取当前分区在软限制树softlimit tree上具有最高回收权重的链表,对所述链表进行内存回收,并更新所述链表的回收权重;其中,所述软限制树softlimit tree根据链表的回收权重大小进行排序。
结合本发明的第一方面和本发明的第四种可能,本发明还具有第五种可能,即所述软限制树softlimit tree包含回收权重大于基准回收权重的链表。
根据本发明实施例的第二方面,公开了一种内存回收装置,所述装置包括:
分区确定单元,用于当需要进行内存回收时,确定需要进行内存回收的内存节点的一个未处理分区作为当前分区;
第一链表回收单元,用于获取所述当前分区中具有最高回收权重的链表,对所述链表进行内存回收,并更新所述链表的回收权重;
第一判断单元,用于判断当前分区中具有最高回收权重的链表对应的回收权重是否小于基准回收权重,获取第一判断结果;当所述第一判断结果表明当前分区中具有最高回收权重的链表对应的回收权重不小于基准回收权重时,进入第一链表回收单元;当所述第一判断结果表明当前分区中具有最高回收权重的链表对应的回收权重小于基准回收权重时,进入第二判断单元;
第二判断单元,用于判断当前节点是否还有未处理分区,获取第二判断结果;当所述第二判断结果表明还有未处理分区时,进入分区确定单元,当所述第二判断结果表明没有未处理分区时,结束对当前内存节点的回收。
结合本发明的第二方面,本发明还具有第六种可能,即所述回收权重与页高速缓存命中率、链表的总长度、非活跃链表的长度、链表所属的内存控制子系统超出软限制阈值的数值中的一种或多种因素相关联。
结合本发明的第二方面,本发明还具有第七种可能,即所述第一链表回收单元具体用于:
获取与所述链表对应的回收权重相对应的回收页数量,对所述链表回收与所述回收页数量对应的内存页。
结合本发明的第二方面,本发明还具有第八种可能,即所述第一链表回收单元包括:
回收单元,用于获取所述当前分区中具有最高回收权重的链表,对所述链表进行内存回收;
更新单元,用于更新所述链表的回收权重;
所述第一链表回收单元还包括:
第三判断单元,用于判断所述链表对应的回收权重是否小于基准回收权重,获取第三判断结果;当所述第三判断结果表明所述链表对应的回收权重不小于基准回收权重时,进入所述回收单元触发对所述链表进行内存回收;当所述第三判断结果表明所述链表对应的回收权重小于基准回收权重时,进入分区确定单元。
结合本发明的第二方面,本发明还具有第九种可能,即所述装置还包括:
第二链表回收单元,用于获取当前分区在软限制树softlimit tree上具有最高回收权重的链表,对所述链表进行内存回收,并更新所述链表的回收权重;其中,所述软限制树softlimit tree根据链表的回收权重大小进行排序。
结合本发明的第二方面和本发明的第九种可能,本发明还具有第十种可能,即所述软限制树softlimit tree包含回收权重大于基准回收权重的链表。
本发明实施例的一个方面能够达到的有益效果为:在本发明实施例提供的内存回收方法和装置中,为每一个链表均赋予了回收权重,当需要进行内存回收时,确定需要进行内存回收的内存节点的一个未处理分区作为当前分区;获取所述当前分区中具有最高回收权重的链表,对所述链表进行内存回收,并更新所述链表的回收权重;判断当前分区中具有最高回收权重的链表对应的回收权重是否小于基准回收权重,如果否,则对具有最高回收权重的链表进行回收;如果是,则结束当前分区的链表回收,选取下一个未处理分区进行内存回收处理,直到遍历所述需要进行内存回收的内存节点的每一个分区。应用本发明提供的方法,只对回收权重大于或等于基准回收权重的链表进行回收,以确保对最需要进行回收的链表进行回收,提高了内存回收的效率,克服了现有技术对所有分区的所有链表进行回收带来的资源浪费和系统性能下降的问题。


为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的内存回收方法第一实施例示意图2为本发明实施例提供的内存回收方法第二实施例示意图3为本发明实施例提供的内存回收装置示意图。
具体实施方式
本发明实施例提供了一种内存回收方法和装置,可以提高内存回收效率,以解决现有技术中内存回收不合理导致的资源浪费以及系统性能下降问题。
为了使本技术领域的人员更好地理解本发明中的技术方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
参见图1,为本发明提供的内存回收方法第一实施例流程图。
S101,当需要进行内存回收时,确定需要进行内存回收的内存节点的一个未处理分区作为当前分区。
确定何时进行内存回收,可以有灵活的设置。例如可以设置定时周期性地进行内存回收,这时进行的内存回收针对的对象可以是系统中所有的内存节点,也可以是部分内存节点。或者,为了尽可能地减少对内存分配的影响,满足内存分配实时性的需求,可以在内存剩余容量满足第一条件时进行内存回收。例如,可以在无法从自由链和空闲区分配内存时启动一次内存回收。又如,可以在内存控制子系统控制的进程使用的内存量超过软限制参数softlimit时进行一次内存回收。这里,内存控制子系统引入了软限制参数softlimit和硬限制参数hardlimit的概念。其中,hardlimit用来表征控制一组进程可以使用内存量的硬限制,如果进程使用的内存量超过此限制则不能再分配内存,只能先进行回收再继续分配。为了避免因为超过hardlimit而在分配内存时引起的内存强制回收而导致的较大内存分配延迟的问题,引入了软限制参数softlimit。软限制参数softlimit提供了进行内存回收的参考依据,当进程使用的内存量超过了 softlimit时,则表明进程所在的内存控制子系统Memcg需要进行内存回收了,但并不会引起强制回收。内存控制子系统Memcg所占用的内存量超过softlimit越多,贝U表明对该Memcg进行内存回收的需求越迫切。
当需要进行内存回收时,获取需要进行内存回收的节点的一个未处理分区作为当前分区。选取分区可以是随机的,也可以是按照分区排序依次进行。
S102,获取所述当前分区中具有最高回收权重的链表,对所述链表进行内存回收,并更新所述链表的回收权重。
在本发明实施例中,为每一个链表均赋予了回收权重,回收权重用于表征当前链表需要进行内存回收的迫切程度。链表需要内存回收的程度越迫切,回收权重越高。回收权重可以与多种因素相关,本发明列举了几种可能的因素,不视为对本发明的限制。本领域技术人员可以理解的是,还可以根据实际需要,通过其他因素来设置回收权重,本领域技术人员在不付出创造性劳动下获取的其他实现方式,均属于本发明的保护范围。
其中,回收权重可以与以下一种或多种因素相关联:
(I)页高速缓存Cache的命中率;
(2) LRU链表所在的内存控制子系统超出软限制阈值softlimit的数值;
(3) LRU链表的总长度;
(4)非活跃链表(Inactive链表)的长度。
下面以回收权重与以上四种因素相关联说明回收权重的计算方式。以下仅为示例性描述,不视为对本发明的限制。
权利要求
1.一种内存回收方法,其特征在于,所述方法包括: 当需要进行内存回收时,确定需要进行内存回收的内存节点的一个未处理分区作为当前分区; 获取所述当前分区中具有最高回收权重的链表,对所述链表进行内存回收,并更新所述链表的回收权重; 判断当前分区中具有最高回收权重的链表对应的回收权重是否小于基准回收权重,获取第一判断结果; 当所述第一判断结果表明当前分区中具有最高回收权重的链表对应的回收权重不小于基准回收权重时,进入所述获取所述当前分区中具有最高回收权重的链表,对所述链表进行内存回收的步骤; 当所述第一判断结果表明当前分区中具有最高回收权重的链表对应的回收权重小于基准回收权重时,判断是否还有未处理分区,获取第二判断结果;当所述第二判断结果表明还有未处理分区时 ,进入所述确定需要回收的内存节点的一个未处理分区作为当前分区的步骤,当所述第二判断结果表明没有未处理分区时,结束对当前内存节点的回收。
2.根据权利要求1所述的方法,其特征在于,所述回收权重与页高速缓存命中率、链表的总长度、非活跃链表的长度、链表所属的内存控制子系统超出软限制阈值的数值中的一种或多种因素相关联。
3.根据权利要求1所述的方法,其特征在于,所述对所述链表进行内存回收包括: 获取与所述链表对应的回收权重相对应的回收页数量,对所述链表回收与所述回收页数量对应的内存页。
4.根据权利要求1所述的方法,其特征在于,在获取所述当前分区中具有最高回收权重的链表之后,在对所述链表进行内存回收之前,所述方法还包括: 判断所述链表对应的回收权重是否小于基准回收权重,获取第三判断结果; 当所述第三判断结果表明所述链表对应的回收权重不小于基准回收权重时,触发对所述链表进行内存回收的步骤; 当所述第三判断结果表明所述链表对应的回收权重小于基准回收权重时,进入确定需要进行内存回收的内存节点的一个未处理分区作为当前分区的步骤。
5.根据权利要求1所述的方法,其特征在于,在获取所述当前分区中具有最高回收权重的链表之前,所述方法还包括: 获取当前分区在软限制树softlimit tree上具有最高回收权重的链表,对所述链表进行内存回收,并更新所述链表的回收权重;其中,所述软限制树softlimit tree根据链表的回收权重大小进行排序。
6.根据权利要求5所述的方法,其特征在于,所述软限制树softlimittree包含回收权重大于基准回收权重的链表。
7.—种内存回收装置,其特征在于,所述装置包括: 分区确定单元,用于当需要进行内存回收时,确定需要进行内存回收的内存节点的一个未处理分区作为当前分区; 第一链表回收单元,用于获取所述当前分区中具有最高回收权重的链表,对所述链表进行内存回收,并更新所述链表的回收权重;第一判断单元,用于判断当前分区中具有最高回收权重的链表对应的回收权重是否小于基准回收权重,获取第一判断结果;当所述第一判断结果表明当前分区中具有最高回收权重的链表对应的回收权重不小于基准回收权重时,进入第一链表回收单元;当所述第一判断结果表明当前分区中具有最高回收权重的链表对应的回收权重小于基准回收权重时,进入第二判断单元; 第二判断单元,用于判断当前节点是否还有未处理分区,获取第二判断结果;当所述第二判断结果表明还有未处理分区时,进入分区确定单元,当所述第二判断结果表明没有未处理分区时,结束对当前内存节点的回收。
8.根据权利要求7所述的装置,其特征在于,所述回收权重与页高速缓存命中率、链表的总长度、非活跃链表的长度、链表所属的内存控制子系统超出软限制阈值的数值中的一种或多种因素相关 联。
9.根据权利要求7所述的装置,其特征在于,所述第一链表回收单元具体用于: 获取与所述链表对应的回收权重相对应的回收页数量,对所述链表回收与所述回收页数量对应的内存页。
10.根据权利要求7所述的装置,其特征在于,所述第一链表回收单元包括: 回收单元,用于获取所述当前分区中具有最高回收权重的链表,对所述链表进行内存回收; 更新单元,用于更新所述链表的回收权重; 所述第一链表回收单元还包括: 第三判断单元,用于判断所述链表对应的回收权重是否小于基准回收权重,获取第三判断结果;当所述第三判断结果表明所述链表对应的回收权重不小于基准回收权重时,进入所述回收单元触发对所述链表进行内存回收;当所述第三判断结果表明所述链表对应的回收权重小于基准回收权重时,进入分区确定单元。
11.根据权利要求7所述的装置,其特征在于,所述装置还包括: 第二链表回收单元,用于获取当前分区在软限制树softlimit tree上具有最高回收权重的链表,对所述链表进行内存回收,并更新所述链表的回收权重;其中,所述软限制树softlimit tree根据链表的回收权重大小进行排序。
12.根据权利要求11所述的装置,其特征在于,所述软限制树softlimittree包含回收权重大于基准回收权重的链表。
全文摘要
本发明涉及计算机技术领域,特别是涉及一种内存回收方法和装置,所述方法包括:当需要进行内存回收时,确定需要进行内存回收的内存节点的一个未处理分区;获取所述分区中具有最高回收权重的链表,对所述链表进行内存回收,并更新所述链表的回收权重;判断当前分区中具有最高回收权重的链表对应的回收权重是否小于基准回收权重,获取第一判断结果;当所述回收权重不小于基准回收权重时,进入所述获取所述分区中具有最高回收权重的链表,对所述链表进行内存回收的步骤;当所述回收权重小于基准回收权重时,进入所述确定需要回收的内存节点的一个未处理分区的步骤,直到遍历所述需要进行内存回收的内存节点的每一个分区。本发明提高了内存回收效率。
文档编号G06F12/02GK103150259SQ20131009488
公开日2013年6月12日 申请日期2013年3月22日 优先权日2013年3月22日
发明者黄强 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1