CN105389210B - 一种存储空间管理方法及装置 - Google Patents
一种存储空间管理方法及装置 Download PDFInfo
- Publication number
- CN105389210B CN105389210B CN201510674525.8A CN201510674525A CN105389210B CN 105389210 B CN105389210 B CN 105389210B CN 201510674525 A CN201510674525 A CN 201510674525A CN 105389210 B CN105389210 B CN 105389210B
- Authority
- CN
- China
- Prior art keywords
- group
- slab
- memory
- big
- full
- 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.)
- Active
Links
- 230000015654 memory Effects 0.000 title claims abstract description 144
- 238000000034 method Methods 0.000 claims abstract description 19
- 238000005192 partition Methods 0.000 claims abstract description 11
- 230000008569 process Effects 0.000 claims description 15
- 230000008901 benefit Effects 0.000 abstract description 3
- 238000010586 diagram Methods 0.000 description 3
- 230000008859 change Effects 0.000 description 1
- 238000013467 fragmentation Methods 0.000 description 1
- 238000006062 fragmentation reaction Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000008439 repair process Effects 0.000 description 1
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
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5011—Pool
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/503—Resource availability
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明提供一种存储空间管理方法及装置,上述方法包括以下步骤:获取缓存池并对缓存池中的内存空间按照预设划分策略进行划分分组;根据对象大小,将对象分配至对应的分组并在分组之间按照预设调整策略,对内存空间进行调整,充分利用了内存空间、加快了在内存中分配对象的速度,提高了内存利用率。
Description
技术领域
本发明属于存储控制领域,尤其涉及一种存储空间管理方法及装置。
背景技术
随着linux操作系统的发展,应用程序对内存的要求越来越高,既需要更快的内存分配速度,又需要更大的内存,自2.6内核以后,linux采用了伙伴系统和内存分配算法即slab cache分配算法来完成内存分配,该slab cache分配算法可以减少内存碎片的产生,并且保证小对象(<512字节)的分配速度和访问速度,但是已有的slab cache分配算法存在以下缺点。
首先,传统的slab cache分配算法将从缓存池申请到的内存分为3组:slab_full,slab_partial,slab_empty;每组都采用链表方式实现,导致查找可用空间slab需要遍历链表,不能保证进程首次要求分配对象内存空间时能立即得到可用的slab。
其次,传统的slab cache分配算法不能保证每个slab空间的充分利用,可能因为好几个大对象的分配以及cache line对齐的要求导致一个slab很快被用完。
最后,传统的slab cache分配算法中slab_partial组不够用时,需要向伙伴系统申请,而没有充分利用slab_empty组中的slab,这造成了内存资源的极大浪费。
发明内容
本发明提供一种存储空间管理方法及装置,以解决上述问题。
本发明提供一种存储空间管理方法。上述方法包括以下步骤:
获取缓存池并对缓存池中的内存空间按照预设划分策略进行划分分组;
根据对象大小,将对象分配至对应的分组并在分组之间按照预设调整策略,对内存空间进行调整。
本发明还提供一种存储空间管理装置,包括获取模块、划分分组模块、调整模块;其中,所述获取模块通过所述划分分组模块与所述调整模块连接;
所述获取模块,用于获取缓存池并将缓存池信息发送至所述划分分组模块;
所述划分分组模块,用于对缓存池中的内存空间按照预设划分策略进行划分分组并将划分分组结果发送至所述调整模块;
所述调整模块,用于根据对象大小,将对象分配至对应的分组并在分组之间按照预设调整策略,对内存空间进行调整。
通过以下方案:获取缓存池并对缓存池中的内存空间按照预设划分策略进行划分分组;根据对象大小,将对象分配至对应的分组并在分组之间按照预设调整策略,对内存空间进行调整,充分利用了内存空间、加快了在内存中分配对象的速度,提高了内存利用率。
通过以下方案:调用所述slab_big组中内存单元,对大于预设字节的对象进行分配;若所述内存单元进行分配后,剩余空闲空间小于预设值,则将其移动至所述slab_small组;若所述slab_big组中的内存单元存储已满或所述slab_small组中的内存单元存储已满,则将对应的内存单元移至所述slab_full组,进程运行结束后,若所述slab_full组中内存单元的内存空间释放完毕,则内存空间释放完毕的内存单元被移入至所述slab_empty组,以供slab_big组或者slab_small组的资源耗尽时,进行调用,提高了内存的利用率,减少与内存管理设备交互的次数。
通过以下方案:所有内存单元中的对象之间采用缓存行对齐即cache line对齐,这样可以提高对象访问速度。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1所示为本发明实施例1的存储空间管理方法处理流程图;
图2所示为本发明实施例2的缓存池与各个内存管理组的关系图。
图3所示为本发明实施例3的内存状态转移图;
图4所示为本发明实施例4的内存中的内部对象分布示意图;
图5所示为本发明实施例5的存储空间管理装置结构图。
具体实施方式
下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
图1所示为本发明实施例1的存储空间管理方法处理流程图,包括以下步骤:
步骤101:获取缓存池并对缓存池中的内存空间按照预设划分策略进行划分分组;
进一步地,获取缓存池并对缓存池中的内存空间按照预设划分策略进行划分分组的过程为:
通过向内存管理设备申请,获得缓存池;
将缓存池中的内存空间划分为四个内存管理组;其中,每个内存管理组的内存大小为4个内存页大小。
进一步地,所述四个内存管理组为内存已分配组即slab_full组,内存大对象待分配组即slab_big组,内存小对象待分配组即slab_small组,内存循环利用组即slab_empty组。
进一步地,所述slab_full组是指组中所有内存中的对象空间已分配;所述slab_big组是指组中的内存待分配给大于预设字节(例如:512字节)的对象即大对象;所述slab_small组是指组中的内存待分配给小于或等于预设字节(例如:512字节)的对象即小对象;所述slab_empty组是指组中所有内存的对象空间已释放,可以回收到内存管理设备。
进一步地,获取缓存池并对缓存池中的内存空间按照预设划分策略进行划分分组之后,还包括:对划分的分组进行配置。
进一步地,对划分的分组进行配置的过程为:将所述slab_full组,所述slab_small组,所述slab_empty组初始化为空,其中,所述slab_full组、所述slab_empty组采用链表方式进行管理;所述slab_big组、所述slab_small组根据空闲空间大小采用大根堆进行管理。
所述slab_big组、所述slab_small组根据空闲空间大小采用大根堆进行管理,可以提高分配对象速度。
进一步地,初始状态下,将所有内存分配至所述slab_big组中并按照空闲空间的大小排序为大根堆。
后续新对象申请空间时,从所述slab_big组中的堆顶元素中申请,每次申请完后,就自动调整堆顶元素,以保证下次申请大对象有足够的空间可用。
步骤102:根据对象大小,将对象分配至对应的分组并在分组之间按照预设调整策略,对内存空间进行调整。
进一步地,根据对象大小,将对象分配至对应的分组并在分组之间按照预设调整策略,对内存空间进行调整的过程为:
调用所述slab_big组中内存单元,对大于预设字节的对象进行分配;
若所述内存单元进行分配后,剩余空闲空间小于或等于预设值(例如:50%),则将其移动至所述slab_small组;
若所述slab_big组中的内存单元存储已满或所述slab_small组中的内存单元存储已满,则将对应的内存单元移至所述slab_full组,进程运行结束后,若所述slab_full组中内存单元的内存空间释放完毕,则内存空间释放完毕的内存单元被移入至所述slab_empty组。
进一步地,内存管理设备回收所述slab_empty组中的内存或所述slab_big组、slab_small组中的内存分配完毕后,调用所述slab_empty组中的内存。
采取上述方案,可以提高内存的利用率,减少与内存管理设备交互的次数,slab_empty组内内存可以在slab_big组或者slab_small组的资源耗尽时循环利用,当slab_empty组内内存资源也利用完后,再向内存管理设备申请新的内存。
进一步地,所有内存单元中的对象之间采用缓存行对齐即cache line对齐(如图4所示),这样可以提高对象访问速度。
图2所示为本发明实施例2的缓存池与各个内存管理组的关系图,如图2所示,将缓存池中的内存空间划分为四个内存管理组。
所述四个内存管理组为内存已分配组即slab_full组,内存大对象待分配组即slab_big组,内存小对象待分配组即slab_small组,内存循环利用组即slab_empty组。
所述slab_full组是指组中所有内存中的对象空间已分配;所述slab_big组是指组中的内存待分配给大于预设字节(例如:512字节)的对象即大对象;所述slab_small组是指组中的内存待分配给小于或等于预设字节(例如:512字节)的对象即小对象;所述slab_empty组是指组中所有内存的对象空间已释放,可以回收到内存管理设备。
图3所示为本发明实施例3的内存状态转移图,如图3所示,
初始状态下,将所有内存分配至所述slab_big组中调用所述slab_big组中内存单元slab(空闲空间大于50%),对大于预设字节的对象进行分配;
若所述内存单元slab进行分配后,剩余空闲空间小于或等于预设值(例如:50%),则将其移动至所述slab_small组,分配空间给小对象;
若所述slab_big组中的内存单元存储已满或所述slab_small组中的内存单元存储已满,则将对应的内存单元移出至所述slab_full组,进程运行结束后,若所述slab_full组中内存单元的内存空间释放完毕,则内存空间释放完毕的内存单元被移入至所述slab_empty组,此时slab为空,以供所述slab_big组中的内存分配完毕后,调用所述slab_empty组中的slab。
图5所示为本发明实施例5的存储空间管理装置结构图,包括获取模块501、划分分组模块502、调整模块503;其中,所述获取模块501通过所述划分分组模块502与所述调整模块503连接;
所述获取模块501,用于获取缓存池并将缓存池信息发送至所述划分分组模块502;
所述划分分组模块502,用于对缓存池中的内存空间按照预设划分策略进行划分分组并将划分分组结果发送至所述调整模块503;
所述调整模块503,用于根据对象大小,将对象分配至对应的分组并在分组之间按照预设调整策略,对内存空间进行调整。
通过以下方案:获取缓存池并对缓存池中的内存空间按照预设划分策略进行划分分组;根据对象大小,将对象分配至对应的分组并在分组之间按照预设调整策略,对内存空间进行调整,充分利用了内存空间、加快了在内存中分配对象的速度,提高了内存利用率。
通过以下方案:调用所述slab_big组中内存单元,对大于预设字节的对象进行分配;若所述内存单元进行分配后,剩余空闲空间小于预设值,则将其移动至所述slab_small组;若所述slab_big组中的内存单元存储已满或所述slab_small组中的内存单元存储已满,则将对应的内存单元移至所述slab_full组,进程运行结束后,若所述slab_full组中内存单元的内存空间释放完毕,则内存空间释放完毕的内存单元被移入至所述slab_empty组,以供slab_big组或者slab_small组的资源耗尽时,进行调用,提高了内存的利用率,减少与内存管理设备交互的次数。
通过以下方案:所有内存单元中的对象之间采用缓存行对齐即cache line对齐,这样可以提高对象访问速度。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (3)
1.一种存储空间管理方法,其特征在于,包括以下步骤:
获取缓存池并对缓存池中的内存空间按照预设划分策略进行预先划分分组的过程为:
通过向内存管理设备申请,获得缓存池;
将缓存池中的内存空间划分为四个内存管理组;其中,每个内存管理组的内存大小为4个内存页大小;
所述四个内存管理组为内存已分配组即slab_full组,所述slab_full组是指组中所有内存中的对象空间已分配;内存大对象待分配组即slab_big组,所述slab_big组是指组中的内存待分配给大于预设字节的对象;内存小对象待分配组即slab_small组,所述slab_small组是指组中的内存待分配给小于或等于预设字节的对象;内存循环利用组即slab_empty组,所述slab_empty组是指组中所有内存的对象空间已释放;
对预先划分的分组进行配置,包括:将预先划分的slab_full组、slab_small组、slab_empty组初始化为空,其中,所述slab_full组、所述slab_empty组采用链表方式进行管理;slab_big组、所述slab_small组根据空闲空间大小采用大根堆进行管理,其中,初始状态下,将所有内存分配至所述slab_big组中并按照空闲空间的大小排序为大根堆;
根据对象大小,将对象分配至对应的分组并在分组之间按照预设调整策略,对内存空间进行调整,过程为:
调用所述slab_big组中内存单元,对大于预设字节的对象进行分配;
若所述内存单元进行分配后,剩余空闲空间小于预设值,则将其移动至所述slab_small组;
若所述slab_big组中的内存单元存储已满或所述slab_small组中的内存单元存储已满,则将对应的内存单元移至所述slab_full组,进程运行结束后,若所述slab_full组中内存单元的内存空间释放完毕,则内存空间释放完毕的内存单元被移入至所述slab_empty组。
2.根据权利要求1所述的方法,其特征在于,内存管理设备回收所述slab_empty组中的内存或所述slab_big组、slab_small组中的内存分配完毕后,调用所述slab_empty组中的内存。
3.一种存储空间管理装置,其特征在于,包括获取模块、划分分组模块、调整模块和配置模块;其中,所述获取模块通过所述划分分组模块与所述调整模块连接;
所述获取模块,用于获取缓存池并将缓存池信息发送至所述划分分组模块,包括:通过向内存管理设备申请,获得缓存池;
所述划分分组模块,用于对缓存池中的内存空间按照预设划分策略进行划分分组,包括:将缓存池中的内存空间划分为四个内存管理组;其中,每个内存管理组的内存大小为4个内存页大小;
所述四个内存管理组为内存已分配组即slab_full组,所述slab_full组是指组中所有内存中的对象空间已分配;内存大对象待分配组即slab_big组,所述slab_big组是指组中的内存待分配给大于预设字节的对象;内存小对象待分配组即slab_small组,所述slab_small组是指组中的内存待分配给小于或等于预设字节的对象;内存循环利用组即slab_empty组,所述slab_empty组是指组中所有内存的对象空间已释放;
所述配置模块,用于对划分的分组进行配置,包括:将划分的slab_full组,slab_small组,slab_empty组初始化为空,其中,所述slab_full组、所述slab_empty组采用链表方式进行管理;slab_big组、所述slab_small组根据空闲空间大小采用大根堆进行管理,其中,初始状态下,将所有内存分配至所述slab_big组中并按照空闲空间的大小排序为大根堆;
所述调整模块,用于根据对象大小,将对象分配至对应的分组并在分组之间按照预设调整策略,对内存空间进行调整,过程为:
调用所述slab_big组中内存单元,对大于预设字节的对象进行分配;
若所述内存单元进行分配后,剩余空闲空间小于预设值,则将其移动至所述slab_small组;
若所述slab_big组中的内存单元存储已满或所述slab_small组中的内存单元存储已满,则将对应的内存单元移至所述slab_full组,进程运行结束后,若所述slab_full组中内存单元的内存空间释放完毕,则内存空间释放完毕的内存单元被移入至所述slab_empty组。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510674525.8A CN105389210B (zh) | 2015-10-16 | 2015-10-16 | 一种存储空间管理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510674525.8A CN105389210B (zh) | 2015-10-16 | 2015-10-16 | 一种存储空间管理方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105389210A CN105389210A (zh) | 2016-03-09 |
CN105389210B true CN105389210B (zh) | 2019-07-30 |
Family
ID=55421517
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510674525.8A Active CN105389210B (zh) | 2015-10-16 | 2015-10-16 | 一种存储空间管理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105389210B (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105930217A (zh) * | 2016-04-15 | 2016-09-07 | 上海斐讯数据通信技术有限公司 | 一种线程优化系统及方法 |
CN106294198B (zh) * | 2016-08-05 | 2018-12-07 | 浪潮(北京)电子信息产业有限公司 | 一种Linux操作系统的内存分配方法及释放方法 |
CN108279850B (zh) * | 2017-01-06 | 2021-05-14 | 普天信息技术有限公司 | 一种数据资源的存储方法 |
CN106844050A (zh) * | 2017-01-19 | 2017-06-13 | 郑州云海信息技术有限公司 | 一种内存分配方法及装置 |
CN107168890B (zh) * | 2017-04-01 | 2021-03-19 | 杭州联吉技术有限公司 | 一种内存池的管理方法和装置 |
CN110209595A (zh) * | 2018-02-28 | 2019-09-06 | 贵州白山云科技股份有限公司 | 一种用于管理内存页的方法及装置 |
CN108647150A (zh) * | 2018-04-14 | 2018-10-12 | 温州职业技术学院 | 一种内存管理方法及系统 |
CN109359058B (zh) * | 2018-10-08 | 2021-07-06 | 郑州云海信息技术有限公司 | 一种非易失性内存储器支持方法与装置 |
CN109857678A (zh) * | 2019-01-31 | 2019-06-07 | 深兰科技(上海)有限公司 | 一种嵌入式系统内存管理方法及装置 |
CN111078407B (zh) * | 2019-12-10 | 2022-11-01 | Oppo(重庆)智能科技有限公司 | 内存管理的方法、装置、存储介质及电子设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101702138A (zh) * | 2009-10-30 | 2010-05-05 | 深圳市新飞扬数码技术有限公司 | 一种内存管理方法、系统及服务器 |
CN102915276A (zh) * | 2012-09-25 | 2013-02-06 | 武汉邮电科学研究院 | 一种用于嵌入式系统的内存控制方法 |
CN104778125A (zh) * | 2015-04-03 | 2015-07-15 | 无锡天脉聚源传媒科技有限公司 | 一种内存管理方法及系统 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7334104B2 (en) * | 2004-11-20 | 2008-02-19 | International Business Machines Corporation | Satisfying memory allocation requests from memory pool or lookaside lists based on memory size requested to be allocated |
EP2075698A1 (en) * | 2007-12-28 | 2009-07-01 | Software AG | Method and system for allocating memory in a broker system |
-
2015
- 2015-10-16 CN CN201510674525.8A patent/CN105389210B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101702138A (zh) * | 2009-10-30 | 2010-05-05 | 深圳市新飞扬数码技术有限公司 | 一种内存管理方法、系统及服务器 |
CN102915276A (zh) * | 2012-09-25 | 2013-02-06 | 武汉邮电科学研究院 | 一种用于嵌入式系统的内存控制方法 |
CN104778125A (zh) * | 2015-04-03 | 2015-07-15 | 无锡天脉聚源传媒科技有限公司 | 一种内存管理方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN105389210A (zh) | 2016-03-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105389210B (zh) | 一种存储空间管理方法及装置 | |
CN101221536B (zh) | 嵌入式系统的内存管理方法及装置 | |
CN105978985B (zh) | 一种用户态RPC over RDMA的内存管理方法 | |
CN103117947B (zh) | 一种负载分担方法及装置 | |
CN103902467B (zh) | 压缩内存访问控制方法、装置及系统 | |
CN102455974A (zh) | 一种内存消耗可控的高速内存申请释放管理系统及方法 | |
CN108038002A (zh) | 一种嵌入式软件内存管理方法 | |
CN102306126A (zh) | 内存管理方法、装置和系统 | |
CN103455433B (zh) | 内存管理方法及系统 | |
CN104731799A (zh) | 内存数据库管理装置 | |
CN109388590A (zh) | 提升多通道dma访问性能的动态缓存块管理方法和装置 | |
CN108829523A (zh) | 内存资源分配方法、装置、电子设备及可读存储介质 | |
CN105718319B (zh) | 一种内存池版图解析方法和内存池装置 | |
CN106557427A (zh) | 共享内存数据库的内存管理方法及装置 | |
CN107515788A (zh) | 一种内存分配的方法及装置 | |
CN106326004A (zh) | 一种嵌入式数据库的动态内存分配方法 | |
CN108845958A (zh) | 一种交织器映射和动态内存管理系统及方法 | |
CN103617123A (zh) | 一种通过内存块实现内存管理的方法及系统 | |
CN112685333A (zh) | 一种堆内存管理方法及装置 | |
CN109271409B (zh) | 一种基于容器资源分配的数据库分片执行方法 | |
CN102375780B (zh) | 一种分布式文件系统中元数据缓存管理的方法 | |
CN106776356A (zh) | 一种实现内存高速交互的系统及方法 | |
CN106919450A (zh) | 资源调整方法和装置 | |
CN104778125A (zh) | 一种内存管理方法及系统 | |
CN115599558A (zh) | 一种工业互联网平台的任务处理方法和系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |