当前位置: 首页 > 专利查询>深圳大学专利>正文

一种内存分配的方法及装置制造方法及图纸

技术编号:14737776 阅读:86 留言:0更新日期:2017-03-01 11:16
本发明专利技术公开了一种内存分配的方法及装置,通过获取每个slab类的信息;根据预先设置的最小影响因子选择算法和所述信息计算每个slab类的影响因子;将影响因子最小的slab类选取为源slab类,将一段时间内换出数量最多的slab设置为目的slab;将所述源slab类中的一个slab内存清空回收后重分配给所述目的slab,提出最小影响因子选择算法,综合考虑压缩情况下的存储数据的特征,合理选择恰当的源slab类和目的slab进行回收和重分配;调整Memcached的内存分配机制,根据slab存储状态空、满等有效地划分了区域,当需要内存的时候从末尾空闲的slab开始回收。

【技术实现步骤摘要】

本专利技术实施例涉及内存分配的
,尤其涉及一种内存分配的方法及装置
技术介绍
Memcached根据请求对象的大小,将内存分配给相应的slab类。一旦Memcached中所有可用内存全部分配出去,当由于请求分布发生变化而导致内存重分配时问题就产生了,简称为钙化问题(Calcification),即Memcached中所有slab类的个数比例已经固定,无法根据变化的外部请求动态调整。如果Memcached需要存储的对象的大小分布情况不随着时间发生变化,那么钙化问题不会影响Memcached的性能,因为Memcached中已经实现的基本换出策略可以很好地保证存储热对象。然而,如果存储对象的大小分布情况随时在变化,使得钙化问题对Memcached的命中率有较大影响。解决Memcached钙化问题的直接方法是允许Memcached将已经分配出去的内存进行回收和重新分配给需要的slab类。数据压缩加剧了Memcached的钙化问题。在Memcached启动数据压缩功能的时候,不仅会在被压缩的slab类中留下的空间无法归还给Memcached,而且会对压缩后存入的slab类造成较大的压力。在添加了数据压缩功能的Memcached中,尽管数据压缩给Memcached带来了不同的性能提升效果,但是也加剧了Memcached的钙化问题。
技术实现思路
本专利技术实施例的目的在于提出一种内存分配的方法及装置,旨在解决添加了数据压缩功能的Memcached中的钙化问题。为达此目的,本专利技术实施例采用以下技术方案:第一方面,一种内存分配的方法,所述方法包括:获取每个slab类的信息,所述信息包括已使用对象数量、请求数量、对象总数和换出数量;根据预先设置的最小影响因子选择算法和所述信息计算每个slab类的影响因子;将影响因子最小的slab类选取为源slab类,将一段时间内换出数量最多的slab设置为目的slab;将所述源slab类中的一个slab内存清空回收后重分配给所述目的slab。优选地,所述根据预先设置的最小影响因子选择算法和所述信息计算每个slab类的影响因子,包括:其中,所述used_chunks表示所述特定slab类中已使用对象数量,所述request表示所述特定slab类中一段时间内的请求数量,所述total_chunks表示所述特定slab类中的对象总数。优选地,所述将所述源slab类中的一个slab内存清空回收后重分配给所述目的slab,包括:获取所述源slab类中空闲空间数量最大的slab;清空所述源slab类中空闲空间数量最大的slab内存,并将清空后的内存回收后重新分配到所述目的slab。优选地,所述方法还包括:将Memcached中已使用的空间和未使用的空间区别对待,将已使用的区域集中于slab前端,将未使用的区域集中于slab后端。优选地,所述方法还包括:在每个slab类中的每个slab的前端设置有用于指定该slab的范围的三个指针,所述三个指针包括用于标识slab中第一个存储对象的指针slab_start、用于标识slab中最后一个存储对象的指针slab_end、用于标识slab中当前可用存储对象的指针cur_free。第二方面,一种内存分配的装置,其特征在于,所述装置包括:获取模块,用于获取每个slab类的信息,所述信息包括已使用对象数量、请求数量、对象总数和换出数量;选择模块,用于根据预先设置的最小影响因子选择算法和所述信息计算每个slab类的影响因子;选取模块,用于将影响因子最小的slab类选取为源slab类,将一段时间内换出数量最多的slab设置为目的slab;分配模块,用于将所述源slab类中的一个slab内存清空回收后重分配给所述目的slab。优选地,所述选择模块,包括:其中,所述used_chunks表示所述特定slab类中已使用对象数量,所述request表示所述特定slab类中一段时间内的请求数量,所述total_chunks表示所述特定slab类中的对象总数。优选地,所述分配模块,用于:获取所述源slab类中空闲空间数量最大的slab;清空所述源slab类中空闲空间数量最大的slab内存,并将清空后的内存回收后重新分配到所述目的slab。优选地,所述装置还包括:调整模块,用于将Memcached中已使用的空间和未使用的空间区别对待,将已使用的区域集中于slab前端,将未使用的区域集中于slab后端。优选地,所述装置还包括:设置模块,在每个slab类中的每个slab的前端设置用于指定该slab的范围的三个指针,所述三个指针包括用于标识slab中第一个存储对象的指针slab_start、用于标识slab中最后一个存储对象的指针slab_end、用于标识slab中当前可用存储对象的指针cur_free。本专利技术实施例提供一种内存分配的方法及装置,所述方法通过获取每个slab类的信息,所述信息包括已使用对象数量、请求数量、对象总数和换出数量;根据预先设置的最小影响因子选择算法和所述信息计算每个slab类的影响因子;将影响因子最小的slab类选取为源slab类,将所述一段时间内换出数量最多的slab设置为目的slab;将所述源slab类中的一个slab内存清空回收后重分配给所述目的slab,提出最小影响因子选择算法,综合考虑压缩情况下的存储数据的特征,合理选择恰当的源slab类和目的slab进行回收和重分配;调整Memcached的内存分配机制,根据slab存储状态空、满等有效地划分了区域,当需要内存的时候从末尾空闲的slab开始回收。附图说明图1是本专利技术实施例提供的一种内存分配的方法的流程示意图;图2是本专利技术实施例提供的一种内存分配的方法的另一流程示意图;图3是本专利技术实施例提供的一种空间分配的方法示意图;图4是本专利技术实施例提供的另一种空间分配的方法示意图;图5是本专利技术实施例提供的一种内存分配的指针结构示意图;图6是本专利技术实施例提供的一种内存分配前后的钙化问题对比示意图;图7是本专利技术实施例提供的一种内存分配的装置的功能模块示意图。具体实施方式下面结合附图和实施例对本专利技术实施例作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本专利技术实施例,而非对本专利技术实施例的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本专利技术实施例相关的部分而非全部结构。参照图1,图1是本专利技术实施例提供的一种内存分配的方法的流程示意图。在图1中,所述内存分配的方法包括:步骤101,获取每个slab类的信息,所述信息包括已使用对象数量、请求数量、对象总数和换出数量;具体的,由于在Memcached中新增了数据压缩功能,Memcached中存储对象的数据特征发生变化。从压缩数量、请求数量以及对象总数的角度,提出了最小影响因子选择算法。影响因子(Impactfactor,IF)是综合压缩数量、请求数量以及对象总数对slab回收过程的影响得到的一个指标。步骤102,根据预先设置的最小影响因子选择算法和所述信息计算每个slab类的影响因子;优选地,所述根据预先设置的最小影响因子选择算法和所述信息计算每个slab类的影响因子,包括:其中,所述used_chunks表示所述特定slab类中已使用对象本文档来自技高网...
一种内存分配的方法及装置

