一种内存管理方法、装置、电子设备及存储介质制造方法及图纸

技术编号:30408125 阅读:18 留言:0更新日期:2021-10-20 11:19
本公开提供了一种内存管理方法、装置、电子设备及存储介质,用于解决内存利用率低、内存分配冲突的技术问题。本公开通过对内存进行分类分级管理,使业务实例所申请的内存空间尽可能地适配所提供的不同尺寸类型的内存块,通过将不同块分类及将不同大小的内存块分类组成组,将组与业务实例绑定,针对不同实例实现内存管理上的隔离,从而提高了内存使用率,避免了不同实例在内存分配上可能产生的冲突。免了不同实例在内存分配上可能产生的冲突。免了不同实例在内存分配上可能产生的冲突。

【技术实现步骤摘要】
一种内存管理方法、装置、电子设备及存储介质


[0001]本公开涉及计算及存储
,尤其涉及一种内存管理方法、装置、电子设备及存储介质。

技术介绍

[0002]云计算、物联网、社交网络等新兴服务的兴起促使人类社会的数据种类和规模正以前所未有的速度增长,大数据时代正式到来。大数据的规模效应给数据存储带来了极大的挑战。以Ceph为代表的分布式存储系统被广泛的应用于各种存储产品。在一个存储集群中各个实例(如OSD,MDS)对业务的高效处理能力决定了存储集群的性能,而各个实例在处理业务过程中对于内存的申请和释放效率是影响实例性能的关键因素之一。
[0003]基于Ceph的存储集群中的实例通过tcmalloc或者jemalloc等动态连接库中的接口实现内存分配和释放。tcmaloc和jemalloc的关键设计思想是将内存分配分为几类,如小对象,中对象,大对象。对于每种分类,细分若干个级别,减少内存碎片。对于线程保存其缓存,在应用进行内存申请释放时优先和缓存交互,提高效率。
[0004]tcmalloc和jemalloc作为通用的内存管理器在设计上考虑的是更通用的场景,采用的是预先设置固定内存大小级别的方式,没有针对具体的实际业务场景进行优化,如果实际业务频繁申请的内存空间的尺寸大小不在预先设置的内存级别划分之中,随着业务的进行会产生大量的内存碎片,造成内存浪费。

技术实现思路

