Slub 分配器 -- Linux 内核对 Slab 的优化
1996 年在 Linux 2.0 版本中引入了 slab allocator 之后, 逐渐暴露出一些问题. 因此在 2.6.22 版本对原有的算法进行了简化, 得到 Slub.
- 深入理解 Linux 内存管理(八)slab,slob 和 slub 介绍
- 每个 node 节点有三个链表,分别记录空闲 slab、部分空闲 slab 和非空闲 slab。当回收操作来不及时,三个链表记录的页框会较长时间停留到 slab 管理器中,不利于提高内存的使用率。针对这点,slub 只保留了一个链表,就是部分空闲 slub。
- 每个 cpu 私有数据记录的是 object 的地址,这些 object 可能来自不同的 slab,那么不利于 slab 的回收。slub 改成记录一个实际可用的 slub,不会影响其他 slub 的回收。
- shared 共享链表可能导致一个 slab 持有较多 slab,无法即使释放给伙伴系统。slub 去掉了该链表。可见,slub 出现的主要目的是为了减少 slab 的数量,提高内存的使用率。同时,出于对内存使用率的极致追求,slub 去除了 slab 的着色做法,取而代之是 slub 复用,通过 slub 复用减轻 cache 冲突的情况。