《内存回收与分配的方法及装置.pdf》由会员分享,可在线阅读,更多相关《内存回收与分配的方法及装置.pdf(28页完整版)》请在专利查询网上搜索。
1、(10)申请公布号 CN 103365784 A (43)申请公布日 2013.10.23 CN 103365784 A *CN103365784A* (21)申请号 201310263454.3 (22)申请日 2013.06.27 G06F 12/02(2006.01) (71)申请人 华为技术有限公司 地址 518129 广东省深圳市龙岗区坂田华为 总部办公楼 (72)发明人 吴建国 裘稀石 (74)专利代理机构 深圳市威世博知识产权代理 事务所 ( 普通合伙 ) 44280 代理人 何青瓦 (54) 发明名称 内存回收与分配的方法及装置 (57) 摘要 本发明公开了一种内存回收与分配的。
2、方法及 装置, 该方法包括 : 接收内存分配请求 ; 在接收内 存分配请求后, 若当前第一内存管理区的内存不 满足预定的大小, 则判断当前第一内存管理区的 回收模式是否表示回收当前第一内存管理区, 其 中, 当前第一内存管理区的回收模式是根据当前 第一内存管理区所属节点的拓扑情况来确定的 ; 若当前第一内存管理区的回收模式表示回收当前 第一内存管理区, 则对当前第一内存管理区进行 回收 ; 响应于内存分配请求, 对回收后的当前第 一内存管理区的内存进行分配。 通过上述方式, 本 发明能够最大限度地保证本地内存在本地进行分 配, 尽量避免不必要的内存远端访问, 从而减少对 系统性能的影响。 (5。
3、1)Int.Cl. 权利要求书 3 页 说明书 16 页 附图 8 页 (19)中华人民共和国国家知识产权局 (12)发明专利申请 权利要求书3页 说明书16页 附图8页 (10)申请公布号 CN 103365784 A CN 103365784 A *CN103365784A* 1/3 页 2 1. 一种内存回收与分配的方法, 其特征在于, 包括 : 接收内存分配请求 ; 在接收所述内存分配请求后, 若当前第一内存管理区的内存不满足预定的大小, 则判 断所述当前第一内存管理区的回收模式是否表示回收所述当前第一内存管理区, 其中, 所 述当前第一内存管理区的回收模式是根据所述当前第一内存管理区。
4、所属节点的拓扑情况 来确定的 ; 若所述当前第一内存管理区的回收模式表示回收所述当前第一内存管理区, 则对所述 当前第一内存管理区进行回收 ; 响应于所述内存分配请求, 对回收后的所述当前第一内存管理区的内存进行分配。 2. 根据权利要求 1 所述的方法, 其特征在于, 所述方法还包括 : 根据所述当前第一内存 管理区所属节点的拓扑情况确定所述当前第一内存管理区的回收模式。 3. 根据权利要求 2 所述的方法, 其特征在于, 所述根据所述当前第一内存管理区所属 节点的拓扑情况确定所述当前第一内存管理区的回收模式的步骤, 包括 : 若所述当前第一内存管理区是所述当前第一内存管理区所属节点的最后一。
5、个内存管 理区, 则判断系统内存管理区链表 Zonelist 中是否存在与所述当前第一内存管理区之间 的距离大于预设回收距离的第二内存管理区 ; 若存在与所述当前第一内存管理区之间的距离大于预设回收距离的第二内存管理区, 则确定所述当前第一内存管理区的回收模式是回收所述当前第一内存管理区。 4. 根据权利要求 3 所述的方法, 其特征在于, 所述判断系统内存管理区链表 Zonelist 中是否存在与所述当前第一内存管理区之间的距离大于预设回收距离的第二内存管理区 的步骤之后, 还包括 : 若存在与所述当前第一内存管理区之间的距离小于或等于所述预设回收距离的第三 内存管理区, 则判断所述系统内存。
6、管理区链表 Zonelist 中是否存在空闲内存大于预设阈 值的第三内存管理区 ; 若存在空闲内存大于预设阈值的第三内存管理区, 则响应于所述内存分配请求, 分配 所述空闲内存大于预设阈值的第三内存管理区的内存。 5. 根据权利要求 1 所述的方法, 其特征在于, 所述判断当前第一内存管理区的回收模 式是否表示回收所述当前第一内存管理区的步骤之前, 还包括 : 若所述当前第一内存管理区的内存不满足预定的大小, 则判断所述当前第一内存管理 区已建立的备用内存管理区链表 Zonelist 中是否存在满足预定大小的第四内存管理区 ; 若存在满足预定大小的第四内存管理区, 则响应于所述内存分配请求, 。
7、分配所述备用 内存管理区链表 Zonelist 中满足预定大小的第四内存管理区的内存。 6. 根据权利要求 5 所述的方法, 其特征在于, 所述方法还包括 : 建立当前第一内存管理 区的备用内存管理区链表 Zonelist ; 所述建立当前第一内存管理区的备用内存管理区链表 Zonelist 的步骤, 包括 : 判断所述系统内存管理区链表 Zonelist 中是否存在与当前第一内存管理区之间的距 离小于等于预设回收距离的第四内存管理区 ; 若存在与当前第一内存管理区之间的距离小于预设回收距离的第四内存管理区, 则将 所述与当前第一内存管理区之间的距离小于预设回收距离的第四内存管理区添加到所述 。
8、权 利 要 求 书 CN 103365784 A 2 2/3 页 3 当前第一内存管理区的备用内存管理区链表 Zonelist 中。 7. 一种内存回收与分配的装置, 其特征在于, 所述装置包括 : 接收模块、 第一判断模 块、 回收模块以及第一分配模块 ; 所述接收模块用于接收内存分配请求 ; 所述第一判断模块用于在所述接收模块接收所述内存分配请求后, 在当前第一内存管 理区的内存不满足预定的大小时, 判断所述当前第一内存管理区的回收模式是否表示回收 所述当前第一内存管理区, 其中, 所述当前第一内存管理区的回收模式是根据所述当前第 一内存管理区所属节点的拓扑情况来确定的 ; 所述回收模块用。
9、于在所述第一判断模块的判断结果为所述当前第一内存管理区的回 收模式表示回收所述当前第一内存管理区时, 对所述当前第一内存管理区进行回收 ; 所述第一分配模块用于在所述回收模块回收当前第一内存管理区后, 响应于所述内存 分配请求, 对回收后的所述当前第一内存管理区的内存进行分配。 8. 根据权利要求 7 所述的装置, 其特征在于, 所述装置还包括确定模块, 所述确定模块 用于根据当前第一内存管理区所属节点的拓扑情况确定所述当前第一内存管理区的回收 模式。 9. 根据权利要求 8 所述的装置, 其特征在于, 所述确定模块包括 : 第一判断单元和回收 结果单元 ; 所述第一判断单元用于在所述当前第一。
10、内存管理区是所述当前第一内存管理区所属 节点的最后一个内存管理区时, 判断系统内存管理区链表 Zonelist 中是否存在与所述当 前第一内存管理区之间的距离大于预设回收距离的第二内存管理区 ; 所述回收结果获得单元用于在所述第一判断单元的判断结果为存在与所述当前第一 内存管理区之间的距离大于预设回收距离的第二内存管理区时, 确定所述当前第一内存管 理区的回收模式是回收所述当前第一内存管理区。 10. 根据权利要求 9 所述的装置, 其特征在于, 所述装置还包括 : 第二判断模块和第二 分配模块 ; 所述第二判断模块用于在存在与所述当前第一内存管理区之间的距离小于或等于所 述预设回收距离的第三。
11、内存管理区时, 判断所述系统内存管理区链表 Zonelist 中是否存 在空闲内存大于预设阈值的第三内存管理区 ; 所述第二分配模块用于在所述第二判断模块的判断结果为存在空闲内存大于预设阈 值的第三内存管理区时, 响应于所述内存分配请求, 分配所述空闲内存大于预设阈值的第 三内存管理区的内存。 11. 根据权利要求 7 所述的装置, 其特征在于, 所述装置还包括 : 第三判断模块和第三 分配模块 ; 所述第三判断模块用于在所述当前第一内存管理区的内存不满足预定的大小时, 判断 所述当前第一内存管理区已建立的备用内存管理区链表 Zonelist 中是否存在满足预定大 小的第四内存管理区 ; 所述。
12、第三分配模块用于在所述第三判断模块的判断结果为存在满足预定大小的第四 内存管理区时, 响应于所述内存分配请求, 分配所述备用内存管理区链表 Zonelist 中满足 预定大小的第四内存管理区的内存。 权 利 要 求 书 CN 103365784 A 3 3/3 页 4 12. 根据权利要求 11 所述的装置, 其特征在于, 所述装置还包括建立模块, 所述建立模 块用于建立当前第一内存管理区的备用内存管理区链表 Zonelist, 所述建立模块包括 : 第 二判断单元和添加单元 ; 所述第二判断单元用于判断系统内存管理区链表 Zonelist 中是否存在与当前第一内 存管理区之间的距离小于等于预。
13、设回收距离的第四内存管理区 ; 所述添加单元用于在所述第二判断单元的判断结果为存在与当前第一内存管理区之 间的距离小于预设回收距离的第四内存管理区时, 将所述与当前第一内存管理区之间的距 离小于预设回收距离的第四内存管理区添加到所述当前第一内存管理区的备用内存管理 区链表 Zonelist 中。 权 利 要 求 书 CN 103365784 A 4 1/16 页 5 内存回收与分配的方法及装置 技术领域 0001 本发明涉及计算机应用技术领域, 特别是涉及一种内存回收与分配的方法及装 置。 背景技术 0002 随着计算机技术的迅速发展, 人们对计算机的需求日趋增长。 单个处理器 (CPU) 的。
14、 运算能力有限, 人们迫切需要将多个处理器组成一个系统, 非一致访问分布共享存储技术 (NUMA, Non Uniform Memory Access Architecture) , 因其架构具有高可扩展性, 正在被越 来越多地运用在服务器领域。 0003 NUMA 是一种分布式结构, 其特点是 : 任一处理器可以访问任意的内存、 外设等 ; 每 个处理器访问不同的内存时, 存在着不同的延迟。因此, 内存管理最主要的目的是高效、 快 速地分配内存, 使每个 CPU 都尽可能地访问本地内存, 并且在适当的时候释放和回收内存 资源。现有内存管理技术提供一个 “回收模式” 属性, 当发生某一个内存管。
15、理区的内存不足 而无法满足当前分配的情况时, 内存管理系统根据 “回收模式” 的值来决定下一步的动作 : 当 “回收模式” 为 “回收” 时, 则阻塞当前分配, 先对该内存管理区进行空闲内存回收, 回收 结束后重新尝试在该内存管理区进行分配 ; 当 “回收模式” 为 “不回收” 时, 则继续寻找内存 管理区链表, 以获取下一个满足需求的内存管理区进行内存分配。 0004 本申请的研发人员在长期的研发中发现, 在现有的技术方案中,“回收模式” 为全 局属性, 系统在确定 “回收模式” 的值时是根据当前系统中是否存在任意的两个节点之间的 距离大于预先设定的 “回收距离” , 这种确定 “回收模式”。
16、 值的方案使得系统的控制粒度太 大, 无法很好地保证本地内存本地分配, 造成不必要的内存远端访问, 影响系统性能。 发明内容 0005 本发明主要解决的技术问题是提供一种内存回收与分配的方法及装置, 能够最大 限度地保证本地内存在本地进行分配, 一定程度避免不必要的内存远端访问, 从而减少对 系统性能的影响。 0006 第一方面, 本发明提供一种内存回收与分配的方法, 包括 : 接收内存分配请求 ; 在 接收所述内存分配请求后, 若当前第一内存管理区的内存不满足预定的大小, 则判断当前 第一内存管理区的回收模式是否表示回收所述当前第一内存管理区, 其中, 所述当前第一 内存管理区的回收模式是根。
17、据所述当前第一内存管理区所属节点的拓扑情况来确定的 ; 若 所述当前第一内存管理区的回收模式表示回收所述当前第一内存管理区, 则对所述当前第 一内存管理区进行回收 ; 响应于所述内存分配请求, 对回收后的所述当前第一内存管理区 的内存进行分配。 0007 在第一方面的第一种可能的实现方式中, 所述方法还包括 : 根据所述当前第一内 存管理区所属节点的拓扑情况确定所述当前第一内存管理区的回收模式。 0008 结合第一方面的第一种可能的实现方式, 在第一方面的第二种可能的实现方式 说 明 书 CN 103365784 A 5 2/16 页 6 中, 所述根据所述当前第一内存管理区所属节点的拓扑情况。
18、确定所述当前第一内存管理区 的回收模式的步骤, 包括 : 若所述当前第一内存管理区是所述当前第一内存管理区所属节 点的最后一个内存管理区, 则判断系统内存管理区链表 Zonelist 中是否存在与所述当前 第一内存管理区之间的距离大于预设回收距离的第二内存管理区 ; 若存在与所述当前第一 内存管理区之间的距离大于预设回收距离的第二内存管理区, 则确定所述当前第一内存管 理区的回收模式是回收所述当前第一内存管理区。 0009 结合第一方面的第二种可能的实现方式, 在第一方面的第三种可能的实现方式 中, 所述判断系统内存管理区链表 Zonelist 中是否存在与所述当前第一内存管理区之间 的距离大。
19、于预设回收距离的第二内存管理区的步骤之后, 还包括 : 若存在与所述当前第一 内存管理区之间的距离小于或等于所述预设回收距离的第三内存管理区, 则判断所述系统 内存管理区链表 Zonelist 中是否存在空闲内存大于预设阈值的第三内存管理区 ; 若存在 空闲内存大于预设阈值的第三内存管理区, 则响应于所述内存分配请求, 分配所述空闲内 存大于预设阈值的第三内存管理区的内存。 0010 在第一方面的第四种可能的实现方式中, 所述判断当前第一内存管理区的回收模 式是否表示回收所述当前第一内存管理区的步骤之前, 还包括 : 若所述当前第一内存管理 区的内存不满足预定的大小, 则判断所述当前第一内存管。
20、理区已建立的备用内存管理区链 表 Zonelist 中是否存在满足预定大小的第四内存管理区 ; 若存在满足预定大小的第四内 存管理区, 则响应于所述内存分配请求, 分配所述备用内存管理区链表 Zonelist 中满足预 定大小的第四内存管理区的内存。 0011 结合第一方面的第四种可能的实现方式, 在第一方面的第五种可能的实现方式 中, 所述方法还包括 : 建立当前第一内存管理区的备用内存管理区链表 Zonelist ; 所述建 立当前第一内存管理区的备用内存管理区链表 Zonelist 的步骤, 包括 : 判断所述系统内存 管理区链表 Zonelist 中是否存在与当前第一内存管理区之间的距。
21、离小于等于预设回收距 离的第四内存管理区 ; 若存在与当前第一内存管理区之间的距离小于预设回收距离的第四 内存管理区, 则将所述与当前第一内存管理区之间的距离小于预设回收距离的第四内存管 理区添加到所述当前第一内存管理区的备用内存管理区链表 Zonelist 中。 0012 第二方面, 本发明提供一种内存回收与分配的装置, 所述装置包括 : 接收模块、 第 一判断模块、 回收模块以及第一分配模块 ; 所述接收模块用于接收内存分配请求 ; 所述第 一判断模块用于在所述接收模块接收所述内存分配请求后, 在当前第一内存管理区的内存 不满足预定的大小时, 判断当前第一内存管理区的回收模式是否表示回收所。
22、述当前第一内 存管理区, 并将所述判断结果向所述回收模块发送, 其中, 所述当前第一内存管理区的回收 模式是根据所述当前第一内存管理区所属节点的拓扑情况来确定的 ; 所述回收模块用于在 所述第一判断模块的判断结果为所述当前第一内存管理区的回收模式表示回收所述当前 第一内存管理区时, 对所述当前第一内存管理区进行回收 ; 所述第一分配模块用于在所述 回收模块回收当前第一内存管理区后, 响应于所述内存分配请求, 对回收后的所述当前第 一内存管理区的内存进行分配。 0013 在第二方面的第一种可能的实现方式中, 所述装置还包括确定模块, 所述确定模 块用于根据当前第一内存管理区所属节点的拓扑情况确定。
23、所述当前第一内存管理区的回 收模式。 说 明 书 CN 103365784 A 6 3/16 页 7 0014 结合第二方面的第一种可能的实现方式, 在第二方面的第二种可能的实现方式 中, 所述确定模块包括 : 第一判断单元和回收结果单元 ; 所述第一判断单元用于在所述当 前第一内存管理区是所述当前第一内存管理区所属节点的最后一个内存管理区时, 判断系 统内存管理区链表 Zonelist 中是否存在与所述当前第一内存管理区之间的距离大于预设 回收距离的第二内存管理区 ; 所述回收结果获得单元用于在所述第一判断单元的判断结果 为存在与所述当前第一内存管理区之间的距离大于预设回收距离的第二内存管理。
24、区时, 确 定所述当前第一内存管理区的回收模式是回收所述当前第一内存管理区。 0015 结合第二方面的第二种可能的实现方式, 在第二方面的第三种可能的实现方式 中, 所述装置还包括 : 第二判断模块和第二分配模块 ; 所述第二判断模块用于在存在与所 述当前第一内存管理区之间的距离小于或等于所述预设回收距离的第三内存管理区时, 判 断所述系统内存管理区链表 Zonelist 中是否存在空闲内存大于预设阈值的第三内存管理 区 ; 所述第二分配模块用于在所述第二判断模块的判断结果为存在空闲内存大于预设阈值 的第三内存管理区时, 响应于所述内存分配请求, 分配所述空闲内存大于预设阈值的第三 内存管理区。
25、的内存。 0016 在第二方面的第四种可能的实现方式中, 所述装置还包括 : 第三判断模块和第三 分配模块 ; 所述第三判断模块用于在所述当前第一内存管理区的内存不满足预定的大小 时, 判断所述当前第一内存管理区已建立的备用内存管理区链表 Zonelist 中是否存在满 足预定大小的第四内存管理区 ; 所述第三分配模块用于在所述第三判断模块的判断结果为 存在满足预定大小的第四内存管理区时, 响应于所述内存分配请求, 分配所述备用内存管 理区链表 Zonelist 中满足预定大小的第四内存管理区的内存。 0017 结合第二方面的第四种可能的实现方式, 在第二方面的第五种可能的实现方式 中, 所述。
26、装置还包括建立模块, 所述建立模块用于建立当前第一内存管理区的备用内存管 理区链表 Zonelist, 所述建立模块包括 : 第二判断单元和添加单元 ; 所述第二判断单元用 于判断系统内存管理区链表 Zonelist 中是否存在与当前第一内存管理区之间的距离小于 等于预设回收距离的第四内存管理区 ; 所述添加单元用于在所述第二判断单元的判断结果 为存在与当前第一内存管理区之间的距离小于预设回收距离的第四内存管理区时, 将所述 与当前第一内存管理区之间的距离小于预设回收距离的第四内存管理区添加到所述当前 第一内存管理区的备用内存管理区链表 Zonelist 中。 0018 本发明的有益效果是 :。
27、 区别于现有技术的情况, 本发明在接收内存分配请求后, 若 当前第一内存管理区的内存不满足预定的大小, 则判断当前第一内存管理区的回收模式是 否表示回收当前第一内存管理区, 其中, 当前第一内存管理区的回收模式是根据当前第一 内存管理区所属节点的拓扑情况来确定的 ; 若当前第一内存管理区的回收模式表示回收当 前第一内存管理区, 则对当前第一内存管理区进行回收 ; 对回收后的当前第一内存管理区 的内存进行分配。 由于当前第一内存管理区的回收模式是根据所述当前第一内存管理区所 属节点的拓扑情况来确定的, 即当前第一内存管理区的回收模式并不是固定不变的, 根据 所属节点拓扑情况的变化, 当前第一内存。
28、管理区的回收模式在回收与不回收之间相应的发 生变化, 因此在确定当前第一内存管理区的回收模式时, 充分考虑本地节点的每个内存管 理区的内存大小的情况, 通过这种方式, 可以最大限度地保证本地内存在本地进行分配, 尽 量避免不必要的内存远端访问, 从而减少对系统性能的影响。 说 明 书 CN 103365784 A 7 4/16 页 8 附图说明 0019 图 1 是本发明内存回收与分配的方法的 NUMA 系统框架示意图 ; 0020 图 2 是本发明内存回收与分配的方法一实施方式的流程图 ; 0021 图 3 是本发明内存回收与分配的方法另一实施方式的流程图 ; 0022 图 4 是本发明内存。
29、回收与分配的方法在实际应用中确定回收模式的流程图 ; 0023 图 5 是本发明内存回收与分配的方法在实际应用中回收与分配内存的控制流程 图 ; 0024 图 6 是本发明内存回收与分配的方法在实际应用中节点的内存管理区分布和节 点的内存管理区链表 ; 0025 图 7 是本发明内存回收与分配的方法又一实施方式的流程图 ; 0026 图 8 是本发明内存回收与分配的装置一实施方式的结构示意图 ; 0027 图 9 是本发明内存回收与分配的装置另一实施方式的结构示意图 ; 0028 图 10 是本发明内存回收与分配的装置又一实施方式的结构示意图 ; 0029 图 11 是本发明实施方式提供的一种。
30、计算节点的结构示意图。 具体实施方式 0030 下面结合附图和实施方式对本发明进行详细说明。 0031 参阅图 1, 图 1 是本发明内存回收与分配的方法的 NUMA 系统框架示意图, NUMA 是 由多个节点 (node) 组成的一个系统, 是一种分布式架构, 每个节点都拥有处理器、 内存和外 设等。在 NUMA 下, 内存访问时间取决于处理器的内存位置, 处理器访问它自己的本地内存 的速度比非本地内存的快一些。本发明技术实现的系统框图如图 1 所示, 每个节点都有本 地内存和远端内存, 内存分配时一般是进行本地内存分配, 若本地内存分配失败, 则考虑本 地内存回收后再分配或者进行远端内存分。
31、配。 0032 本发明就是提供一种更为有效、 更细粒度的内存回收控制策略, 以尽量做到本地 内存在本地进行分配, 便于提高系统性能。 0033 参阅图 2, 图 2 是本发明内存回收与分配的方法一实施方式的流程图, 包括 : 0034 步骤 S101 : 接收内存分配请求。 0035 当进程需要内存时, 首先获得进程所在处理器的节点, 在该节点上找到一个合适 的当前第一内存管理区, 向该第一内存管理区发送内存分配请求, 当前的第一内存管理区 接收该内存分配请求。 0036 节点是系统的一个逻辑单位, 包括处理器、 内存、 外设等。内存管理是指软件运 行时对计算机内存资源的分配和使用的技术。每个。
32、节点的内存被分为多个块, 每个内存 块称为内存管理区 (zones) , 它表示物理内存中的一段区域, 例如 X86_64 系统有 ZONE_ DMA(0-16M)、 ZONE_DMA32(16M-4G)、 ZONE_NORMAL 以及 ZONE_MOVABLE 管理区。 0037 步骤 S102 : 在接收内存分配请求后, 若当前第一内存管理区的内存不满足预定的 大小, 则判断当前第一内存管理区的回收模式是否表示回收当前第一内存管理区, 其中, 当 前第一内存管理区的回收模式是根据当前第一内存管理区所属节点的拓扑情况来确定的。 0038 由于当前第一内存管理区的回收模式是根据当前第一内存管理。
33、区所属节点的拓 说 明 书 CN 103365784 A 8 5/16 页 9 扑情况来确定的, 即当前第一内存管理区的回收模式并不是固定不变的, 根据所属节点拓 扑情况的变化, 当前第一内存管理区的回收模式在回收与不回收之间相应的发生变化, 因 此在确定当前第一内存管理区的回收模式时, 充分考虑本地节点的每个内存管理区的内存 大小的情况, 通过这种方式, 可以很好地保证本地内存在本地进行分配, 避免造成不必要的 内存远端访问, 减少系统影响。 0039 接收内存分配请求后, 如果当前第一内存管理区的内存不满足预定的大小, 即可 判断当前第一内存管理区的回收模式是否表示回收当前第一内存管理区。。
34、 接收内存分配请 求后, 如果当前第一内存管理区的内存满足预定的大小, 则可以直接分配当前第一内存管 理区的内存。 0040 步骤 S103 : 若当前第一内存管理区的回收模式表示回收当前第一内存管理区, 则 对当前第一内存管理区进行回收。 0041 如果当前第一内存管理区的回收模式是回收当前第一内存管理区, 则对当前第一 内存管理区进行回收。 0042 步骤 S104 : 响应于内存分配请求, 对回收后的当前第一内存管理区的内存进行分 配。 0043 将当前第一内存管理区回收后, 再对该回收后的当前第一内存管理区的内存进行 分配。从而可以尽量实现本地内存在本地进行分配的控制策略。 0044 。
35、本发明实施方式在接收内存分配请求后, 若当前第一内存管理区的内存不满足预 定的大小, 则判断当前第一内存管理区的回收模式是否表示回收当前第一内存管理区, 其 中, 当前第一内存管理区的回收模式是根据当前第一内存管理区所属节点的拓扑情况来确 定的 ; 若当前第一内存管理区的回收模式表示回收当前第一内存管理区, 则对当前第一内 存管理区进行回收 ; 对回收后的当前第一内存管理区的内存进行分配。由于当前第一内存 管理区的回收模式是根据当前第一内存管理区所属节点的拓扑情况来确定的, 即当前第一 内存管理区的回收模式并不是固定不变的, 根据所属节点拓扑情况的变化, 当前第一内存 管理区的回收模式在回收与。
36、不回收之间相应的发生变化, , 因此在确定当前第一内存管理 区的回收模式时, 充分考虑本地节点的每个内存管理区的内存大小的情况, 通过这种方式, 可以最大限度地保证本地内存在本地进行分配, 尽量避免不必要的内存远端访问, 从而减 少对系统性能的影响。 0045 参阅图 3, 图 3 是本发明内存回收与分配的方法另一实施方式的流程图, 包括 : 0046 步骤 S201 : 根据当前第一内存管理区所属节点的拓扑情况确定当前第一内存管 理区的回收模式。 0047 其中, 步骤 S201 包括 : 步骤 S201a、 步骤 S201b 以及步骤 S201c。 0048 步骤 S201a : 若当前第。
37、一内存管理区是当前第一内存管理区所属节点的最后一个 内存管理区, 则判断系统内存管理区链表 Zonelist 中是否存在与当前第一内存管理区之 间的距离大于预设回收距离的第二内存管理区。 0049 每个节点有两个内存管理区链表 (Zonelist) : 一个为本地内存管理区链表 Zonelist, 只包含本节点的内存管理区 ; 另一个为系统内存管理区链表 Zonelist, 包含了 系统所有节点的内存管理区。 0050 回收距离是指内存管理区与内存管理区之间的物理距离, 同一个节点内的内存管 说 明 书 CN 103365784 A 9 6/16 页 10 理区之间的物理距离在实际应用中可以忽。
38、略不计, 因此, 此处的回收距离在实际应用时主 要还是各个节点之间的物理距离。 0051 一旦 NUMA 系统确定后, 节点中各个内存管理区之间的距离也确定, 由于回收距离 可以预先设置, 也就是说根据 NUMA 系统在实际应用中的具体情况, 可以通过调整回收距 离, 及时调整各个节点内存管理区的回收模式, 具体实现时, 可以为用户提供接口, 利用该 接口, 用户可以调整指定内存管理区的回收控制策略。 0052 步骤 S201a 在执行的过程中, 具体的过程也可以是 : 0053 (1) 首先判断当前第一内存管理区是否是当前第一内存管理区所属节点的最后一 个内存管理区。 0054 (2) 如果。
39、当前第一内存管理区是所属节点唯一的内存管理区 (如果是唯一的内存 管理区, 当然也是最后一个内存管理区) 或虽然不是唯一的内存管理区, 但却是所属节点的 最后一个内存管理区, 则判断系统内存管理区链表 Zonelist 中是否存在与当前第一内存 管理区之间的距离大于预设回收距离的第二内存管理区。 0055 其中, 在判断系统内存管理区链表 Zonelist 中是否存在与当前第一内存管理区 之间的距离大于预设回收距离的第二内存管理区时, 判断过程也可以是一个循环的过程, 即判断当前第一内存管理区与系统内存管理区链表 Zonelist 中下一个内存管理区之间的 距离是否大于预设回收距离。 0056。
40、 (3) 如果当前第一内存管理区不是当前第一内存管理区所属节点的最后一个内存 管理区, 则当前第一内存管理区的回收模式表示不回收当前第一内存管理区。 0057 步骤 S201b : 若存在与当前第一内存管理区之间的距离大于预设回收距离的第二 内存管理区, 则当前第一内存管理区的回收模式是回收当前第一内存管理区。 0058 若存在与当前第一内存管理区之间的距离大于预设回收距离的第二内存管理区, 表明第二内存管理区与当前第一内存管理区的物理距离比较远, 如果对第二内存管理区进 行分配, 远端访问内存时由于距离较远, 必然对系统性能带来很大的影响, 此时, 应该回收 当前第一内存管理区, 因此, 当。
41、前第一内存管理区的回收模式是回收当前第一内存管理区。 0059 步骤 S201c : 若存在与当前第一内存管理区之间的距离小于或等于预设回收距离 的第三内存管理区, 则当前第一内存管理区的回收模式是不回收当前第一内存管理区。 0060 若不存在与当前第一内存管理区之间的距离大于预设回收距离的第二内存管理 区, 即存在与当前第一内存管理区之间的距离小于或等于预设回收距离的第三内存管理 区, 表明第三内存管理区与当前第一内存管理区的物理距离比较近, 如果对第三内存管理 区进行分配, 远端访问内存时由于距离近, 对系统性能也不会带来明显的影响, 因此, 可以 不回收当前第一内存管理区。 0061 需。
42、要说明的是, 步骤S201只需要在步骤S203之前完成即可, 除了本实施方式所列 举的执行顺序外, 步骤 S201 还可以和步骤 S202 同步执行, 在此不做限制。 0062 步骤 S202 : 接收内存分配请求。 0063 当进程需要内存时, 首先获得进程所在处理器的节点, 在该节点上找到一个合适 的当前第一内存管理区, 向该第一内存管理区发送内存分配请求, 当前的第一内存管理区 接收该内存分配请求。 0064 节点是系统的一个逻辑单位, 包括处理器、 内存、 外设等。内存管理是指软件运 说 明 书 CN 103365784 A 10 7/16 页 11 行时对计算机内存资源的分配和使用的。
43、技术。每个节点的内存被分为多个块, 每个内存 块称为内存管理区 (zones) , 它表示物理内存中的一段区域, 例如 X86_64 系统有 ZONE_ DMA(0-16M), ZONE_DMA32(16M-4G), ZONE_NORMAL 和 ZONE_MOVABLE 管理区。 0065 步骤 S203 : 在接收内存分配请求后, 若当前第一内存管理区的内存不满足预定的 大小, 则判断当前第一内存管理区的回收模式是否表示回收当前第一内存管理区, 其中, 当 前第一内存管理区的回收模式是根据当前第一内存管理区所属节点的拓扑情况来确定的。 如果表示回收当前第一内存管理区, 进入步骤 S204, 。
44、如果表示不是回收当前第一内存管理 区, 进入步骤 S206。 0066 由于当前第一内存管理区的回收模式是根据当前第一内存管理区所属节点的拓 扑情况来确定的, 即当前第一内存管理区的回收模式并不是固定不变的, 根据所属节点拓 扑情况的变化, 当前第一内存管理区的回收模式在回收与不回收之间相应的发生变化, 因 此在确定当前第一内存管理区的回收模式时, 充分考虑本地节点的每个内存管理区的内存 大小的情况, 可以很好地保证本地内存在本地进行分配, 避免造成不必要的内存远端访问, 减少系统影响。 0067 接收内存分配请求后, 如果当前第一内存管理区的内存不满足预定的大小, 即可 判断当前第一内存管理。
45、区的回收模式是否表示回收当前第一内存管理区。 接收内存分配请 求后, 如果当前第一内存管理区的内存满足预定的大小, 则可以直接分配当前第一内存管 理区的内存。 0068 步骤 S204 : 若当前第一内存管理区的回收模式表示回收当前第一内存管理区, 则 对当前第一内存管理区进行回收。 0069 如果当前第一内存管理区的回收模式表示回收当前第一内存管理区, 则对当前第 一内存管理区进行回收。 0070 步骤 S205 : 响应于内存分配请求, 对回收后的当前第一内存管理区的内存进行分 配。 0071 将当前第一内存管理区回收后, 再对该回收后的当前第一内存管理区的内存进行 分配。从而可以尽量实现。
46、本地内存在本地进行分配。 0072 步骤 S206 : 若存在与当前第一内存管理区之间的距离小于或等于预设回收距离 的第三内存管理区, 则判断系统内存管理区链表 Zonelist 中是否存在空闲内存大于预设 阈值的第三内存管理区。 0073 正如步骤 S201c 所述, 若存在与当前第一内存管理区之间的距离小于或等于预设 回收距离的第三内存管理区, 则当前第一内存管理区的回收模式是不回收当前第一内存管 理区, 此时判断系统内存管理区链表 Zonelist 中是否存在空闲内存大于预设阈值的第三 内存管理区。 0074 由于第三内存管理区的空闲内存是预先设置的, 因此通过系统提供的接口, 用户 可。
47、以根据实际情况, 设置第三内存管理区空闲内存的阈值, 以此来确定是否将第三内存管 理区用于非本地的内存分配, 即尽量优先保证第三内存管理区所属节点的本地内存的分配 需求。例如, 系统拥有节点 0、 节点 1、 节点 2 以及节点 3, 管理员计划在节点 1 上执行重要进 程, 因此需要大量内存, 这时管理员可以调整节点 1 对应的内存管理区的远端节点内存分 配阈值, 以避免本地内存被节点 0、 节点 2 以及节点 3 上的进程大量使用。 说 明 书 CN 103365784 A 11 8/16 页 12 0075 其中, 判断系统内存管理区链表 Zonelist 中是否存在空闲内存大于预设阈值。
48、的 第三内存管理区时, 在实际应用中, 可以是采用循环的方式进行判断, 即判断系统内存管理 区链表 Zonelist 中下一个与当前第一内存管理区之间的距离小于等于预设回收距离的第 三内存管理区的空闲内存是否大于预设阈值。 0076 步骤 S207 : 若存在空闲内存大于预设阈值的第三内存管理区, 则分配空闲内存大 于预设阈值的第三内存管理区的内存。 0077 如果存在空闲内存大于预设阈值的第三内存管理区, 则表明第三内存管理区可以 用于非本地内存分配, 因此可以分配空闲内存大于预设阈值的第三内存管理区的内存。 0078 通过这种为内存管理区设置空闲内存的阈值的方式, 从第三内存管理区的角度分。
49、 析, 可以优先保证本地内存在本地 (即第三内存管理区) 进行分配的需求, 在满足本地内存 需求的基础上, 才可以将本地内存 (第三内存管理区) 用于非本地节点 (第一内存管理区) 的 内存分配。 0079 本发明实施方式接在接收内存分配请求后, 若当前第一内存管理区的内存不满足 预定的大小, 则判断当前第一内存管理区的回收模式是否是回收当前第一内存管理区, 其 中, 当前第一内存管理区的回收模式是根据当前第一内存管理区所属节点的拓扑情况来确 定的 ; 若当前第一内存管理区的回收模式是回收当前第一内存管理区, 则对当前第一内存 管理区进行回收 ; 对回收后的当前第一内存管理区的内存进行分配。由于当前第一内存管 理区的回收模式是根据当前第一内存管理区所属节点的拓扑情况来确定的, 即当前第一内 存管理区的回收模式并不是固定不变的, 根据所属节点拓扑情况的变化, 当前第一内存管 理区的回收模式在回收与不回收之间相应的发生变化, 因此在确定当前第一内存管理区的 回收模式时, 充分。