[0005]有鉴于此,本公开提供一种内存管理方法、装置、电子设备及存储介质,用于解决内存利用率低、内存分配冲突的技术问题。
[0006]图1为本公开提供的内存管理方法的步骤流程图,该方法用于实现实例的内存分配,该方法包括:
[0007]步骤101.基于实例所申请的内存空间的大小适配块管理对象Part分类;其中,Part为由多个具有相同尺寸的切片管理内存块Slab组成的内存管理对象;所述Slab中包括由原始内存块Blk切分的多个相同大小的内存片Slice;所述Part依据Slice的大小分类;
[0008]步骤102.从本地缓存LocalCache中包括的与适配的Part分类一致的空闲内存片Slice中为实例分配内存;
[0009]步骤103.当所述LocalCache中的空间不足时,从适配的Part分类对应的Part所管理的具有空闲Slice的Slab中为实例分配内存;
[0010]步骤104.当适配的Part中无空闲的Slice时,从内存池MemPool中获取原始内存块Blk,将Blk初始化为适配的Part分类对应的Slab,将Slab加入到适配的Part中,再从适配的Part中为实例分配内存。
[0011]基于本公开实施例,进一步地,所述Part包括:
[0012]无空闲链表Emptylist,其中的所有Slab都是已将内部内存片Slice全部分配出去
的Slab;
[0013]部分空闲链表Partiallist,其中的所有Slab都是已将内部部分内存片Slice分配出去,还有部分Slice未被分配出去的Slab;
[0014]全空闲链表Fulllist,其中的所有Slab都是全部内存片Slice都未被分配的Slab;
[0015]所述从适配的Part分类对应的Part所管理的具有空闲Slice的Slab中为实例分配内存的方法为:
[0016]首先判断Partiallist中是否有充足的空闲的Slice可供分配,如果有则从对应的Slab中分配,如果没有则从Fulllist中获取未被分配的Slab填充到Partiallist中,然后再从填充的Slab中分配。
[0017]基于本公开实施例,进一步地,所述方法还用于实现实例的内存释放,内存释放的步骤包括:
[0018]在将释放的内存释放回LocalCache不会导致LocalCache溢出的情况下,将释放的内存释放回LocalCache;
[0019]在释放回LocalCache会导致LocalCache溢出的情况下,将释放的内存释放回Part;
[0020]在释放回Part会导致Part溢出的情况下,将释放的内存释放回MemPool;
[0021]在释放回MemPool会导致MemPool溢出的情况下,将释放的内存释放回操作系统。
[0022]基于本公开实施例,进一步地,所述方法还包括:
[0023]所述实例与块管理对象组Group绑定,所述Group由多个不同分类的Part组成;
[0024]所述基于所申请的内存空间的大小适配块管理对象Part分类具体为:在所述Group所包含的Part分类中进行适配;
[0025]所述适配的Part为所述Group中的Part。
[0026]基于本公开实施例,进一步地,所述方法中:
[0027]在实例启动时,使用Part分类表对所述Group进行初始化;
[0028]所述Part分类表采用默认配置和/或采用如下动态配置方法:
[0029]对实例申请的不同大小的内存空间的频率进行统计分析;
[0030]基于预设门限,在默认Part分类表中新增频率高于预设门限的内存空间大小对应的Part分类。
[0031]图2为本公开一实施例提供的一种内存管理装置结构示意图,该装置200中的各功能模块可以采用软件、硬件或软硬件相结合的方式实现。所述装置200用于实现实例的内存分配,该装置包括:
[0032]适配模块210,用于基于所申请的内存空间的大小适配块管理对象Part分类;其中,Part为由多个具有相同尺寸的切片管理内存块Slab组成的内存管理对象;所述Slab中包括由原始内存块Blk切分的多个相同大小的内存片Slice;所述Part依据Slice的大小分类;
[0033]本地缓存分配模块211,用于从本地缓存LocalCache中包括的与适配的Part分类一致的空闲内存片Slice中为实例分配内存;
[0034]块管理对象分配模块212,用于当所述LocalCache中的空间不足时,从适配的Part分类对应的Part所管理的具有空闲Slice的Slab中为实例分配内存;
[0035]内存池分配模块213,用于在适配的Part中无空闲的Slice时,从内存池MemPool中获取原始内存块Blk,将Blk初始化为适配的Part分类对应的Slab,将Slab加入到适配的Part中,再从适配的Part中为实例分配内存。
[0036]基于本公开实施例,进一步地,所述块管理对象分配模块212中包括:
[0037]无空闲链表Emptylist,其中的所有Slab都是已将内部内存片Slice全部分配出去的Slab;
[0038]部分空闲链表Partiallist,其中的所有Slab都是已将内部部分内存片Slice分配出去,还有部分Slice未被分配出去的Slab;
[0039]全空闲链表Fulllist,其中的所有S本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种内存管理方法,其特征在于,所述方法用于实现实例的内存分配,所述方法包括:基于实例所申请的内存空间的大小适配块管理对象Part分类;其中,Part为由多个具有相同尺寸的切片管理内存块Slab组成的内存管理对象;所述Slab中包括由原始内存块Blk切分的多个相同大小的内存片Slice;所述Part依据Slice的大小分类;从本地缓存LocalCache中包括的与适配的Part分类一致的空闲内存片Slice中为实例分配内存;当所述LocalCache中的空间不足时,从适配的Part分类对应的Part所管理的具有空闲Slice的Slab中为实例分配内存;当适配的Part中无空闲的Slice时,从内存池MemPool中获取原始内存块Blk,将Blk初始化为适配的Part分类对应的Slab,将Slab加入到适配的Part中,再从适配的Part中为实例分配内存。2.根据权利要求1所述的方法,其特征在于,所述Part包括:无空闲链表Emptylist,其中的所有Slab都是已将内部内存片Slice全部分配出去的Slab;部分空闲链表Partiallist,其中的所有Slab都是已将内部部分内存片Slice分配出去,还有部分Slice未被分配出去的Slab;全空闲链表Fulllist,其中的所有Slab都是全部内存片Slice都未被分配的Slab;所述从适配的Part分类对应的Part所管理的具有空闲Slice的Slab中为实例分配内存的方法为:首先判断Partiallist中是否有充足的空闲的Slice可供分配,如果有则从对应的Slab中分配,如果没有则从Fulllist中获取未被分配的Slab填充到Partiallist中,然后再从填充的Slab中分配。3.根据权利要求2所述的方法,其特征在于,所述方法还用于实现实例的内存释放,内存释放的步骤包括:在将释放的内存释放回LocalCache不会导致LocalCache溢出的情况下,将释放的内存释放回LocalCache;在释放回LocalCache会导致LocalCache溢出的情况下,将释放的内存释放回Part;在释放回Part会导致Part溢出的情况下,将释放的内存释放回MemPool;在释放回MemPool会导致MemPool溢出的情况下,将释放的内存释放回操作系统。4.根据权利要求1所述的方法,其特征在于,所述方法还包括:所述实例与块管理对象组Group绑定,所述Group由多个不同分类的Part组成;所述基于所申请的内存空间的大小适配块管理对象Part分类具体为:在所述Group所包含的Part分类中进行适配;所述适配的Part为所述Group中的Part。5.根据权利要求4所述的方法,其特征在于,在实例启动时,使用Part分类表对所述Group进行初始化;所述Part分类表采用默认配置和/或采用如下动态配置方法:对实例申请的不同大小的内存空间的频率进行统计分析;
基于预设门限,在默认Part分类表中新增频率高于预设门限的内存空间大小对应的Part分类。6.一种内存管理装置,其特征在于,所述装置用于实现实例的内存分配,该装置包括:适配模块,用于基于所申请的内存空间的大小适配块管理对象Part分类;其中,Part为由多个具有相同尺寸的切片管理内存块Slab组成的内存管理对象;所述Slab中包括由原始内存块Blk切分的多个相同大小的内存片Slice;...

【专利技术属性】
技术研发人员:白海龙
申请(专利权)人:新华三大数据技术有限公司
类型:发明
国别省市:

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

1