一种内存分配的方法及装置与流程

文档序号:12157661阅读:来源:国知局

技术特征:

1.一种内存分配的方法,其特征在于,所述方法包括:

获取每个slab类的信息,所述信息包括已使用对象数量、请求数量、对象总数和换出数量;

根据预先设置的最小影响因子选择算法和所述信息计算每个slab类的影响因子;

将影响因子最小的slab类选取为源slab类,将一段时间内换出数量最多的slab设置为目的slab;

将所述源slab类中的一个slab内存清空回收后重分配给所述目的slab。

2.根据权利要求1所述的方法,其特征在于,所述根据预先设置的最小影响因子选择算法和所述信息计算每个slab类的影响因子,包括:

<mrow> <mi>I</mi> <mi>F</mi> <mo>=</mo> <mfrac> <mrow> <mi>u</mi> <mi>s</mi> <mi>e</mi> <mi>d</mi> <mo>_</mo> <mi>c</mi> <mi>h</mi> <mi>u</mi> <mi>n</mi> <mi>k</mi> <mi>s</mi> </mrow> <mrow> <mi>t</mi> <mi>o</mi> <mi>t</mi> <mi>a</mi> <mi>l</mi> <mo>_</mo> <mi>c</mi> <mi>h</mi> <mi>u</mi> <mi>n</mi> <mi>k</mi> <mi>s</mi> </mrow> </mfrac> <mo>&times;</mo> <mfrac> <mrow> <mi>r</mi> <mi>e</mi> <mi>q</mi> <mi>u</mi> <mi>e</mi> <mi>s</mi> <mi>t</mi> </mrow> <mrow> <mi>t</mi> <mi>o</mi> <mi>t</mi> <mi>a</mi> <mi>l</mi> <mo>_</mo> <mi>c</mi> <mi>h</mi> <mi>u</mi> <mi>n</mi> <mi>k</mi> <mi>s</mi> </mrow> </mfrac> <mo>;</mo> </mrow>

其中,所述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中当前可用存储对象的指针cur_free。

6.一种内存分配的装置,其特征在于,所述装置包括:

获取模块,用于获取每个slab类的信息,所述信息包括已使用对象数量、请求数量、对象总数和换出数量;

选择模块,用于根据预先设置的最小影响因子选择算法和所述信息计算每个slab类的影响因子;

选取模块,用于将影响因子最小的slab类选取为源slab类,将一段时间内换出数量最多的slab设置为目的slab;

分配模块,用于将所述源slab类中的一个slab内存清空回收后重分配给所述目的slab。

7.根据权利要求6所述的装置,其特征在于,所述选择模块,包括:

<mrow> <mi>I</mi> <mi>F</mi> <mo>=</mo> <mfrac> <mrow> <mi>u</mi> <mi>s</mi> <mi>e</mi> <mi>d</mi> <mo>_</mo> <mi>c</mi> <mi>h</mi> <mi>u</mi> <mi>n</mi> <mi>k</mi> <mi>s</mi> </mrow> <mrow> <mi>t</mi> <mi>o</mi> <mi>t</mi> <mi>a</mi> <mi>l</mi> <mo>_</mo> <mi>c</mi> <mi>h</mi> <mi>u</mi> <mi>n</mi> <mi>k</mi> <mi>s</mi> </mrow> </mfrac> <mo>&times;</mo> <mfrac> <mrow> <mi>r</mi> <mi>e</mi> <mi>q</mi> <mi>u</mi> <mi>e</mi> <mi>s</mi> <mi>t</mi> </mrow> <mrow> <mi>t</mi> <mi>o</mi> <mi>t</mi> <mi>a</mi> <mi>l</mi> <mo>_</mo> <mi>c</mi> <mi>h</mi> <mi>u</mi> <mi>n</mi> <mi>k</mi> <mi>s</mi> </mrow> </mfrac> <mo>;</mo> </mrow>

其中,所述used_chunks表示所述特定slab类中已使用对象数量,所述request表示所述特定slab类中一段时间内的请求数量,所述total_chunks表示所述特定slab类中的对象总数。

8.根据权利要求6所述的装置,其特征在于,所述分配模块,用于:

获取所述源slab类中空闲空间数量最大的slab;

清空所述源slab类中空闲空间数量最大的slab内存,并将清空后的内存回收后重新分配到所述目的slab。

9.根据权利要求6至8任意一项所述的装置,其特征在于,所述装置还包括:

调整模块,用于将Memcached中已使用的空间和未使用的空间区别对待,将已使用的区域集中于slab前端,将未使用的区域集中于slab后端。

10.根据权利要求6至8任意一项所述的装置,其特征在于,所述装置还包括:

设置模块,用于在每个slab类中的每个slab的前端设置用于指定该slab的范围的三个指针,所述三个指针包括用于标识slab中第一个存储对象的指针slab_start、用于标识slab中最后一个存储对象的指针slab_end、用于标识slab中当前可用存储对象的指针cur_free。

当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1