原文:http://blog.sina.com.cn/s/blog_7530db6f0100omfn.html
Memcached Slab算法是根据powers of 2来将1MB的内存块划分成多个小内存块, 而这1MB的内存块称为页:
Powers of 2是2的n次方的意思,例如:2的0次方是1,2的1次方是2,2的2次方是4,2的3次方是8等等。
而将1MB的内存按2的n次方划分可以划分成20种不同的内存块,因为2的20次方是1MB(1048576)。所以可以说,memcached管理着20种不同的内存块的集合。
而memcached是通过slabclass_t结构体来管理这些小内存块的, slabclass_t的定义如下:
typedef struct
{
unsigned int size;
unsigned int perslab;
void **slots;
unsigned int sl_total;
unsigned int sl_curr;
void *end_page_ptr;
unsigned int end_page_free;
unsigned int slabs;
void **slab_list;
unsigned int list_size;
unsigned int killing;
} slabclass_t;
根据上面的结构体,我们完全可以指定memcached中slabs实际的内存分配。
2. slab 内存分配单位