书签 分享 收藏 举报 版权申诉 / 28

内存回收与分配的方法及装置.pdf

  • 上传人:Y0****01
  • 文档编号:4837917
  • 上传时间:2018-11-16
  • 格式:PDF
  • 页数:28
  • 大小:7.05MB
  • 摘要
    申请专利号:

    CN201310263454.3

    申请日:

    2013.06.27

    公开号:

    CN103365784A

    公开日:

    2013.10.23

    当前法律状态:

    授权

    有效性:

    有权

    法律详情:

    授权|||实质审查的生效IPC(主分类):G06F 12/02申请日:20130627|||公开

    IPC分类号:

    G06F12/02

    主分类号:

    G06F12/02

    申请人:

    华为技术有限公司

    发明人:

    吴建国; 裘稀石

    地址:

    518129 广东省深圳市龙岗区坂田华为总部办公楼

    优先权:

    专利代理机构:

    深圳市威世博知识产权代理事务所(普通合伙) 44280

    代理人:

    何青瓦

    PDF完整版下载: PDF下载
    内容摘要

    本发明公开了一种内存回收与分配的方法及装置,该方法包括:接收内存分配请求;在接收内存分配请求后,若当前第一内存管理区的内存不满足预定的大小,则判断当前第一内存管理区的回收模式是否表示回收当前第一内存管理区,其中,当前第一内存管理区的回收模式是根据当前第一内存管理区所属节点的拓扑情况来确定的;若当前第一内存管理区的回收模式表示回收当前第一内存管理区,则对当前第一内存管理区进行回收;响应于内存分配请求,对回收后的当前第一内存管理区的内存进行分配。通过上述方式,本发明能够最大限度地保证本地内存在本地进行分配,尽量避免不必要的内存远端访问,从而减少对系统性能的影响。

    权利要求书

    权利要求书
    1.  一种内存回收与分配的方法,其特征在于,包括:
    接收内存分配请求;
    在接收所述内存分配请求后,若当前第一内存管理区的内存不满足预定的大小,则判断所述当前第一内存管理区的回收模式是否表示回收所述当前第一内存管理区,其中,所述当前第一内存管理区的回收模式是根据所述当前第一内存管理区所属节点的拓扑情况来确定的;
    若所述当前第一内存管理区的回收模式表示回收所述当前第一内存管理区,则对所述当前第一内存管理区进行回收;
    响应于所述内存分配请求,对回收后的所述当前第一内存管理区的内存进行分配。

    2.  根据权利要求1所述的方法,其特征在于,所述方法还包括:根据所述当前第一内存管理区所属节点的拓扑情况确定所述当前第一内存管理区的回收模式。

    3.  根据权利要求2所述的方法,其特征在于,所述根据所述当前第一内存管理区所属节点的拓扑情况确定所述当前第一内存管理区的回收模式的步骤,包括:
    若所述当前第一内存管理区是所述当前第一内存管理区所属节点的最后一个内存管理区,则判断系统内存管理区链表Zonelist中是否存在与所述当前第一内存管理区之间的距离大于预设回收距离的第二内存管理区;
    若存在与所述当前第一内存管理区之间的距离大于预设回收距离的第二内存管理区,则确定所述当前第一内存管理区的回收模式是回收所述当前第一内存管理区。

    4.  根据权利要求3所述的方法,其特征在于,所述判断系统内存管理区链表Zonelist中是否存在与所述当前第一内存管理区之间的距离大于预设回收距离的第二内存管理区的步骤之后,还包括:
    若存在与所述当前第一内存管理区之间的距离小于或等于所述预 设回收距离的第三内存管理区,则判断所述系统内存管理区链表Zonelist中是否存在空闲内存大于预设阈值的第三内存管理区;
    若存在空闲内存大于预设阈值的第三内存管理区,则响应于所述内存分配请求,分配所述空闲内存大于预设阈值的第三内存管理区的内存。

    5.  根据权利要求1所述的方法,其特征在于,所述判断当前第一内存管理区的回收模式是否表示回收所述当前第一内存管理区的步骤之前,还包括:
    若所述当前第一内存管理区的内存不满足预定的大小,则判断所述当前第一内存管理区已建立的备用内存管理区链表Zonelist中是否存在满足预定大小的第四内存管理区;
    若存在满足预定大小的第四内存管理区,则响应于所述内存分配请求,分配所述备用内存管理区链表Zonelist中满足预定大小的第四内存管理区的内存。

    6.  根据权利要求5所述的方法,其特征在于,所述方法还包括:建立当前第一内存管理区的备用内存管理区链表Zonelist;
    所述建立当前第一内存管理区的备用内存管理区链表Zonelist的步骤,包括:
    判断所述系统内存管理区链表Zonelist中是否存在与当前第一内存管理区之间的距离小于等于预设回收距离的第四内存管理区;
    若存在与当前第一内存管理区之间的距离小于预设回收距离的第四内存管理区,则将所述与当前第一内存管理区之间的距离小于预设回收距离的第四内存管理区添加到所述当前第一内存管理区的备用内存管理区链表Zonelist中。

    7.  一种内存回收与分配的装置,其特征在于,所述装置包括:接收模块、第一判断模块、回收模块以及第一分配模块;
    所述接收模块用于接收内存分配请求;
    所述第一判断模块用于在所述接收模块接收所述内存分配请求后,在当前第一内存管理区的内存不满足预定的大小时,判断所述当前第一 内存管理区的回收模式是否表示回收所述当前第一内存管理区,其中,所述当前第一内存管理区的回收模式是根据所述当前第一内存管理区所属节点的拓扑情况来确定的;
    所述回收模块用于在所述第一判断模块的判断结果为所述当前第一内存管理区的回收模式表示回收所述当前第一内存管理区时,对所述当前第一内存管理区进行回收;
    所述第一分配模块用于在所述回收模块回收当前第一内存管理区后,响应于所述内存分配请求,对回收后的所述当前第一内存管理区的内存进行分配。

    8.  根据权利要求7所述的装置,其特征在于,所述装置还包括确定模块,所述确定模块用于根据当前第一内存管理区所属节点的拓扑情况确定所述当前第一内存管理区的回收模式。

    9.  根据权利要求8所述的装置,其特征在于,所述确定模块包括:第一判断单元和回收结果单元;
    所述第一判断单元用于在所述当前第一内存管理区是所述当前第一内存管理区所属节点的最后一个内存管理区时,判断系统内存管理区链表Zonelist中是否存在与所述当前第一内存管理区之间的距离大于预设回收距离的第二内存管理区;
    所述回收结果获得单元用于在所述第一判断单元的判断结果为存在与所述当前第一内存管理区之间的距离大于预设回收距离的第二内存管理区时,确定所述当前第一内存管理区的回收模式是回收所述当前第一内存管理区。

    10.  根据权利要求9所述的装置,其特征在于,所述装置还包括:第二判断模块和第二分配模块;
    所述第二判断模块用于在存在与所述当前第一内存管理区之间的距离小于或等于所述预设回收距离的第三内存管理区时,判断所述系统内存管理区链表Zonelist中是否存在空闲内存大于预设阈值的第三内存管理区;
    所述第二分配模块用于在所述第二判断模块的判断结果为存在空 闲内存大于预设阈值的第三内存管理区时,响应于所述内存分配请求,分配所述空闲内存大于预设阈值的第三内存管理区的内存。

    11.  根据权利要求7所述的装置,其特征在于,所述装置还包括:第三判断模块和第三分配模块;
    所述第三判断模块用于在所述当前第一内存管理区的内存不满足预定的大小时,判断所述当前第一内存管理区已建立的备用内存管理区链表Zonelist中是否存在满足预定大小的第四内存管理区;
    所述第三分配模块用于在所述第三判断模块的判断结果为存在满足预定大小的第四内存管理区时,响应于所述内存分配请求,分配所述备用内存管理区链表Zonelist中满足预定大小的第四内存管理区的内存。

    12.  根据权利要求11所述的装置,其特征在于,所述装置还包括建立模块,所述建立模块用于建立当前第一内存管理区的备用内存管理区链表Zonelist,所述建立模块包括:第二判断单元和添加单元;
    所述第二判断单元用于判断系统内存管理区链表Zonelist中是否存在与当前第一内存管理区之间的距离小于等于预设回收距离的第四内存管理区;
    所述添加单元用于在所述第二判断单元的判断结果为存在与当前第一内存管理区之间的距离小于预设回收距离的第四内存管理区时,将所述与当前第一内存管理区之间的距离小于预设回收距离的第四内存管理区添加到所述当前第一内存管理区的备用内存管理区链表Zonelist中。

    说明书

    说明书内存回收与分配的方法及装置
    技术领域
    本发明涉及计算机应用技术领域,特别是涉及一种内存回收与分配的方法及装置。
    背景技术
    随着计算机技术的迅速发展,人们对计算机的需求日趋增长。单个处理器(CPU)的运算能力有限,人们迫切需要将多个处理器组成一个系统,非一致访问分布共享存储技术(NUMA,Non Uniform Memory Access Architecture),因其架构具有高可扩展性,正在被越来越多地运用在服务器领域。
    NUMA是一种分布式结构,其特点是:任一处理器可以访问任意的内存、外设等;每个处理器访问不同的内存时,存在着不同的延迟。因此,内存管理最主要的目的是高效、快速地分配内存,使每个CPU都尽可能地访问本地内存,并且在适当的时候释放和回收内存资源。现有内存管理技术提供一个“回收模式”属性,当发生某一个内存管理区的内存不足而无法满足当前分配的情况时,内存管理系统根据“回收模式”的值来决定下一步的动作:当“回收模式”为“回收”时,则阻塞当前分配,先对该内存管理区进行空闲内存回收,回收结束后重新尝试在该内存管理区进行分配;当“回收模式”为“不回收”时,则继续寻找内存管理区链表,以获取下一个满足需求的内存管理区进行内存分配。
    本申请的研发人员在长期的研发中发现,在现有的技术方案中,“回收模式”为全局属性,系统在确定“回收模式”的值时是根据当前系统中是否存在任意的两个节点之间的距离大于预先设定的“回收距离”,这种确定“回收模式”值的方案使得系统的控制粒度太大,无法很好地保证本地内存本地分配,造成不必要的内存远端访问,影响系统性能。
    发明内容
    本发明主要解决的技术问题是提供一种内存回收与分配的方法及装置,能够最大限度地保证本地内存在本地进行分配,一定程度避免不必要的内存远端访问,从而减少对系统性能的影响。
    第一方面,本发明提供一种内存回收与分配的方法,包括:接收内存分配请求;在接收所述内存分配请求后,若当前第一内存管理区的内存不满足预定的大小,则判断当前第一内存管理区的回收模式是否表示回收所述当前第一内存管理区,其中,所述当前第一内存管理区的回收模式是根据所述当前第一内存管理区所属节点的拓扑情况来确定的;若所述当前第一内存管理区的回收模式表示回收所述当前第一内存管理区,则对所述当前第一内存管理区进行回收;响应于所述内存分配请求,对回收后的所述当前第一内存管理区的内存进行分配。
    在第一方面的第一种可能的实现方式中,所述方法还包括:根据所述当前第一内存管理区所属节点的拓扑情况确定所述当前第一内存管理区的回收模式。
    结合第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,所述根据所述当前第一内存管理区所属节点的拓扑情况确定所述当前第一内存管理区的回收模式的步骤,包括:若所述当前第一内存管理区是所述当前第一内存管理区所属节点的最后一个内存管理区,则判断系统内存管理区链表Zonelist中是否存在与所述当前第一内存管理区之间的距离大于预设回收距离的第二内存管理区;若存在与所述当前第一内存管理区之间的距离大于预设回收距离的第二内存管理区,则确定所述当前第一内存管理区的回收模式是回收所述当前第一内存管理区。
    结合第一方面的第二种可能的实现方式,在第一方面的第三种可能的实现方式中,所述判断系统内存管理区链表Zonelist中是否存在与所述当前第一内存管理区之间的距离大于预设回收距离的第二内存管理区的步骤之后,还包括:若存在与所述当前第一内存管理区之间的距离 小于或等于所述预设回收距离的第三内存管理区,则判断所述系统内存管理区链表Zonelist中是否存在空闲内存大于预设阈值的第三内存管理区;若存在空闲内存大于预设阈值的第三内存管理区,则响应于所述内存分配请求,分配所述空闲内存大于预设阈值的第三内存管理区的内存。
    在第一方面的第四种可能的实现方式中,所述判断当前第一内存管理区的回收模式是否表示回收所述当前第一内存管理区的步骤之前,还包括:若所述当前第一内存管理区的内存不满足预定的大小,则判断所述当前第一内存管理区已建立的备用内存管理区链表Zonelist中是否存在满足预定大小的第四内存管理区;若存在满足预定大小的第四内存管理区,则响应于所述内存分配请求,分配所述备用内存管理区链表Zonelist中满足预定大小的第四内存管理区的内存。
    结合第一方面的第四种可能的实现方式,在第一方面的第五种可能的实现方式中,所述方法还包括:建立当前第一内存管理区的备用内存管理区链表Zonelist;所述建立当前第一内存管理区的备用内存管理区链表Zonelist的步骤,包括:判断所述系统内存管理区链表Zonelist中是否存在与当前第一内存管理区之间的距离小于等于预设回收距离的第四内存管理区;若存在与当前第一内存管理区之间的距离小于预设回收距离的第四内存管理区,则将所述与当前第一内存管理区之间的距离小于预设回收距离的第四内存管理区添加到所述当前第一内存管理区的备用内存管理区链表Zonelist中。
    第二方面,本发明提供一种内存回收与分配的装置,所述装置包括:接收模块、第一判断模块、回收模块以及第一分配模块;所述接收模块用于接收内存分配请求;所述第一判断模块用于在所述接收模块接收所述内存分配请求后,在当前第一内存管理区的内存不满足预定的大小时,判断当前第一内存管理区的回收模式是否表示回收所述当前第一内存管理区,并将所述判断结果向所述回收模块发送,其中,所述当前第一内存管理区的回收模式是根据所述当前第一内存管理区所属节点的拓扑情况来确定的;所述回收模块用于在所述第一判断模块的判断结果 为所述当前第一内存管理区的回收模式表示回收所述当前第一内存管理区时,对所述当前第一内存管理区进行回收;所述第一分配模块用于在所述回收模块回收当前第一内存管理区后,响应于所述内存分配请求,对回收后的所述当前第一内存管理区的内存进行分配。
    在第二方面的第一种可能的实现方式中,所述装置还包括确定模块,所述确定模块用于根据当前第一内存管理区所属节点的拓扑情况确定所述当前第一内存管理区的回收模式。
    结合第二方面的第一种可能的实现方式,在第二方面的第二种可能的实现方式中,所述确定模块包括:第一判断单元和回收结果单元;所述第一判断单元用于在所述当前第一内存管理区是所述当前第一内存管理区所属节点的最后一个内存管理区时,判断系统内存管理区链表Zonelist中是否存在与所述当前第一内存管理区之间的距离大于预设回收距离的第二内存管理区;所述回收结果获得单元用于在所述第一判断单元的判断结果为存在与所述当前第一内存管理区之间的距离大于预设回收距离的第二内存管理区时,确定所述当前第一内存管理区的回收模式是回收所述当前第一内存管理区。
    结合第二方面的第二种可能的实现方式,在第二方面的第三种可能的实现方式中,所述装置还包括:第二判断模块和第二分配模块;所述第二判断模块用于在存在与所述当前第一内存管理区之间的距离小于或等于所述预设回收距离的第三内存管理区时,判断所述系统内存管理区链表Zonelist中是否存在空闲内存大于预设阈值的第三内存管理区;所述第二分配模块用于在所述第二判断模块的判断结果为存在空闲内存大于预设阈值的第三内存管理区时,响应于所述内存分配请求,分配所述空闲内存大于预设阈值的第三内存管理区的内存。
    在第二方面的第四种可能的实现方式中,所述装置还包括:第三判断模块和第三分配模块;所述第三判断模块用于在所述当前第一内存管理区的内存不满足预定的大小时,判断所述当前第一内存管理区已建立的备用内存管理区链表Zonelist中是否存在满足预定大小的第四内存管理区;所述第三分配模块用于在所述第三判断模块的判断结果为存在满 足预定大小的第四内存管理区时,响应于所述内存分配请求,分配所述备用内存管理区链表Zonelist中满足预定大小的第四内存管理区的内存。
    结合第二方面的第四种可能的实现方式,在第二方面的第五种可能的实现方式中,所述装置还包括建立模块,所述建立模块用于建立当前第一内存管理区的备用内存管理区链表Zonelist,所述建立模块包括:第二判断单元和添加单元;所述第二判断单元用于判断系统内存管理区链表Zonelist中是否存在与当前第一内存管理区之间的距离小于等于预设回收距离的第四内存管理区;所述添加单元用于在所述第二判断单元的判断结果为存在与当前第一内存管理区之间的距离小于预设回收距离的第四内存管理区时,将所述与当前第一内存管理区之间的距离小于预设回收距离的第四内存管理区添加到所述当前第一内存管理区的备用内存管理区链表Zonelist中。
    本发明的有益效果是:区别于现有技术的情况,本发明在接收内存分配请求后,若当前第一内存管理区的内存不满足预定的大小,则判断当前第一内存管理区的回收模式是否表示回收当前第一内存管理区,其中,当前第一内存管理区的回收模式是根据当前第一内存管理区所属节点的拓扑情况来确定的;若当前第一内存管理区的回收模式表示回收当前第一内存管理区,则对当前第一内存管理区进行回收;对回收后的当前第一内存管理区的内存进行分配。由于当前第一内存管理区的回收模式是根据所述当前第一内存管理区所属节点的拓扑情况来确定的,即当前第一内存管理区的回收模式并不是固定不变的,根据所属节点拓扑情况的变化,当前第一内存管理区的回收模式在回收与不回收之间相应的发生变化,因此在确定当前第一内存管理区的回收模式时,充分考虑本地节点的每个内存管理区的内存大小的情况,通过这种方式,可以最大限度地保证本地内存在本地进行分配,尽量避免不必要的内存远端访问,从而减少对系统性能的影响。
    附图说明
    图1是本发明内存回收与分配的方法的NUMA系统框架示意图;
    图2是本发明内存回收与分配的方法一实施方式的流程图;
    图3是本发明内存回收与分配的方法另一实施方式的流程图;
    图4是本发明内存回收与分配的方法在实际应用中确定回收模式的流程图;
    图5是本发明内存回收与分配的方法在实际应用中回收与分配内存的控制流程图;
    图6是本发明内存回收与分配的方法在实际应用中节点的内存管理区分布和节点的内存管理区链表;
    图7是本发明内存回收与分配的方法又一实施方式的流程图;
    图8是本发明内存回收与分配的装置一实施方式的结构示意图;
    图9是本发明内存回收与分配的装置另一实施方式的结构示意图;
    图10是本发明内存回收与分配的装置又一实施方式的结构示意图;
    图11是本发明实施方式提供的一种计算节点的结构示意图。
    具体实施方式
    下面结合附图和实施方式对本发明进行详细说明。
    参阅图1,图1是本发明内存回收与分配的方法的NUMA系统框架示意图,NUMA是由多个节点(node)组成的一个系统,是一种分布式架构,每个节点都拥有处理器、内存和外设等。在NUMA下,内存访问时间取决于处理器的内存位置,处理器访问它自己的本地内存的速度比非本地内存的快一些。本发明技术实现的系统框图如图1所示,每个节点都有本地内存和远端内存,内存分配时一般是进行本地内存分配,若本地内存分配失败,则考虑本地内存回收后再分配或者进行远端内存分配。
    本发明就是提供一种更为有效、更细粒度的内存回收控制策略,以尽量做到本地内存在本地进行分配,便于提高系统性能。
    参阅图2,图2是本发明内存回收与分配的方法一实施方式的流程图,包括:
    步骤S101:接收内存分配请求。
    当进程需要内存时,首先获得进程所在处理器的节点,在该节点上找到一个合适的当前第一内存管理区,向该第一内存管理区发送内存分配请求,当前的第一内存管理区接收该内存分配请求。
    节点是系统的一个逻辑单位,包括处理器、内存、外设等。内存管理是指软件运行时对计算机内存资源的分配和使用的技术。每个节点的内存被分为多个块,每个内存块称为内存管理区(zones),它表示物理内存中的一段区域,例如X86_64系统有ZONE_DMA(0-16M)、ZONE_DMA32(16M-4G)、ZONE_NORMAL以及ZONE_MOVABLE管理区。
    步骤S102:在接收内存分配请求后,若当前第一内存管理区的内存不满足预定的大小,则判断当前第一内存管理区的回收模式是否表示回收当前第一内存管理区,其中,当前第一内存管理区的回收模式是根据当前第一内存管理区所属节点的拓扑情况来确定的。
    由于当前第一内存管理区的回收模式是根据当前第一内存管理区所属节点的拓扑情况来确定的,即当前第一内存管理区的回收模式并不是固定不变的,根据所属节点拓扑情况的变化,当前第一内存管理区的回收模式在回收与不回收之间相应的发生变化,因此在确定当前第一内存管理区的回收模式时,充分考虑本地节点的每个内存管理区的内存大小的情况,通过这种方式,可以很好地保证本地内存在本地进行分配,避免造成不必要的内存远端访问,减少系统影响。
    接收内存分配请求后,如果当前第一内存管理区的内存不满足预定的大小,即可判断当前第一内存管理区的回收模式是否表示回收当前第一内存管理区。接收内存分配请求后,如果当前第一内存管理区的内存满足预定的大小,则可以直接分配当前第一内存管理区的内存。
    步骤S103:若当前第一内存管理区的回收模式表示回收当前第一内存管理区,则对当前第一内存管理区进行回收。
    如果当前第一内存管理区的回收模式是回收当前第一内存管理区,则对当前第一内存管理区进行回收。
    步骤S104:响应于内存分配请求,对回收后的当前第一内存管理区的内存进行分配。
    将当前第一内存管理区回收后,再对该回收后的当前第一内存管理区的内存进行分配。从而可以尽量实现本地内存在本地进行分配的控制策略。
    本发明实施方式在接收内存分配请求后,若当前第一内存管理区的内存不满足预定的大小,则判断当前第一内存管理区的回收模式是否表示回收当前第一内存管理区,其中,当前第一内存管理区的回收模式是根据当前第一内存管理区所属节点的拓扑情况来确定的;若当前第一内存管理区的回收模式表示回收当前第一内存管理区,则对当前第一内存管理区进行回收;对回收后的当前第一内存管理区的内存进行分配。由于当前第一内存管理区的回收模式是根据当前第一内存管理区所属节点的拓扑情况来确定的,即当前第一内存管理区的回收模式并不是固定不变的,根据所属节点拓扑情况的变化,当前第一内存管理区的回收模式在回收与不回收之间相应的发生变化,,因此在确定当前第一内存管理区的回收模式时,充分考虑本地节点的每个内存管理区的内存大小的情况,通过这种方式,可以最大限度地保证本地内存在本地进行分配,尽量避免不必要的内存远端访问,从而减少对系统性能的影响。
    参阅图3,图3是本发明内存回收与分配的方法另一实施方式的流程图,包括:
    步骤S201:根据当前第一内存管理区所属节点的拓扑情况确定当前第一内存管理区的回收模式。
    其中,步骤S201包括:步骤S201a、步骤S201b以及步骤S201c。
    步骤S201a:若当前第一内存管理区是当前第一内存管理区所属节点的最后一个内存管理区,则判断系统内存管理区链表Zonelist中是否存在与当前第一内存管理区之间的距离大于预设回收距离的第二内存管理区。
    每个节点有两个内存管理区链表(Zonelist):一个为本地内存管理区链表Zonelist,只包含本节点的内存管理区;另一个为系统内存管理 区链表Zonelist,包含了系统所有节点的内存管理区。
    回收距离是指内存管理区与内存管理区之间的物理距离,同一个节点内的内存管理区之间的物理距离在实际应用中可以忽略不计,因此,此处的回收距离在实际应用时主要还是各个节点之间的物理距离。
    一旦NUMA系统确定后,节点中各个内存管理区之间的距离也确定,由于回收距离可以预先设置,也就是说根据NUMA系统在实际应用中的具体情况,可以通过调整回收距离,及时调整各个节点内存管理区的回收模式,具体实现时,可以为用户提供接口,利用该接口,用户可以调整指定内存管理区的回收控制策略。
    步骤S201a在执行的过程中,具体的过程也可以是:
    (1)首先判断当前第一内存管理区是否是当前第一内存管理区所属节点的最后一个内存管理区。
    (2)如果当前第一内存管理区是所属节点唯一的内存管理区(如果是唯一的内存管理区,当然也是最后一个内存管理区)或虽然不是唯一的内存管理区,但却是所属节点的最后一个内存管理区,则判断系统内存管理区链表Zonelist中是否存在与当前第一内存管理区之间的距离大于预设回收距离的第二内存管理区。
    其中,在判断系统内存管理区链表Zonelist中是否存在与当前第一内存管理区之间的距离大于预设回收距离的第二内存管理区时,判断过程也可以是一个循环的过程,即判断当前第一内存管理区与系统内存管理区链表Zonelist中下一个内存管理区之间的距离是否大于预设回收距离。
    (3)如果当前第一内存管理区不是当前第一内存管理区所属节点的最后一个内存管理区,则当前第一内存管理区的回收模式表示不回收当前第一内存管理区。
    步骤S201b:若存在与当前第一内存管理区之间的距离大于预设回收距离的第二内存管理区,则当前第一内存管理区的回收模式是回收当前第一内存管理区。
    若存在与当前第一内存管理区之间的距离大于预设回收距离的第 二内存管理区,表明第二内存管理区与当前第一内存管理区的物理距离比较远,如果对第二内存管理区进行分配,远端访问内存时由于距离较远,必然对系统性能带来很大的影响,此时,应该回收当前第一内存管理区,因此,当前第一内存管理区的回收模式是回收当前第一内存管理区。
    步骤S201c:若存在与当前第一内存管理区之间的距离小于或等于预设回收距离的第三内存管理区,则当前第一内存管理区的回收模式是不回收当前第一内存管理区。
    若不存在与当前第一内存管理区之间的距离大于预设回收距离的第二内存管理区,即存在与当前第一内存管理区之间的距离小于或等于预设回收距离的第三内存管理区,表明第三内存管理区与当前第一内存管理区的物理距离比较近,如果对第三内存管理区进行分配,远端访问内存时由于距离近,对系统性能也不会带来明显的影响,因此,可以不回收当前第一内存管理区。
    需要说明的是,步骤S201只需要在步骤S203之前完成即可,除了本实施方式所列举的执行顺序外,步骤S201还可以和步骤S202同步执行,在此不做限制。
    步骤S202:接收内存分配请求。
    当进程需要内存时,首先获得进程所在处理器的节点,在该节点上找到一个合适的当前第一内存管理区,向该第一内存管理区发送内存分配请求,当前的第一内存管理区接收该内存分配请求。
    节点是系统的一个逻辑单位,包括处理器、内存、外设等。内存管理是指软件运行时对计算机内存资源的分配和使用的技术。每个节点的内存被分为多个块,每个内存块称为内存管理区(zones),它表示物理内存中的一段区域,例如X86_64系统有ZONE_DMA(0-16M),ZONE_DMA32(16M-4G),ZONE_NORMAL和ZONE_MOVABLE管理区。
    步骤S203:在接收内存分配请求后,若当前第一内存管理区的内存不满足预定的大小,则判断当前第一内存管理区的回收模式是否表示回 收当前第一内存管理区,其中,当前第一内存管理区的回收模式是根据当前第一内存管理区所属节点的拓扑情况来确定的。如果表示回收当前第一内存管理区,进入步骤S204,如果表示不是回收当前第一内存管理区,进入步骤S206。
    由于当前第一内存管理区的回收模式是根据当前第一内存管理区所属节点的拓扑情况来确定的,即当前第一内存管理区的回收模式并不是固定不变的,根据所属节点拓扑情况的变化,当前第一内存管理区的回收模式在回收与不回收之间相应的发生变化,因此在确定当前第一内存管理区的回收模式时,充分考虑本地节点的每个内存管理区的内存大小的情况,可以很好地保证本地内存在本地进行分配,避免造成不必要的内存远端访问,减少系统影响。
    接收内存分配请求后,如果当前第一内存管理区的内存不满足预定的大小,即可判断当前第一内存管理区的回收模式是否表示回收当前第一内存管理区。接收内存分配请求后,如果当前第一内存管理区的内存满足预定的大小,则可以直接分配当前第一内存管理区的内存。
    步骤S204:若当前第一内存管理区的回收模式表示回收当前第一内存管理区,则对当前第一内存管理区进行回收。
    如果当前第一内存管理区的回收模式表示回收当前第一内存管理区,则对当前第一内存管理区进行回收。
    步骤S205:响应于内存分配请求,对回收后的当前第一内存管理区的内存进行分配。
    将当前第一内存管理区回收后,再对该回收后的当前第一内存管理区的内存进行分配。从而可以尽量实现本地内存在本地进行分配。
    步骤S206:若存在与当前第一内存管理区之间的距离小于或等于预设回收距离的第三内存管理区,则判断系统内存管理区链表Zonelist中是否存在空闲内存大于预设阈值的第三内存管理区。
    正如步骤S201c所述,若存在与当前第一内存管理区之间的距离小于或等于预设回收距离的第三内存管理区,则当前第一内存管理区的回收模式是不回收当前第一内存管理区,此时判断系统内存管理区链表 Zonelist中是否存在空闲内存大于预设阈值的第三内存管理区。
    由于第三内存管理区的空闲内存是预先设置的,因此通过系统提供的接口,用户可以根据实际情况,设置第三内存管理区空闲内存的阈值,以此来确定是否将第三内存管理区用于非本地的内存分配,即尽量优先保证第三内存管理区所属节点的本地内存的分配需求。例如,系统拥有节点0、节点1、节点2以及节点3,管理员计划在节点1上执行重要进程,因此需要大量内存,这时管理员可以调整节点1对应的内存管理区的远端节点内存分配阈值,以避免本地内存被节点0、节点2以及节点3上的进程大量使用。
    其中,判断系统内存管理区链表Zonelist中是否存在空闲内存大于预设阈值的第三内存管理区时,在实际应用中,可以是采用循环的方式进行判断,即判断系统内存管理区链表Zonelist中下一个与当前第一内存管理区之间的距离小于等于预设回收距离的第三内存管理区的空闲内存是否大于预设阈值。
    步骤S207:若存在空闲内存大于预设阈值的第三内存管理区,则分配空闲内存大于预设阈值的第三内存管理区的内存。
    如果存在空闲内存大于预设阈值的第三内存管理区,则表明第三内存管理区可以用于非本地内存分配,因此可以分配空闲内存大于预设阈值的第三内存管理区的内存。
    通过这种为内存管理区设置空闲内存的阈值的方式,从第三内存管理区的角度分析,可以优先保证本地内存在本地(即第三内存管理区)进行分配的需求,在满足本地内存需求的基础上,才可以将本地内存(第三内存管理区)用于非本地节点(第一内存管理区)的内存分配。
    本发明实施方式接在接收内存分配请求后,若当前第一内存管理区的内存不满足预定的大小,则判断当前第一内存管理区的回收模式是否是回收当前第一内存管理区,其中,当前第一内存管理区的回收模式是根据当前第一内存管理区所属节点的拓扑情况来确定的;若当前第一内存管理区的回收模式是回收当前第一内存管理区,则对当前第一内存管理区进行回收;对回收后的当前第一内存管理区的内存进行分配。由于 当前第一内存管理区的回收模式是根据当前第一内存管理区所属节点的拓扑情况来确定的,即当前第一内存管理区的回收模式并不是固定不变的,根据所属节点拓扑情况的变化,当前第一内存管理区的回收模式在回收与不回收之间相应的发生变化,因此在确定当前第一内存管理区的回收模式时,充分考虑本地节点的每个内存管理区的内存大小的情况,通过这种方式,可以最大限度地保证本地内存在本地进行分配,尽量避免不必要的内存远端访问,从而减少对系统性能的影响。
    参阅图4,图4是本发明内存回收与分配的方法在实际应用中确定回收模式的流程图,该流程是以循环的方式进行的,包括:
    步骤S301:判断当前第一内存管理区是否是所属节点唯一的内存管理区。如果是所属节点唯一的内存管理区,进入步骤S302,如果不是所属节点唯一的内存管理区,进入步骤S304。
    步骤S302:判断系统内存管理区链表Zonelist中下一个内存管理区与当前第一内存管理区之间的距离是否大于预设回收距离。如果是大于预设回收距离,则进入步骤S303,如果小于或等于预设回收距离,则进入步骤S305。
    步骤S303:若大于预设回收距离,则当前第一内存管理区的回收模式是回收当前第一内存管理区。
    步骤S304:判断当前第一内存管理区是否是所属节点的最后一个内存管理区。如果是所属节点的最后一个内存管理区,进入步骤S302,如果不是所属节点的最后一个内存管理区,进入步骤S305。
    步骤S305:若不是所属节点的最后一个内存管理区或者小于或等于预设回收距离,则当前第一内存管理区的回收模式是不回收当前第一内存管理区。
    通过上述方式,可以根据系统的具体情况,及时地调整指定内存管理区的回收模式。
    参阅图5,图5是本发明内存回收与分配的方法在实际应用中回收内存与分配内存的控制流程图,该流程是以循环的方式进行的,包括:
    步骤S401:接收内存分配请求后,判断当前第一内存管理区的内存 空间是否满足预定大小。如果满足预定大小,进入步骤S402,如果不满足预定大小,进入步骤S403。
    步骤S402:分配当前第一内存管理区的内存。
    步骤S403:判断当前第一内存管理区的回收模式是否表示回收当前第一内存管理区。如果表示回收当前第一内存管理区,进入步骤S404,如果表示不是回收当前第一内存管理区,进入步骤S405。
    步骤S404:回收当前第一内存管理区,进入步骤S402。
    步骤S405:判断系统内存管理区链表Zonelist中下一个内存管理区与当前第一内存管理区之间的距离是否大于预设回收距离。如果是大于预设回收距离,进入步骤S404,如果小于或等于预设回收距离,进入步骤S406。
    步骤S406:判断系统内存管理区链表Zonelist中与当前第一内存管理区之间的距离小于或等于预设回收距离的下一个内存管理区(即第三内存管理区)的空闲内存是否大于预设阈值。如果是大于预设阈值,进入步骤S407,如果不是大于预设阈值,进入步骤S405。
    步骤S407:分配空闲内存大于预设阈值的第三内存管理区的内存。
    通过设置空闲内存的预设阈值,可以尽可能地优先保证本地内存在本地进行分配。
    下面以图1的NUMA系统为例,具体说明本发明在实际中的应用。如表1所示,在4个节点的NUMA系统中,其节点之间的距离关系如下:
    表1 NUMA系统中4个节点之间的距离关系
    节点0123010212132121103221221321021332212110
    节点的内存管理区(zone)分布和节点0(node0)的内存管理区链表(zonelist[0])如图6所示,虚线方向表示节点0的系统内存管理区链表(zonelist[0]),系统默认的回收距离为30,由于存在节点间的距离大 于回收距离30(如节点0和节点3的距离为32),因此按照本发明的技术方案确定的系统回收模式为“回收”,任何一个内存管理区发生内存不足时都直接进行回收内存,而不会去下一个内存管理区分配。
    本发明技术方案对该场景的实施具体如下:
    1)在建立节点0的内存管理区链表Zonelist时,根据表1提供的节点距离关系及图6的内存管理区分布,确定每个内存管理区的回收模式,结果如表2所示:
    表2 每个内存管理区的回收模式表

    注:直接内存存取管理区(DMA,Direct Memory Access),普通内存管理区(NORMAL),可移动内存管理区(MOVABLE)。
    2)在内存管理区发生内存不足时,根据回收模式确定是否回收内存,如节点0的movable zone内存不足时,由于其回收模式为“不回收”,则可以直接到内存管理区链表Zonelist中的下一个内存管理区,即节点0的normal zone分配内存,因为两个内存管理区为同一个节点,不会带来任何性能损失,而如果直接回收movable zone,则不但阻塞当前进程,而且降低被回收的进程性能;如果节点0的DMA内存不足时,则要自己回收后再分配。
    参阅图7,图7是本发明内存回收与分配的方法又一实施方式的流程图,包括:
    首先,建立当前第一内存管理区的备用内存管理区链表Zonelist,其中建立当前第一内存管理区的备用内存管理区链表Zonelist的步骤包括:步骤S501和步骤S502。
    步骤S501:判断系统内存管理区链表Zonelist中是否存在与当前第 一内存管理区之间的距离小于等于预设回收距离的第四内存管理区。
    系统内存管理区链表Zonelist中,第四内存管理区与当前第一内存管理区之间的距离小于等于预设回收距离,说明第四内存管理区与当前第一内存管理区之间的物理距离比较近,第四内存管理区可以作为当前第一内存管理区的备用内存管理区。
    步骤S502:若存在与当前第一内存管理区之间的距离小于预设回收距离的第四内存管理区,则将与当前第一内存管理区之间的距离小于预设回收距离的第四内存管理区添加到当前第一内存管理区的备用内存管理区链表Zonelist中。
    如果存在与当前第一内存管理区之间的距离小于预设回收距离的第四内存管理区,将第四内存管理区添加到当前第一内存管理区的备用内存管理区链表Zonelist中,以作为当前第一内存管理区的备用内存管理区。
    步骤S503:接收内存分配请求。
    当进程需要内存时,首先获得进程所在处理器的节点,在该节点上找到一个合适的当前第一内存管理区,向该第一内存管理区发送内存分配请求,当前的第一内存管理区接收该内存分配请求。
    节点是系统的一个逻辑单位,包括处理器、内存、外设等。内存管理是指软件运行时对计算机内存资源的分配和使用的技术。每个节点的内存被分为多个块,每个内存块称为内存管理区(zones),它表示物理内存中的一段区域。
    步骤S504:若当前第一内存管理区的内存不满足预定的大小,则判断当前第一内存管理区已建立的备用内存管理区链表Zonelist中是否存在满足预定大小的第四内存管理区。如果存在满足预定大小的第四内存管理区,进入步骤S505,如果不存在满足预定大小的第四内存管理区,进入步骤S506。
    步骤S505:若存在满足预定大小的第四内存管理区,则分配备用内存管理区链表Zonelist中满足预定大小的第四内存管理区的内存。
    步骤S506:对当前第一内存管理区进行回收。
    如果当前第一内存管理区的回收模式是回收当前第一内存管理区,则对当前第一内存管理区进行回收。
    步骤S507:响应于内存分配请求,对回收后的当前第一内存管理区的内存进行分配。
    将当前第一内存管理区回收后,再对该回收后的当前第一内存管理区的内存进行分配。从而可以尽量实现本地内存在本地进行分配。
    通过上述方式,可以实时地调整当前第一内存管理区的备用内存管理区,在发生内存不足时,根据当前第一内存管理区的备用内存管理区,决定是本地回收后分配,还是进行非本地节点内存分配,尽量满足本地内存在本地进行分配,以提高系统性能。
    参阅图8,图8是本发明内存回收与分配的装置一实施方式的结构示意图,该装置包括:接收模块101、第一判断模块102、回收模块103以及第一分配模块104。
    接收模块101用于接收内存分配请求。
    当进程需要内存时,首先获得进程所在处理器的节点,在该节点上找到一个合适的当前第一内存管理区,向该第一内存管理区发送内存分配请求,当前的第一内存管理区接收该内存分配请求。
    第一判断模块102用于在接收模块101接收内存分配请求后,在当前第一内存管理区的内存不满足预定的大小时,判断当前第一内存管理区的回收模式是否表示回收当前第一内存管理区,其中,当前第一内存管理区的回收模式是根据当前第一内存管理区所属节点的拓扑情况来确定的。
    由于当前第一内存管理区的回收模式是根据当前第一内存管理区所属节点的拓扑情况来确定的,即当前第一内存管理区的回收模式并不是固定不变的,根据所属节点拓扑情况的变化,当前第一内存管理区的回收模式在回收与不回收之间相应的发生变化,因此在确定当前第一内存管理区的回收模式时,充分考虑本地节点的每个内存管理区的内存大小的情况,可以很好地保证本地内存在本地进行分配,避免造成不必要的内存远端访问,减少系统影响。
    接收内存分配请求后,如果当前第一内存管理区的内存不满足预定的大小,即可判断当前第一内存管理区的回收模式是否表示回收当前第一内存管理区。接收内存分配请求后,如果当前第一内存管理区的内存满足预定的大小,则可以直接分配当前第一内存管理区的内存。
    回收模块103用于在第一判断模块102的判断结果为当前第一内存管理区的回收模式表示回收当前第一内存管理区时,对当前第一内存管理区进行回收。
    如果当前第一内存管理区的回收模式是回收当前第一内存管理区,则对当前第一内存管理区进行回收。
    第一分配模块104用于在回收模块103回收当前第一内存管理区后,响应于内存分配请求,对回收后的当前第一内存管理区的内存进行分配。
    将当前第一内存管理区回收后,再对该回收后的当前第一内存管理区的内存进行分配。从而可以尽量实现本地内存在本地进行分配。
    本发明实施方式在接收内存分配请求后,在当前第一内存管理区的内存不满足预定的大小时,判断当前第一内存管理区的回收模式是否是回收当前第一内存管理区,其中,当前第一内存管理区的回收模式是根据当前第一内存管理区所属节点的拓扑情况来确定的;若当前第一内存管理区的回收模式是回收当前第一内存管理区,则对当前第一内存管理区进行回收;对回收后的当前第一内存管理区的内存进行分配。由于当前第一内存管理区的回收模式是根据当前第一内存管理区所属节点的拓扑情况来确定的,即当前第一内存管理区的回收模式并不是固定不变的,根据所属节点拓扑情况的变化,当前第一内存管理区的回收模式在回收与不回收之间相应的发生变化,因此在确定当前第一内存管理区的回收模式时,充分考虑本地节点的每个内存管理区的内存大小的情况,通过这种方式,可以最大限度地保证本地内存在本地进行分配,尽量避免不必要的内存远端访问,从而减少对系统性能的影响。
    参阅图9,图9是本发明内存回收与分配的装置另一实施方式的结构示意图,该装置包括:确定模块201、接收模块202、第一判断模块 203、回收模块204以及第一分配模块205。
    确定模块201用于根据当前第一内存管理区所属节点的拓扑情况确定当前第一内存管理区的回收模式。确定模块201包括:第一判断单元2011和回收结果获得单元2012。
    第一判断单元2011用于在当前第一内存管理区是当前第一内存管理区所属节点的最后一个内存管理区时,判断系统内存管理区链表Zonelist中是否存在与当前第一内存管理区之间的距离大于预设回收距离的第二内存管理区。
    回收结果获得单元2012用于在第一判断单元2011的判断结果为存在与当前第一内存管理区之间的距离大于预设回收距离的第二内存管理区时,确定当前第一内存管理区的回收模式是回收当前第一内存管理区。
    接收模块202用于接收内存分配请求。
    当进程需要内存时,首先获得进程所在处理器的节点,在该节点上找到一个合适的当前第一内存管理区,向该第一内存管理区发送内存分配请求,当前的第一内存管理区接收该内存分配请求。
    第一判断模块203用于在接收模块202接收内存分配请求后,在当前第一内存管理区的内存不满足预定的大小时,判断当前第一内存管理区的回收模式是否表示回收当前第一内存管理区,其中,当前第一内存管理区的回收模式是根据当前第一内存管理区所属节点的拓扑情况来确定的。
    由于当前第一内存管理区的回收模式是根据当前第一内存管理区所属节点的拓扑情况来确定的,即当前第一内存管理区的回收模式并不是固定不变的,根据所属节点拓扑情况的变化,当前第一内存管理区的回收模式在回收与不回收之间相应的发生变化,因此在确定当前第一内存管理区的回收模式时,充分考虑本地节点的每个内存管理区的内存大小的情况,可以很好地保证本地内存在本地进行分配,避免造成不必要的内存远端访问,减少系统影响。
    接收内存分配请求后,如果当前第一内存管理区的内存不满足预定 的大小,即可判断当前第一内存管理区的回收模式是否表示回收当前第一内存管理区。接收内存分配请求后,如果当前第一内存管理区的内存满足预定的大小,则可以直接分配当前第一内存管理区的内存。
    回收模块204用于在第一判断模块203的判断结果为当前第一内存管理区的回收模式表示回收当前第一内存管理区时,对当前第一内存管理区进行回收。
    如果当前第一内存管理区的回收模式是回收当前第一内存管理区,则对当前第一内存管理区进行回收。
    第一分配模块205用于在回收模块204回收当前第一内存管理区后,响应于内存分配请求,对回收后的当前第一内存管理区的内存进行分配。
    将当前第一内存管理区回收后,再对该回收后的当前第一内存管理区的内存进行分配。从而可以尽量实现本地内存在本地进行分配。
    该装置还包括:第二判断模块206和第二分配模块207。
    第二判断模块206用于在存在与当前第一内存管理区之间的距离小于或等于预设回收距离的第三内存管理区时,判断系统内存管理区链表Zonelist中是否存在空闲内存大于预设阈值的第三内存管理区。
    若存在与当前第一内存管理区之间的距离小于或等于预设回收距离的第三内存管理区,则当前第一内存管理区的回收模式是不回收当前第一内存管理区,此时判断系统内存管理区链表Zonelist中是否存在空闲内存大于预设阈值的第三内存管理区。
    由于第三内存管理区的空闲内存是预先设置的,因此通过系统提供的接口,用户可以根据实际情况,设置第三内存管理区空闲内存的阈值,以此来确定是否将第三内存管理区用于非本地的内存分配,即尽量优先保证第三内存管理区所属节点的本地内存的分配需求。
    第二分配模块207用于在第二判断模块206的判断结果为存在空闲内存大于预设阈值的第三内存管理区时,响应于内存分配请求,分配空闲内存大于预设阈值的第三内存管理区的内存。
    如果存在空闲内存大于预设阈值的第三内存管理区,则表明第三内 存管理区可以用于非本地内存分配,因此可以分配空闲内存大于预设阈值的第三内存管理区的内存。
    通过这种为内存管理区设置空闲内存的阈值的方式,可以优先保证本地内存在本地进行分配的需求,在满足本地内存需求的基础上,才可以将本地内存用于非本地节点的内存分配。
    本发明实施方式在接收内存分配请求后,若当前第一内存管理区的内存不满足预定的大小,则判断当前第一内存管理区的回收模式是否是回收当前第一内存管理区,其中,当前第一内存管理区的回收模式是根据当前第一内存管理区所属节点的拓扑情况来确定的;若当前第一内存管理区的回收模式是回收当前第一内存管理区,则对当前第一内存管理区进行回收;对回收后的当前第一内存管理区的内存进行分配。由于当前第一内存管理区的回收模式是根据当前第一内存管理区所属节点的拓扑情况来确定的,即当前第一内存管理区的回收模式并不是固定不变的,根据所属节点拓扑情况的变化,当前第一内存管理区的回收模式在回收与不回收之间相应的发生变化,因此在确定当前第一内存管理区的回收模式时,充分考虑本地节点的每个内存管理区的内存大小的情况,通过这种方式,可以最大限度地保证本地内存在本地进行分配,尽量避免不必要的内存远端访问,从而减少对系统性能的影响。
    参阅图10,图10是本发明内存回收与分配的装置又一实施方式的结构示意图,该装置包括:建立模块301、接收模块302、第三判断模块303、第三分配模块304、回收模块305以及第一分配模块306。
    建立模块301用于建立当前第一内存管理区的备用内存管理区链表Zonelist,建立模块301包括:第二判断单元3011和添加单元3012。
    第二判断单元3011用于判断系统内存管理区链表Zonelist中是否存在与当前第一内存管理区之间的距离小于等于预设回收距离的第四内存管理区。
    添加单元3012用于在第二判断单元3011的判断结果为存在与当前第一内存管理区之间的距离小于预设回收距离的第四内存管理区时,将与当前第一内存管理区之间的距离小于预设回收距离的第四内存管理 区添加到当前第一内存管理区的备用内存管理区链表Zonelist中。
    接收模块302用于接收内存分配请求。
    当进程需要内存时,首先获得进程所在处理器的节点,在该节点上找到一个合适的当前第一内存管理区,向该第一内存管理区发送内存分配请求,当前的第一内存管理区接收该内存分配请求。
    第三判断模块303用于在当前第一内存管理区的内存不满足预定的大小时,判断当前第一内存管理区已建立的备用内存管理区链表Zonelist中是否存在满足预定大小的第四内存管理区。
    第三分配模块304用于在第三判断模块303的判断结果为存在满足预定大小的第四内存管理区时,分配备用内存管理区链表Zonelist中满足预定大小的第四内存管理区的内存。
    回收模块305用于在当前第一内存管理区的回收模式表示回收当前第一内存管理区时,对当前第一内存管理区进行回收。
    如果当前第一内存管理区的回收模式是回收当前第一内存管理区,则对当前第一内存管理区进行回收。
    第一分配模块306用于响应于内存分配请求,对回收后的当前第一内存管理区的内存进行分配。
    将当前第一内存管理区回收后,再对该回收后的当前第一内存管理区的内存进行分配。从而可以尽量实现本地内存在本地进行分配。
    通过上述方式,可以实时地调整当前第一内存管理区的备用内存管理区,在发生内存不足时,根据当前第一内存管理区的备用内存管理区,决定是本地回收后分配,还是进行非本地节点内存分配,尽量满足本地内存在本地进行分配,以提高系统性能。
    参阅图11,图11是本发明实施方式提供的一种计算节点的结构示意图,该计算节点400包括:至少一个处理器401,例如CPU,至少一个网络接口404或者其他用户接口403,存储器405,至少一个通信总线402。通信总线402用于实现这些组件之间的连接通信。该计算节点600可选的包含用户接口403,包括显示器,键盘或者点击设备(例如,鼠标,轨迹球(trackball),触感板或者触感显示屏)。存储器405可能 包含高速RAM存储器,也可能还包括非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。存储器405可选的可以包含至少一个位于远离前述处理器401的存储装置。
    在一些实施方式中,存储器405存储了如下的元素,可执行模块或者数据结构,或者他们的子集,或者他们的扩展集:
    操作系统4051,包含各种系统程序,用于实现各种基础业务以及处理基于硬件的任务;
    应用程序模块4052,包含各种应用程序,用于实现各种应用业务。
    应用程序模块4052中包括但不限接收模块、第一判断模块、回收模块以及第一分配模块。
    应用程序模块4052中各模块的具体实现参见图8至图9所示实施方式中的相应模块,在此不赘述。
    在本发明实施方式中,通过调用存储器405存储的程序或指令,处理器401用于:接收内存分配请求;在接收内存分配请求后,若当前第一内存管理区的内存不满足预定的大小,则判断当前第一内存管理区的回收模式是否表示回收当前第一内存管理区,其中,当前第一内存管理区的回收模式是根据当前第一内存管理区所属节点的拓扑情况来确定的;若当前第一内存管理区的回收模式表示回收当前第一内存管理区,则对当前第一内存管理区进行回收;响应于内存分配请求,对回收后的当前第一内存管理区的内存进行分配。
    在上述各个实施方式中,进一步地,所述处理器401还用于:根据当前第一内存管理区所属节点的拓扑情况确定当前第一内存管理区的回收模式。
    所述处理器401还用于:若当前第一内存管理区是当前第一内存管理区所属节点的最后一个内存管理区,则判断系统内存管理区链表Zonelist中是否存在与当前第一内存管理区之间的距离大于预设回收距离的第二内存管理区;若存在与当前第一内存管理区之间的距离大于预设回收距离的第二内存管理区,则确定当前第一内存管理区的回收模式是回收当前第一内存管理区。
    所述处理器401还用于:若存在与当前第一内存管理区之间的距离小于或等于预设回收距离的第三内存管理区,则判断系统内存管理区链表Zonelist中是否存在空闲内存大于预设阈值的第三内存管理区;若存在空闲内存大于预设阈值的第三内存管理区,则响应于内存分配请求,分配空闲内存大于预设阈值的第三内存管理区的内存。
    所述处理器401还用于:若当前第一内存管理区的内存不满足预定的大小,则判断当前第一内存管理区已建立的备用内存管理区链表Zonelist中是否存在满足预定大小的第四内存管理区;若存在满足预定大小的第四内存管理区,则响应于内存分配请求,分配备用内存管理区链表Zonelist中满足预定大小的第四内存管理区的内存。
    所述处理器401还用于:建立当前第一内存管理区的备用内存管理区链表Zonelist。
    所述处理器401还用于:判断系统内存管理区链表Zonelist中是否存在与当前第一内存管理区之间的距离小于等于预设回收距离的第四内存管理区;若存在与当前第一内存管理区之间的距离小于预设回收距离的第四内存管理区,则将与当前第一内存管理区之间的距离小于预设回收距离的第四内存管理区添加到当前第一内存管理区的备用内存管理区链表Zonelist中。
    可见,采用上述方案后,由于当前第一内存管理区的回收模式是根据所述当前第一内存管理区所属节点的拓扑情况来确定的,即当前第一内存管理区的回收模式并不是固定不变的,根据所属节点拓扑情况的变化,当前第一内存管理区的回收模式在回收与不回收之间相应的发生变化,因此在确定当前第一内存管理区的回收模式时,充分考虑本地节点的每个内存管理区的内存大小的情况,通过这种方式,可以最大限度地保证本地内存在本地进行分配,尽量避免不必要的内存远端访问,从而减少对系统性能的影响。
    在本发明所提供的几个实施方式中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施方式仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑 功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
    所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施方式方案的目的。
    另外,在本发明各个实施方式中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
    所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明各个实施方式所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
    以上所述仅为本发明的实施方式,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

    关 键  词:
    内存 回收 分配 方法 装置
      专利查询网所有文档均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    0条评论

    还可以输入200字符

    暂无评论,赶快抢占沙发吧。

    关于本文
    本文标题:内存回收与分配的方法及装置.pdf
    链接地址:https://www.zhuanlichaxun.net/p-4837917.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2017-2018 zhuanlichaxun.net网站版权所有
    经营许可证编号:粤ICP备2021068784号-1