- 0
- 0
- 约6.08千字
- 约 6页
- 2021-10-19 发布于福建
- 举报
Memcached 内存分配与 SLAB机制
Home, Beijing Langwan
/
December 2010
目录
第 1 章 前言 2
第 2 章 slab 机制 2
第 3 章 启动参数 2
3.1 -m 3
3.2 –M 3
3.3 –f 3
3.4 –n 3
3.5 –L 3
3.6 –I 3
第 4 章 详细逻辑 3
4.1 初始化 slab class 3
4.2 申请资源 4
4.2.1 确认 class id 4
4.2.2 申请 chunk 5
4.2.3 线程安全 5
4.2.4 LRU 5
4.3 释放资源 6
第 5 章 内存分配的其它问题 6
5.1 LRU策略 6
第 1章 前言
文章比较短, 但主要的内存分配问题已经分析的很清楚了, 需要更详细了解, 请顺着文
章阅读一下源代码即可。
第2 章 slab 机制
slab 是 Memcached 用来存放 item 的一种机制,如下图所示:
slab class 可以被看做一个没有底的桶,后面我们简称为 class,class 本身没有大小的概
念,只有页数,每页默认不超过 1M ,因此一个 class 就是一个多页集合, 每页里存放着 chunk ,
不同 class 的页大小是一致的,但 chunk 的大小是不一致的,默认情况下 class 1 的 chunk 大
小是 96 字节, class 42 的 chunk 大小是 1M ,因此不同 class 里的 page 能容纳的 chunk 单元
数不同, class 1每页可以放 1 万个单元, class 每页只能放 1 个单元,所有 class 所分配的内
存总数不能超过默认 64M ,也就是启动项中的 -m 参数,当已经没有更多的内存可以分配的
时候, memcached 开始进行 LRU处理,淘汰已经过期的内容。
不同 class 之间的 chunk 大小是依据 factor 来计算的, 默认值是 1.25,也就是下一个 class
的 chunk 大小是上个 class 的 1.25 倍。
第3章 启动参数
mamcached 中有一些与内存分配有关的参数,我们进行一下介绍。
3.1 -m
可使用内存的总大小,当达到这个值的时候, memcached 开始启用 LRU 淘汰内容,默
认是 64m ,这是一般系统都需要设置的值。
3.2 –M
禁用 LRU机制,当内存耗尽的时候不淘汰旧内容。
3.3 –f
增长因子默认值 1.25,增长因子越小 class分配的越多, 增长因子设置的越大 class越少。
3.4 –n
可以被看做是 chunk 的最小值,默认值是 48 字节,但由于 chunk 本身的数据结构也是
48 字节,所以最小 chunk 大小就变成了 96 字节,总是比你想分配的要大 48 字节。
3.5 –L
尝试一次性申请 -m 中规定的最大内存,所有未来的内存开销都基于这块内存,而不在
向系统中进行分配。
3.6
原创力文档

文档评论(0)