【技术保护点】
一种内存分配的方法,其特征在于,所述方法包括:获取每个slab类的信息,所述信息包括已使用对象数量、请求数量、对象总数和换出数量;根据预先设置的最小影响因子选择算法和所述信息计算每个slab类的影响因子;将影响因子最小的slab类选取为源slab类,将一段时间内换出数量最多的slab设置为目的slab;将所述源slab类中的一个slab内存清空回收后重分配给所述目的slab。

【技术特征摘要】
1.一种内存分配的方法,其特征在于,所述方法包括:获取每个slab类的信息,所述信息包括已使用对象数量、请求数量、对象总数和换出数量;根据预先设置的最小影响因子选择算法和所述信息计算每个slab类的影响因子;将影响因子最小的slab类选取为源slab类,将一段时间内换出数量最多的slab设置为目的slab;将所述源slab类中的一个slab内存清空回收后重分配给所述目的slab。2.根据权利要求1所述的方法,其特征在于,所述根据预先设置的最小影响因子选择算法和所述信息计算每个slab类的影响因子,包括:IF=used_chunkstotal_chunks×requesttotal_chunks;]]>其中,所述used_chunks表示所述特定slab类中已使用对象数量,所述request表示所述特定slab类中一段时间内的请求数量,所述total_chunks表示所述特定slab类中的对象总数。3.根据权利要求1所述的方法,其特征在于,所述将所述源slab类中的一个slab内存清空回收后重分配给所述目的slab,包括:获取所述源slab类中空闲空间数量最大的slab;清空所述源slab类中空闲空间数量最大的slab内存,并将清空后的内存回收后重分配到所述目的slab。4.根据权利要求1至3任意一项所述的方法,其特征在于,所述方法还包括:将Memcached中已使用的空间和未使用的空间区别对待,将已使用的区域集中于slab前端,将未使用的区域集中于slab后端。5.根据权利要求1至3任意一项所述的方法,其特征在于,所述方法还包括:在每个slab类中的每个slab的前端设置有用于指定该slab的范围的三个指针,所述三个指针包括用于标识slab中第一个存储对象的指针slab_start、用于标识slab中最后一个存储对象的指针slab_end、用于标识slab中当前可用存储对象的...

【专利技术属性】
技术研发人员:罗秋明郭超张义军刘刚
申请(专利权)人:深圳大学
类型:发明
国别省市:广东;44

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

1