[发明专利]集群细粒度内存管理方法有效
申请号: | 201410141276.1 | 申请日: | 2014-04-09 |
公开(公告)号: | CN103914265B | 公开(公告)日: | 2016-11-23 |
发明(设计)人: | 安丰春;台宪青;王艳军;赵旦谱;图博 | 申请(专利权)人: | 江苏物联网研究发展中心 |
主分类号: | G06F3/06 | 分类号: | G06F3/06;G06F9/50 |
代理公司: | 无锡市大为专利商标事务所(普通合伙) 32104 | 代理人: | 殷红梅 |
地址: | 214135 江苏省无锡市新*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 集群 细粒度 内存 管理 方法 | ||
技术领域
本发明涉及计算机领域中分布式集群内的一种细粒度的内存管理方法,该方法主要针对分布式集群中申请的内存大小差异比较大的多线程的应用场景。
背景技术
随着互联网特别是移动互联网的快速普及,信息化程度不断提高,各式各样的交互式、个性化应用造成了互联网中数据的爆炸式增长。在此形势之下,有关海量数据存储的研究随之发展迅猛。应用系统的业务访问量与日俱增,大量频繁快速的数据访问请求对应用服务器和数据管理系统的要求越来越高。如何利用有限资源合理提高数据访问效率,成为提升系统性能的关键。在众多数据管理系统和缓存管理系统中,内存资源的高效利用和管理无疑是备受关注的焦点。内存的合理利用能够大幅减少对磁盘的IO请求,从而快速提升系统性能。当前市场上有多种比较流行的基于内存的数据管理或缓存管理系统,如国外开源的Redis、Memcached等,以及国内的Tair等非持久化存储层。这些系统均在内存的利用和优化方面大下功夫,但是仍然存在不少不足之处,比如利用率仍然不高、删除策略非最优、管理自治度不高、无法适用多种应用场景等。
内存管理方面,频繁使用默认的malloc和free函数,不但分配效率低下而且会产生大量的内存碎片。所以当下主流的数据管理系统和缓存管理系统都没有采用原生方式,而是提供了预分配内存的方案。该方案的基本原理借鉴于内存池,首先按照预先规定的大小,将预先分配的内存分割成指定长度的块组,每个组中包括若干相同长度的块,不同块组的块大小按照一个预先设定的增长因子构成等比关系。初始时,所有块组中的块均为空闲内存。在进行内存分配时,该方案会根据需求的内存大小,从空闲的块组中选择大小最接近的且大于所需内存的块来使用。如果该方案用于内存分配,则在用户释放内存的时候会将相应的块重新添加到空闲块组中;如果该方案用于缓存管理,则根据LRU(Least Recently Used,最近最少使用)算法进行缓存的过期淘汰和重复利用。一些系统在应用该方案时将增长因子设置成为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的空闲链表是否为空;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于江苏物联网研究发展中心,未经江苏物联网研究发展中心许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201410141276.1/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种设置有辅助多功能模块的环保3D快速成型机
- 下一篇:板材生产设备及方法