CN114546661A - 基于内存变换的动态内存分配方法及装置 - Google Patents
基于内存变换的动态内存分配方法及装置 Download PDFInfo
- Publication number
- CN114546661A CN114546661A CN202210193860.6A CN202210193860A CN114546661A CN 114546661 A CN114546661 A CN 114546661A CN 202210193860 A CN202210193860 A CN 202210193860A CN 114546661 A CN114546661 A CN 114546661A
- Authority
- CN
- China
- Prior art keywords
- memory
- allocation
- transformation
- blocks
- block
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
- 230000015654 memory Effects 0.000 title claims abstract description 244
- 238000000034 method Methods 0.000 title claims abstract description 46
- 230000009466 transformation Effects 0.000 title claims abstract description 41
- 238000006243 chemical reaction Methods 0.000 claims abstract description 12
- 230000008569 process Effects 0.000 claims description 15
- 230000004048 modification Effects 0.000 claims description 8
- 238000012986 modification Methods 0.000 claims description 8
- 239000012634 fragment Substances 0.000 abstract description 7
- 238000012545 processing Methods 0.000 description 5
- 238000010586 diagram Methods 0.000 description 4
- 238000004590 computer program Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000013467 fragmentation Methods 0.000 description 2
- 238000006062 fragmentation reaction Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 230000008859 change Effects 0.000 description 1
- 238000013135 deep learning Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000002474 experimental method Methods 0.000 description 1
- PCHJSUWPFVWCPO-UHFFFAOYSA-N gold Chemical compound [Au] PCHJSUWPFVWCPO-UHFFFAOYSA-N 0.000 description 1
- 239000010931 gold Substances 0.000 description 1
- 229910052737 gold Inorganic materials 0.000 description 1
- 210000004072 lung Anatomy 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5022—Mechanisms to release resources
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种基于内存变换的动态内存分配方法,该方法通过修改内存块未完全分配的内存区域的元数据,使其可以服务于新的内存分配请求大小,包括:记录未变换时内存区域的内存块大小、第一个内存块的起始地址、已分配内存块数量及内存块分配情况;根据新的内存分配请求大小,设置并记录变换后内存区域的内存块大小、第一个内存块的起始地址;根据当前变换前后内存块的对应关系,记录变换后内存块中变换前已分配内存块数量,并记录当前所有的内存块分配情况;根据内存释放情况实时更新当前所有的内存块分配情况,本发明通过内存变换,使得slab可以根据需要服务于不同大小的内存分配请求,从而减少空闲slab的数量,减少内存碎片,提高内存的利用率。
Description
技术领域
本发明涉及计算机科学内存编程领域,尤其涉及一种基于内存变换的动态内存分配方法及装置。
背景技术
动态内存分配是指在程序运行过程中根据应用程序的需要对内存空间进行动态地开辟与释放,几乎所有的应用程序都不可避免的需要动态内存分配。在进行小内存分配时,内存分配器将一块内存区域(slab)划分为特定大小的内存块((block)),不同slab包含的block大小不同,用以满足不同的内存分配需求。传统的内存分配器在slab初始化完成后不会改变其对应的block大小,如果应用程序对某一特定大小的内存申请较少,对应大小的slab只有很少的block被分配,导致该slab既无法被归还给操作系统也无法用于其它大小的内存分配,造成内存碎片的产生,提高了内存占用量。
发明内容
为了解决静态slab划分带来的内存碎片问题,本发明提出了一种基于内存变换的动态内存分配方法。
本发明采用的技术方案是:
一种基于内存变换的动态内存分配方法,该方法通过修改内存块未完全分配的内存区域的元数据,使其可以服务于新的内存分配请求大小,具体如下:
记录未变换时内存区域的内存块大小、第一个内存块的起始地址、已分配内存块数量及内存块分配情况;
根据新的内存分配请求大小,设置并记录变换后内存区域的内存块大小、第一个内存块的起始地址;
根据当前变换前后内存块的对应关系,记录变换后每个内存块中包含的变换前已分配内存块数量,并记录当前所有的内存块分配情况;
根据内存释放情况实时更新当前所有的内存块分配情况,其中,变换后内存块中包含的变换前已分配内存块数量为0的内存块可服务于新的内存分配请求大小。
进一步地,还包括内存区域选取步骤:
采用LRU(Least Recently Used)队列管理所有的内存区域,为队列中的内存区域计算内存块分配比,按顺序从LRU队列中找到第一个分配比低于预设定阈值的内存区域用于内存变换。
进一步地,还包括:
在变换过程中,记录当前内存区域变换元数据修改已完成的步数。
进一步地,采用索引表记录未变换时内存区域的内存块分配情况,采用位图记录当前所有的内存块分配情况。
一种基于内存变换的动态内存分配装置,包括一个或多个处理器,用于实现上述的基于内存变换的动态内存分配方法。
本发明的有益效果是,通过内存变换,使得slab可以根据需要服务于不同大小的内存分配请求,从而减少空闲slab的数量,减少内存碎片,提高内存的利用率。
附图说明
图1表示本发明的内存变换过程。
图2表示本发明元数据修改过程的一个实例示意图。
图3表示本发明与其他现有内存分配器在四类负载下内存占用量的对比。
图4表示本发明的一种基于内存变换的动态内存分配装置结构示意图。
具体实施方式
本发明提供了一种基于内存变换的动态内存分配方法,该方法通过修改内存块未完全分配的内存区域的元数据,即在小内存分配请求到达且对应的内存区域slab没有空闲空间时对空闲内存区域slab进行变换以满足内存分配需求,具体如下:
(1)记录未变换时内存区域的内存块大小、第一个内存块的起始地址、已分配内存块数量及内存块分配情况;在实施过程中,具体地,通过设置old_size_class、old_data_offset属性、index_table属性及cntslab属性实现。其中,old_size_class属性用于指明未变换时内存块blockbefore大小,old_data_offset属性指明未变换时内存区域slabbefore内第一个未变换时内存块blockbefore的起始地址,index_table属性索引未变换时内存块blockbefore,记录未变换时内存区域slabbefore内存块分配情况,cntslab属性保存未变换时内存区域slabbefore内已分配的blockbefore数。
(2)根据新的内存分配请求大小,设置并记录变换后内存区域的内存块大小、第一个内存块的起始地址;在实施过程中,具体地,通过设置size_class属性、data_offset属性实现;其中,size_class属性指明变换后内存区域的内存块大小,data_offset属性指明变换后内存区域slab内第一个内存块block的起始地址。
(3)根据当前变换前后内存块的对应关系,记录变换后内存块中变换前已分配内存块数量,并记录当前所有的内存块分配情况;在实施过程中,具体地,根据当前变换前后内存块的对应关系,为每个当前内存块blockin设置cntblock属性,保存blockin内存放的已分配blockbefore数,并设置位图bitmap属性,bitmap属性指明变换后slab中各个内存块是否空闲,记录blockin的分配情况。
根据内存释放情况实时更新当前所有的内存块分配情况,其中,变换后内存块中包含的变换前已分配内存块数量为0的内存块可服务于新的内存分配请求大小。具体地,当用户释放未变换时内存块blockbefore时,为cntslab与对应的cntblock属性减一,当cntblock等于0时,当前内存块blockin即为空闲状态,当cntslab等于0时,当前slabin变换成为适用于新的内存分配请求大小的内存区域slabafter。
作为一优选方案,还包括内存区域选取步骤:
采用LRU(Least Recently Used)队列管理所有的内存区域slab,队列头部为最长时间未服务于分配的内存区域slab。为队列中的内存区域slab计算内存块分配比,即已分配block占slab包含的block总数的比例。按顺序从LRU队列中找到第一个分配比低于预设定阈值的内存区域slab用于内存变换。实现内存块的最大化利用。
作为另一优选方案,还包括:
在变换过程中,记录当前内存区域变换元数据修改已完成的步数;在实施过程中,具体为:设置flag属性,初值为0,在每一个步骤完成后加一,可以表示当前slabbefore元数据修改已完成的步数,用于系统崩溃后恢复。
下面结合附图与具体实例对本发明作进一步说明。
图1表示本发明的一示例性的内存变换过程,具体为将block大小为32B的未变换时内存区域slabbefore变换为block大小为64B的变换后内存区域slabafter。在修改未变换时内存区域slabbefore的元数据后,当前内存区域slab变换为存放着32B与64B两种大小block的混合态内存区域slabin,但是只能服务于64B大小范围内的内存分配请求。在应用程序释放所有32B大小的block后,当前内存区域slab变换为只存放64B大小内存块block的普通内存区域slabafter。
图2表示本发明中图1所示变换过程的元数据修改步骤的一个实例示意图,从图中可知,变换后一个内存块的大小为未变换时内存块blockbefore大小的两倍,依据图2分析元数据修改过程,包含如下步骤:
步骤一:设置flag属性,初值为0,在每一个步骤完成后加一。
步骤二:设置old_size_class、old_data_offset属性,及设置index_table属性索引未变换时内存块blockbefore,记录未变换时内存区域slabbefore内存块分配情况;由图可知未变换时内存区域slabbefore内内存块B1、B5、B6已经分配,需要在index_table中设置相应的索引行。此外,设置cntslab为3,由于在当前内存区域slabin内内存块B1占有变换后内存块NB0的部分空间,内存块B5与B6占有变换后内存块NB2的所有空间,因此设置变换后内存块NB0、NB2对应的cntblock分别为1,2,其余内存块blockin该属性均为0。
步骤三:设置size_class属性、data_offset属性与bitmap属性。只有变换后内存块NB0、NB2在bitmap中对应的比特位被设置为1,表示非空闲状态。
根据内存释放情况实时更新当前所有的内存块分配情况,逐步将当前内存区域slab变换为只存放64B大小内存块block的普通内存区域slab。
本发明通过内存变换,使得slab可以根据需要服务于不同大小的内存分配请求,从而减少空闲slab的数量,减少内存碎片,提高内存的利用率。为了验证本发明减少内存碎片的效果,使用Fragbench在四种预设负载下进行测试,具体实验如下:
实验硬件配置为两颗Intel Xeon Gold 5218R CPU,每一CPU配有64GB DRAM与两条Intel Optane DIMM,每一DIMM大小为128GB。连接到CPU的一对DIMM配置为App Direct模式并挂载Ext4-DAX文件系统。为避免NUMA的影响,使用numactl作了线程绑定。
Fragbench在测试中有三个运行阶段,在before与after阶段,Fragbench使用大小服从预定义分布的对象填充5GB内存,并且随机移出部分对象来保证活跃在内存中的数据不超过1GB,在delete阶段,Fragbench随机删除一部分对象,本实施例使用的Fragbench四类负载配置如下表所示:
表1Fragbench四类负载配置
依据本发明内存分配方法,将其与现有内存分配器nvm_malloc、原始的持久内存分配器(记作w/o SM)进行对比,测试结果如图3所示,本发明在四类负载中内存占有量均为最小,其中在负载W1与W3中减少内存碎片效果十分显著。本发明提出的内存分配方法显著提高了高分配比的内存区域slab数量,因此,本发明减少了系统整体的内存消耗。
与前述基于内存变换的动态内存分配方法的实施例相对应,本发明还提供了基于内存变换的动态内存分配装置的实施例。
参见图4,本发明实施例提供的一种基于内存变换的动态内存分配装置,包括一个或多个处理器,用于实现上述实施例中的基于内存变换的动态内存分配方法。
本发明基于内存变换的动态内存分配装置的实施例可以应用在任意具备数据处理能力的设备上,该任意具备数据处理能力的设备可以为诸如计算机等设备或装置。
装置实施例可以通过软件实现,也以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在任意具备数据处理能力的设备的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的从硬件层面而言,如图4所示,为本发明基于深度学习的肺裂自动检测装置所在任意具备数据处理能力的设备的一种硬件结构图,除了图4所示的处理器、内存、网络接口、以及非易失性存储器之外,实施例中装置所在的任意具备数据处理能力的设备通常根据该任意具备数据处理能力的设备的实际功能,还可以包括其他硬件,对此不再赘述。
上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本发明方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
显然,上述实施例仅仅是为清楚地说明所作的举例,而并非对实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其他不同形式的变化或变动。这里无需也无法把所有的实施方式予以穷举。而由此所引申出的显而易见的变化或变动仍处于本发明的保护范围。
Claims (5)
1.一种基于内存变换的动态内存分配方法,其特征在于,该方法通过修改内存块未完全分配的内存区域的元数据,使其可以服务于新的内存分配请求大小,具体如下:
记录未变换时内存区域的内存块大小、第一个内存块的起始地址、已分配内存块数量及内存块分配情况;
根据新的内存分配请求大小,设置并记录变换后内存区域的内存块大小、第一个内存块的起始地址;
根据当前变换前后内存块的对应关系,记录变换后每个内存块中包含的变换前已分配内存块数量,并记录当前所有的内存块分配情况;
根据内存释放情况实时更新当前所有的内存块分配情况,其中,变换后内存块中包含的变换前已分配内存块数量为0的内存块可服务于新的内存分配请求大小。
2.根据权利要求1所述的方法,其特征在于,还包括内存区域选取步骤:
采用LRU(Least Recently Used)队列管理所有的内存区域,为队列中的内存区域计算内存块分配比,按顺序从LRU队列中找到第一个分配比低于预设定阈值的内存区域用于内存变换。
3.根据权利要求1所述的方法,其特征在于,还包括:
在变换过程中,记录当前内存区域变换元数据修改已完成的步数。
4.根据权利要求1所述的方法,其特征在于,采用索引表记录未变换时内存区域的内存块分配情况,采用位图记录当前所有的内存块分配情况。
5.一种基于内存变换的动态内存分配装置,包括一个或多个处理器,用于实现权利要求1-4任一项所述的基于内存变换的动态内存分配方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210193860.6A CN114546661A (zh) | 2022-03-01 | 2022-03-01 | 基于内存变换的动态内存分配方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210193860.6A CN114546661A (zh) | 2022-03-01 | 2022-03-01 | 基于内存变换的动态内存分配方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114546661A true CN114546661A (zh) | 2022-05-27 |
Family
ID=81661771
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210193860.6A Withdrawn CN114546661A (zh) | 2022-03-01 | 2022-03-01 | 基于内存变换的动态内存分配方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114546661A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2024078429A1 (zh) * | 2022-10-12 | 2024-04-18 | 杭州阿里云飞天信息技术有限公司 | 内存管理方法、装置、计算机设备及存储介质 |
-
2022
- 2022-03-01 CN CN202210193860.6A patent/CN114546661A/zh not_active Withdrawn
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2024078429A1 (zh) * | 2022-10-12 | 2024-04-18 | 杭州阿里云飞天信息技术有限公司 | 内存管理方法、装置、计算机设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7233335B2 (en) | System and method for reserving and managing memory spaces in a memory resource | |
US11237756B2 (en) | System and method of writing to nonvolatile memory using write buffers | |
CN103608782A (zh) | Lsb页面和msb页面中的选择性数据存储 | |
CN108959113B (zh) | 用于闪存感知堆存储器管理的方法和系统 | |
US20190026317A1 (en) | Memory use in a distributed index and query system | |
US11520520B2 (en) | Memory system and method of controlling nonvolatile memory | |
US20200225862A1 (en) | Scalable architecture enabling large memory system for in-memory computations | |
US20150293845A1 (en) | Multi-level memory hierarchy | |
CN110688345A (zh) | 一种内存文件系统的多粒度结构化空间管理机制 | |
WO2024099448A1 (zh) | 内存释放、内存恢复方法、装置、计算机设备及存储介质 | |
CN111984425A (zh) | 用于操作系统的内存管理方法、装置及设备 | |
US7434026B2 (en) | Disk array device and virtual volume management method using a logical table and a physical table | |
CN112148226A (zh) | 一种数据存储方法及相关装置 | |
CN111694765A (zh) | 一种面向移动应用特征的非易失性内存文件系统多粒度空间管理方法 | |
US10073851B2 (en) | Fast new file creation cache | |
CN114546661A (zh) | 基于内存变换的动态内存分配方法及装置 | |
CN108139983A (zh) | 用于在多级系统存储器中固定存储器页面的方法和设备 | |
US20050144389A1 (en) | Method, system, and apparatus for explicit control over a disk cache memory | |
CN106537321B (zh) | 存取文件的方法、装置和存储系统 | |
CN110119245B (zh) | 用于操作nand闪存物理空间以扩展存储器容量的方法和系统 | |
CN114518962A (zh) | 内存的管理方法及装置 | |
CN113535392A (zh) | 基于cma实现支持大内存连续分配的内存管理方法及系统 | |
US10168911B1 (en) | Defragmentation of persistent main memory | |
US20200142623A1 (en) | Storage device and electronic device managing data transmitted to storage device | |
CN109213424B (zh) | 并发io命令的无锁处理方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WW01 | Invention patent application withdrawn after publication |
Application publication date: 20220527 |