美文网首页
[Memcached] 初始Chunk size计算

[Memcached] 初始Chunk size计算

作者: 大头8086 | 来源:发表于2017-07-06 23:56 被阅读114次

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

    图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]](https://img.haomeiwen.com/i3190591/42a4d03d213324ae.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

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

    Chunk size must be greater than 0

    图3 Memcached启动命令n=0的chunk size

    相关文章

      网友评论

          本文标题:[Memcached] 初始Chunk size计算

          本文链接:https://www.haomeiwen.com/subject/togkhxtx.html