System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种用于层次化大内存架构的巨页内存管理方法及系统技术方案_技高网

一种用于层次化大内存架构的巨页内存管理方法及系统技术方案

技术编号:44456620 阅读:2 留言:0更新日期:2025-02-28 19:03
本发明专利技术公开了一种用于层次化大内存架构的巨页内存管理方法及系统,方法包括:应用程序请求内存分配时,若为基于mmap的内存分配且请求内存大小小于单个物理巨页内存长度时,则执行巨页内存再利用策略:先判断头部是否存在满足第一条件的空闲内存碎片,若存在,则分配请求内存大小的内存给应用程序;若不存在,则判断尾部剩余空闲内存是否满足条件,若满足,则分配请求内存大小的内存给应用程序。本发明专利技术通过在已为应用程序分配的所有物理巨页内存中遍历是否存在满足请求内存大小的空闲内存,可使请求内存大小在满足条件时分配到已使用的物理巨页内存中,从而充分利用内存空间,减少内存浪费,节约系统资源。

【技术实现步骤摘要】

本专利技术涉及计算机操作系统性能优化,具体涉及一种用于层次化大内存架构的巨页内存管理方法及系统


技术介绍

1、内存是现代计算机系统中重要的组成部分之一,数据、代码等程序运行的关键内容都需要被加载到内存中才能被处理器访问和执行。在现代计算机系统中,为了更好地管理大内存架构,虚拟内存技术被广泛采用,特别是其中的分页机制。虚拟内存分页机制将物理内存和虚拟内存划分成固定大小的页面,通过为两种页面动态建立映射关系,极大提升了内存管理和使用的灵活性。然而,分页机制中的虚实地址转换过程为处理器访存引入了额外的开销。

2、为了缓解虚实地址转换的开销,现代处理器在设计上一般支持更大粒度的页面(从传统的4k到2m甚至1g等),并通过采用巨页以降低tlb(translation lookasidebuffer,转换检测缓冲区)未命中率来提高应用程序的性能,如linux内核采取了一种用户无感知的transparenthugepage(透明巨页)策略来管理和分配巨页,该策略会在进程触发缺页中断时,为满足对齐条件的虚拟内存自动分配和映射物理巨页,从而透明的提升应用程序的性能。

3、但是,linux的透明巨页策略采用简单的贪心策略,只要虚存空间满足映射巨页的要求(即虚存空间的起始地址是否对齐到巨页尺寸、该虚存空间的剩余长度是否大于巨页尺寸),就允许分配巨页供应用程序使用。这样的策略会带来极大的内存浪费和内存碎片问题,也可能造成系统内大量连续物理内存空间的消耗,还可能导致真正需要使用巨页的场景无法使用巨页。此外,由于很多应用程序的内存请求采用的是小量多次的分配模式,对于每一次单独的内存分配请求,其都不满足linux透明巨页策略中使用巨页的要求,因而无法分配并映射巨页。但实际上,这些小规模内存分配请求的总和却又是超过巨页尺寸的。目前,可通过设置预设阈值并控制内核为超过阈值的内存分配请求映射巨页。但这类基于阈值的方法仍然无法有效平衡巨页使用和内存浪费的问题,且阈值的设定也难以确定或设为定值,需要频繁变动,导致实际上巨页的适用范围还十分受限,许多应用程序在运行过程中并不能切实使用巨页内存从而提高访存性能。


技术实现思路

1、本专利技术要解决的技术问题:针对现有技术的上述问题,提供一种用于层次化大内存架构的巨页内存管理方法及系统,以使得普遍存在的、频繁使用小规模内存的应用程序能够在不满足巨页的使用前提条件时也能分配物理巨页内存,降低操作系统分配巨页内存带来的内存碎片化和内存浪费问题,并提高巨页内存的利用率。

2、为了解决上述技术问题,本专利技术采用的技术方案为:

3、一种用于层次化大内存架构的巨页内存管理方法,包括:

