集群细粒度内存管理方法技术

技术编号:10211403 阅读:170 留言:0更新日期:2014-07-12 17:26
本发明专利技术提供一种集群细粒度内存管理方法,包括下述步骤:步骤一.将内存分成两大类区域:第一类是全局共享区,负责尺寸大于等于尺寸阈值的大对象的分配和回收,第二类是每个线程独自的线程本地缓存,用于尺寸小于尺寸阈值的小对象的分配;线程本地缓存由多个块组组成,每个块组是一个内存对象的空闲链表,且一个块组内的块尺寸全部相等;不同块组之间,块组内的块尺寸关系采用阶梯式的等差关系;全局共享区包括小对象分配区和全局页缓存;步骤二.针对应用程序申请的内存进行内存分配,区分大小对象后分别进行对应的分配方式;步骤三.内存的释放;本方法兼顾大对象与小对象的分配与释放,特别适合多线程下的应用,内存利用率高。

【技术实现步骤摘要】
集群细粒度内存管理方法
本专利技术涉及计算机领域中分布式集群内的一种细粒度的内存管理方法,该方法主要针对分布式集群中申请的内存大小差异比较大的多线程的应用场景。
技术介绍
随着互联网特别是移动互联网的快速普及,信息化程度不断提高,各式各样的交互式、个性化应用造成了互联网中数据的爆炸式增长。在此形势之下,有关海量数据存储的研究随之发展迅猛。应用系统的业务访问量与日俱增,大量频繁快速的数据访问请求对应用服务器和数据管理系统的要求越来越高。如何利用有限资源合理提高数据访问效率,成为提升系统性能的关键。在众多数据管理系统和缓存管理系统中,内存资源的高效利用和管理无疑是备受关注的焦点。内存的合理利用能够大幅减少对磁盘的IO请求,从而快速提升系统性能。当前市场上有多种比较流行的基于内存的数据管理或缓存管理系统,如国外开源的Redis、Memcached等,以及国内的Tair等非持久化存储层。这些系统均在内存的利用和优化方面大下功夫,但是仍然存在不少不足之处,比如利用率仍然不高、删除策略非最优、管理自治度不高、无法适用多种应用场景等。内存管理方面,频繁使用默认的malloc和free函数,不但分配效率低下而且会产生大量的内存碎片。所以当下主流的数据管理系统和缓存管理系统都没有采用原生方式,而是提供了预分配内存的方案。该方案的基本原理借鉴于内存池,首先按照预先规定的大小,将预先分配的内存分割成指定长度的块组,每个组中包括若干相同长度的块,不同块组的块大小按照一个预先设定的增长因子构成等比关系。初始时,所有块组中的块均为空闲内存。在进行内存分配时,该方案会根据需求的内存大小,从空闲的块组中选择大小最接近的且大于所需内存的块来使用。如果该方案用于内存分配,则在用户释放内存的时候会将相应的块重新添加到空闲块组中;如果该方案用于缓存管理,则根据LRU(LeastRecentlyUsed,最近最少使用)算法进行缓存的过期淘汰和重复利用。一些系统在应用该方案时将增长因子设置成为2,即后一个块组的块大小为前一个块组的块大小的2倍。但这样块大小增长会很快,后面的块的差距会很大,容易造成空间浪费。此外,该方案在多线程的情况下必须采用加锁机制,影响内存的分配和回收效率。综上,当前的内存管理方案主要存在以下问题(1)内存的分配和回收速度。(2)多线程下的性能表现。(3)同时适用小对象与大对象的问题。
技术实现思路
本专利技术的目的在于克服现有技术中存在的不足,提供一种集群细粒度内存管理方法,提升内存的分配和回收效率,减少内存碎片的产生,提高内存利用率。本专利技术采用的技术方案是:一种集群细粒度内存管理方法,包括下述步骤:步骤一.将内存分成两大类区域:第一类是全局共享区,负责尺寸大于等于尺寸阈值的大对象的分配和回收;第二类是每个线程独自的线程本地缓存,用于尺寸小于尺寸阈值的小对象的分配;线程本地缓存由多个块组组成,每个块组是一个内存对象的空闲链表,且一个块组内的块尺寸全部相等;不同块组之间,块组内的块尺寸关系采用阶梯式的等差关系;全局共享区包括小对象分配区和全局页缓存;小对象分配区的结构与线程本地缓存相同,且有锁保护;全局页缓存用于处理大对象,且有锁保护;全局页缓存由多个空闲链表组成,全局页缓存的空闲链表称作页面组;每个空闲链表包含多个元素,全局页缓存的空闲链表的元素是相同尺寸的连续的内存页;第1个页面组的元素的尺寸是1个内存页,第2个页面组的元素的尺寸是2个内存页,以此类推,第255个页面组的元素的尺寸是255个内存页,但第256个页面组的元素的尺寸是大于等于256个内存页。进一步地,线程本地缓存中不同块组之间,块组内的块尺寸阶梯式的等差关系具体为:对较小的尺寸相差8个字节,略大一点的尺寸相差16个字节,然后相差32个字节,直至最大的尺寸相差间隔为256个字节。进一步地,区分大对象和小对象的尺寸阈值为32KB。步骤二.针对应用程序申请的内存进行内存分配,包括:首先判断所申请的内存大小是否大于等于尺寸阈值;若大于等于尺寸阈值,则进行步骤a;否则,进行步骤b;a.大对象的分配:a-1.将所需分配的尺寸,按4K的粒度向上圆整,设圆整后的大对象尺寸size=m*4K;m为正整数;a-2.对全局共享区的全局页缓存加锁;a-3.记p=max{2*m,256},判断页面组m的空闲链表是否为空;若不空,则直接删除该链表的第一个元素并将其返回;若为空,判断页面组p的空闲链表是否为空;若不空,则删除该链表的第一个元素得到连续的p个内存页,将该连续的p个内存页拆分成连续的m个页面和(p-m)个页面,分别插入到页面组m和页面组(p-m)中,重复步骤a-3;若为空,则直接向操作系统申请连续的m个内存页,将该连续的m个内存页添加到页面组m后,重复步骤a-3;a-4.释放全局共享区的全局页缓存的锁;b.小对象的分配,对应线程本地缓存;b-1.将所需分配的尺寸向上圆整到最接近的块组内块的尺寸,设尺寸为size′,且相对应的块组为块组k;b-2.判断块组k的空闲链表是否为空;若不空,则删除该空闲链表的第一个元素并将其返回;若为空,则需要对全局共享区进行操作;对全局共享区的小对象分配区申请加锁;判断全局共享区中小对象分配区的块组k是否为空;若不空,则从该块组中转移若干元素到线程本地缓存的块组k中,释放全局共享区的小对象分配区的锁,重复步骤b-2;若为空,则向全局页缓存申请new_size=max{size′*2,尺寸阈值}大小的大对象;申请成功后将该大对象拆分成若干个大小为size′的小对象,添加到全局共享区的小对象分配区的块组k中,释放全局共享区的小对象分配区的锁,重复步骤b-2。步骤三.内存的释放;首先判断释放的内存是否大于等于尺寸阈值;若大于等于尺寸阈值,则进行步骤a′;否则,进行步骤b′;a′.大对象的释放;a′-1.申请对全局共享区中的全局页缓存加锁;a′-2.判断全局页缓存的总空间是否超过设定空间阈值,若超过,直接将大对象释放给操作系统;否则,将待释放的内存添加回相对应的全局页缓存的页面组;a′-3.对全局页缓存解锁;b′.小对象的释放;b′-1.判断线程本地缓存的空间占用是否超过设定的空间阈值;b′-2.若未超过,则直接将小对象添加回相对应的块组中,结束释放流程;否则,继续下一步;b′-3.超过阈值时,需要将小对象释放到全局共享区,具体如下所述:申请对全局共享区的小对象分配区加锁;将小对象添加到全局共享区中小对象分配区的对应块组中;判断小对象分配区的总大小是否超过设定的阈值,若未超过,则直接释放锁,并结束释放流程;超过阈值时,扫描小对象分配区的所有小对象并排序;将所有能合并成一个大对象的小对象,从小对象分配区中删除,并合并成一个大对象;将该大对象释放到全局页缓存当中;释放小对象分配区的锁,结束释放流程。本专利技术的优点在于:本方法兼顾大对象与小对象的分配与释放,特别适合多线程下的应用,内存利用率高。附图说明图1为本专利技术的全局共享区和线程本地缓存示意图。图2为本专利技术的线程本地缓存结构示意图。图3为本专利技术的全局共享区的全局页缓存结构示意图。图4为本专利技术的流程图。具体实施方式下面结合具体附图和实施例对本专利技术作进一步说明。本专利技术主要将内存分成两大类区域:第一类是全局共享区,本文档来自技高网
...
集群细粒度内存管理方法

