[Memcached] 初始Chunk size计算

在学习Memcached的Slab Allocation过程中,查看默认的Slab和Chunk size分配,如图1,发现第一个Chunk size=96B,很好奇这个96B是怎么计算的。

《[Memcached] 初始Chunk size计算》 图1 Memcached启动后的chunk size

Memcached启动命令有一个选项-n,设置第一个item存储多少字节的数据,如果没有指定-n,默认48。该选项参数赋值给settings.chunk_size。
当memcached启动时,初始化第一个Slab的chunk size首先指定为:

unsigned int size = sizeof(item) + settings.chunk_size;

其中,32位机器item结构是32字节,64位机器item结构是48字节。
然后为了内存字节对齐,size必须是8的整数倍,其中CHUNK_ALIGN_BYTES=8:

if (size % CHUNK_ALIGN_BYTES)
    size += CHUNK_ALIGN_BYTES – (size % CHUNK_ALIGN_BYTES);

所以图1的第一个Slab的chunk size = 48 + 48 = 96B。

启动memcached时n = 1,按照上面的推算第一个Slab的chunk size = 48 + 1 + 7 = 56B,加7是为了字节对齐,图2的memcached启动也验证推算结果。

![图2 Memcached启动命令n=1的chunk size]](http://upload-images.jianshu.io/upload_images/3190591-42a4d03d213324ae.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

最后,当启动memcached时n = 0,如图3,报如下错误信息:

Chunk size must be greater than 0

《[Memcached] 初始Chunk size计算》 图3 Memcached启动命令n=0的chunk size

    原文作者:大头8086
    原文地址: https://www.jianshu.com/p/59b4e61f61d2
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