4、应用程序请求内存分配时,判断内存分配请求类型,若为基于mmap的内存分配且请求内存大小小于单个物理巨页内存长度时,则执行巨页内存再利用策略,根据请求内存大小在分配给所述应用程序的各个物理巨页内存中遍历寻找满足第一条件的空闲内存,并将所述请求内存大小在空闲内存中进行分配,所述第一条件为空闲内存的大小大于或等于所述请求内存大小,其中巨页内存再利用策略的执行步骤为:

5、先判断物理巨页内存的头部是否存在满足第一条件的空闲内存碎片,若存在,则从所述空闲内存碎片的起始位置处分配所述请求内存大小的内存给所述应用程序,并将所述空闲内存碎片的起始位置后移所述请求内存大小的长度,以更新所述空闲内存碎片的剩余可用空间;

6、若物理巨页内存的头部不存在满足第一条件的空闲内存碎片,则判断物理巨页内存的尾部剩余空闲内存是否满足第一条件,若满足,则从所述尾部剩余空闲内存的起始位置处分配所述请求内存大小的内存给所述应用程序,并将所述尾部剩余空闲内存的起始位置后移所述请求内存大小的长度,以更新所述尾部剩余空闲内存的剩余长度。

7、进一步地,若遍历完成各个物理巨页内存后仍找不到满足第一条件的空闲内存,则采用激进巨页内存分配策略,根据所述请求内存大小在用户虚拟内存空间为所述应用程序分配一个或多个长度为单个物理巨页内存长度的新的虚拟内存空间,直至总虚拟内存空间长度大于或等于所述请求内存大小的长度;为每个虚拟内存空间映射对应的映射物理巨页内存,并为每个物理巨页内存创建巨页描述对象,其中所述巨页描述对象用于描述内存使用情况。

8、进一步地,激进巨页内存分配策略具体包括:

9、根据所述请求内存大小与单个物理巨页内存长度的比值向上取整确定需要分配的物理巨页内存的第一数量n1,并根据所述第一数量n1与单个物理巨页内存长度的乘积确定需要分配的第一内存大小;

10、在用户虚拟内存空间中找到大小为所述第一内存大小的第一空闲虚拟内存,并建立用于描述用户虚拟内存分配情况的vma对象;

11、从所述vma对象的起始位置开始,依次为所述第一空闲虚拟内存映射物理巨页内存,直到所述第一空闲虚拟内存分别映射所述第一数量n1的物理巨页内存,并为每个物理巨页内存创建一个描述内存使用情况的巨页描述对象;

12、最后返回所述vma对象的首地址。

13、进一步地,若判断到所述应用程序的内存分配请求类型为基于brk的内存分配,则执行如下操作:

14、判断通过brk调用申请内存后的brk区顶部指针新位置与当前brk区顶部指针原位置是否在单个物理巨页内存长度的范围内,若不在范围内:

15、通过激进巨页内存分配策略对brk区对应的虚拟内存区间进行扩张,使虚拟内存区间的堆顶扩展若干个长度为单个物理巨页内存长度的内存空间,直到brk区顶部指针新位置被扩展后的虚拟内存区间所包含;

16、分别为新扩张的内存空间映射对应数量的物理巨页内存,并为每个物理巨页内存创建一个描述内存使用情况的巨页描述对象;

17、将brk区顶部指针位置更新为通过brk调用申请内存后的brk区顶部指针新位置;

18、若判断到通过brk调用申请内存后的brk区顶部指针新位置与当前brk区顶部指针原位置在单个物理巨页内存长度的范围内,则直接将brk区顶部指针位置更新为通过brk调用申请内存后的brk区顶部指针新位置。

19、进一步地,若判断到所述应用程序的内存分配请求类型为基于栈扩展的内存分配,则执行如下操作:

20、通过激进巨页内存分配策略根据栈区栈扩展后的栈底新位置对栈区对应的虚拟内存区间进行扩张,使虚拟内存区间的栈底扩展若干个长度为单个物理巨页内存长度的内存空间,直到栈底新位置被扩展后的虚拟内存区间所包含;

21、分别为新扩张的内存空间映射对应数量的物理巨页内存,并为每个物理巨页内存创建一个描述内存使用情况的巨页描述对象。

