memcache 使用slab机制对内存进行分配和管理的。
一 整体结构
把内存分成多个层次,在每个层次中,可以有多个page, 所有层次的page大小基本是一直的(为什么不相同,后面介绍),每个page中又分成相同大小的item,里面有多少个item,取决于page大小和item所在的层次,其中相邻层次直接item大小具有如下关系
size(item: n+1 ) = size( item: n) * grow_factor
其中的grow_factor 是可配置的参数。
在内存分配时,如果需要大小为k的空间,那么就从第n个层次中得到一个item ,其中n需要满足
size(item:n-1) < k <= size(item:n)
那么从n个层次中的这么多个item中取哪个?所有被取光了怎么办?使用完了释放了怎么办? 这些都会在后面进行详细的介绍
二 结构成员
三 函数介绍
3.1 slabs_clsid()
3.2 slabs_init
3.3 slabs_preallocate
3.4 grow_slab_list
3.5 do_slabs_newslab
3.6 do_slabs_alloc
3.7 do_slabs_free
四 总结
优点: 通过不同层次的item,以及空闲item维护,可以降低请求过程中内存的分配和释放,提高效率
缺点: 1 每次使用的item可能大于时间需求空间量,导致内存浪费。
五 参考
http://blogold.chinaunix.net/u1/56406/showart_2331017.html memcache探索之slabs
http://tech.idv2.com/2008/07/11/memcached-002/ 理解memcache内存机制