【技术保护点】
一种集群细粒度内存管理方法,其特征在于,包括下述步骤:步骤一.将内存分成两大类区域:第一类是全局共享区,负责尺寸大于等于尺寸阈值的大对象的分配和回收;第二类是每个线程独自的线程本地缓存,用于尺寸小于尺寸阈值的小对象的分配;线程本地缓存由多个块组组成,每个块组是一个内存对象的空闲链表,且一个块组内的块尺寸全部相等;不同块组之间,块组内的块尺寸关系采用阶梯式的等差关系;全局共享区包括小对象分配区和全局页缓存;小对象分配区的结构与线程本地缓存相同,且有锁保护;全局页缓存用于处理大对象,且有锁保护;全局页缓存由多个空闲链表组成,全局页缓存的空闲链表称作页面组;每个空闲链表包含多个元素,全局页缓存的空闲链表的元素是相同尺寸的连续的内存页;第1个页面组的元素的尺寸是1个内存页,第2个页面组的元素的尺寸是2个内存页,以此类推,第255个页面组的元素的尺寸是255个内存页,但第256个页面组的元素的尺寸是大于等于256个内存页。

【技术特征摘要】
1.一种集群细粒度内存管理方法,其特征在于,包括下述步骤:步骤一.将内存分成两大类区域:第一类是全局共享区,负责尺寸大于等于尺寸阈值的大对象的分配和回收;第二类是每个线程独自的线程本地缓存,用于尺寸小于尺寸阈值的小对象的分配;线程本地缓存由多个块组组成,每个块组是一个内存对象的空闲链表,且一个块组内的块尺寸全部相等;不同块组之间,块组内的块尺寸关系采用阶梯式的等差关系;全局共享区包括小对象分配区和全局页缓存;小对象分配区的结构与线程本地缓存相同,且有锁保护;全局页缓存用于处理大对象,且有锁保护;全局页缓存由多个空闲链表组成,全局页缓存的空闲链表称作页面组;每个空闲链表包含多个元素,全局页缓存的空闲链表的元素是相同尺寸的连续的内存页;第1个页面组的元素的尺寸是1个内存页,第2个页面组的元素的尺寸是2个内存页,以此类推,第255个页面组的元素的尺寸是255个内存页,但第256个页面组的元素的尺寸是大于等于256个内存页;步骤一之后,还包括下述步骤:步骤二.针对应用程序申请的内存进行内存分配,包括:首先判断所申请的内存大小是否大于等于尺寸阈值;若大于等于尺寸阈值,则进行步骤a;否则,进行步骤b;a.大对象的分配:a-1.将所需分配的尺寸,按4K的粒度向上圆整,设圆整后的大对象尺寸size=m*4K;m为正整数;a-2.对全局共享区的全局页缓存加锁;a-3.记p=max{2*m,256},判断页面组m的空闲链表是否为空;若不空,则直接删除该链表的第一个元素并将其返回;若为空,判断页面组p的空闲链表是否为空;若不空,则删除该链表的第一个元素得到连续的p个内存页,将该连续的p个内存页拆分成连续的m个页面和(p-m)个页面,分别插入到页面组m和页面组(p-m)中,重复步骤a-3;若为空,则直接向操作系统申请连续的m个内存页,将该连续的m个内存页添加到页面组m后,重复步骤a-3;a-4.释放全局共享区的全局页缓存的锁;b.小对象的分配,对应线程本地缓存;b-1.将所需分配的尺寸向上圆整到最接近的块组内块的尺寸,设尺寸为size′,且相对应的块组为块组k;b-2.判断块组k的空闲链表是否为空;若不空,则删...

【专利技术属性】
技术研发人员:安丰春台宪青王艳军赵旦谱图博
申请(专利权)人:江苏物联网研究发展中心
类型:发明
国别省市:江苏;32

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

1