22、进一步地,所述用于层次化大内存架构的巨页内存管理方法还包括巨页内存部分释放策略,具体为:

23、当请求内存释放时,根据待释放内存区间以及待释放内存长度判断是否存在与待释放内存区间前后相交的空闲内存区域以确定待释放内存区域:若存在前后相交的空闲内存区域本文档来自技高网...

【技术保护点】

1.一种用于层次化大内存架构的巨页内存管理方法,其特征在于,包括:

2.根据权利要求1所述的用于层次化大内存架构的巨页内存管理方法,其特征在于,若遍历完成各个物理巨页内存后仍找不到满足第一条件的空闲内存,则采用激进巨页内存分配策略,根据所述请求内存大小在用户虚拟内存空间为所述应用程序分配一个或多个长度为单个物理巨页内存长度的新的虚拟内存空间,直至总虚拟内存空间长度大于或等于所述请求内存大小的长度;为每个虚拟内存空间映射对应的映射物理巨页内存,并为每个物理巨页内存创建巨页描述对象,其中所述巨页描述对象用于描述内存使用情况。

3.根据权利要求2所述的用于层次化大内存架构的巨页内存管理方法,其特征在于,激进巨页内存分配策略具体包括:

4.根据权利要求1所述的用于层次化大内存架构的巨页内存管理方法,其特征在于,若判断到所述应用程序的内存分配请求类型为基于brk的内存分配,则执行如下操作:

5.根据权利要求1所述的用于层次化大内存架构的巨页内存管理方法,其特征在于,若判断到所述应用程序的内存分配请求类型为基于栈扩展的内存分配,则执行如下操作:

6.根据权利要求1所述的用于层次化大内存架构的巨页内存管理方法,其特征在于,所述用于层次化大内存架构的巨页内存管理方法还包括巨页内存部分释放策略,具体为:

7.根据权利要求6所述的用于层次化大内存架构的巨页内存管理方法,其特征在于,根据待释放内存区间以及待释放内存长度判断是否存在与待释放内存区间前后相交的空闲内存区域以确定待释放内存区域,具体包括:

8.根据权利要求7所述的用于层次化大内存架构的巨页内存管理方法,其特征在于,所述巨页内存部分释放策略还包括:

9.一种用于层次化大内存架构的巨页内存管理系统,包括相互连接的微处理器和存储器,其特征在于,所述微处理器被编程或配置以执行权利要求1~8中任意一项所述的用于层次化大内存架构的巨页内存管理方法。

10.一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序/指令,其特征在于,所述计算机程序/指令被编程或配置以通过处理器执行权利要求1~8中任意一项所述的用于层次化大内存架构的巨页内存管理方法。

...

【技术特征摘要】

1.一种用于层次化大内存架构的巨页内存管理方法,其特征在于,包括:

2.根据权利要求1所述的用于层次化大内存架构的巨页内存管理方法,其特征在于,若遍历完成各个物理巨页内存后仍找不到满足第一条件的空闲内存,则采用激进巨页内存分配策略,根据所述请求内存大小在用户虚拟内存空间为所述应用程序分配一个或多个长度为单个物理巨页内存长度的新的虚拟内存空间,直至总虚拟内存空间长度大于或等于所述请求内存大小的长度;为每个虚拟内存空间映射对应的映射物理巨页内存,并为每个物理巨页内存创建巨页描述对象,其中所述巨页描述对象用于描述内存使用情况。

3.根据权利要求2所述的用于层次化大内存架构的巨页内存管理方法,其特征在于,激进巨页内存分配策略具体包括:

4.根据权利要求1所述的用于层次化大内存架构的巨页内存管理方法,其特征在于,若判断到所述应用程序的内存分配请求类型为基于brk的内存分配,则执行如下操作:

5.根据权利要求1所述的用于层次化大内存架构的巨页内存管理方法,其特征在于,若判断到所述应用程序的内存分配请求类型为基于...

【专利技术属性】
技术研发人员:张文喆张顺路宁前王睿伯董勇李宝峰姚信安张伟邬会军吴振伟李佳鑫葛可适何森
申请(专利权)人:中国人民解放军国防科技大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1