Memory management 在Linux内核中,在Slab和Slub分配器之间选择什么?

Memory management 在Linux内核中,在Slab和Slub分配器之间选择什么?,memory-management,linux-kernel,Memory Management,Linux Kernel,哪些因素有助于决定Linux内核中内存分配器的选择 在当前的Linux内核中,我们可以选择SLAB、SLUB或SLOB。我已经读到SLOB用于更小封装外形的内核。但我想知道哪些因素有助于在板坯分配器和竹节分配器之间做出决定。在寻找答案的过程中,我在Quora上发布了相同的问题,Robert Love回答了这个问题: 我假设你是从用户的角度来问这个问题的 一个系统,或者可能是为某个特定应用程序构建内核的人 产品。作为一名内核开发人员,您不关心什么是“slab”分配器 正在使用中;API是相同的 首

哪些因素有助于决定Linux内核中内存分配器的选择


在当前的Linux内核中,我们可以选择SLAB、SLUB或SLOB。我已经读到SLOB用于更小封装外形的内核。但我想知道哪些因素有助于在板坯分配器和竹节分配器之间做出决定。

在寻找答案的过程中,我在Quora上发布了相同的问题,Robert Love回答了这个问题:

我假设你是从用户的角度来问这个问题的 一个系统,或者可能是为某个特定应用程序构建内核的人 产品。作为一名内核开发人员,您不关心什么是“slab”分配器 正在使用中;API是相同的

首先,“slab”已成为一个泛称,指的是内存 采用对象缓存的分配策略,实现高效 内核对象的分配和解除分配。它首先被记录下来 由Sun工程师Jeff Bonwick编写,并在Solaris 2.4中实现 内核

Linux目前为其“slab”分配器提供三种选择:

Slab是原创的,基于Bonwick的开创性论文,可供选择 从Linux内核版本2.2开始。这是一个忠实的执行 Bonwick的建议,通过所描述的多处理器更改进行了补充 在Bonwick的后续论文中

Slub是下一代替换内存分配器,它具有 自2.6.23以来一直是Linux内核中的默认值。它继续 使用基本的“楼板”模型,但修复了 楼板的设计,特别是在具有大量 处理器。竹节比板坯简单

SLOB(简单块列表)是一个内存分配器,针对 内存非常少的嵌入式系统,大约为兆字节。信息技术 对块列表应用非常简单的首次拟合算法,而不是 与旧的K&R风格的堆分配器不同。在消除几乎所有 SLOB是内存分配器的外挂部分,非常适合于系统 在极端的内存限制下,但它没有提供任何好处 如中所述,可出现病理性碎片

你应该用什么?Slub,除非您正在为 内存有限的嵌入式设备。那样的话,我会的 对Slub和SLOB进行基准测试,看看什么最适合您的工作负载。 没有理由使用平板;它很可能会从未来删除 Linux内核版本


请参考这篇原始回复。

如果您还没有看到,谢谢:)但我已经读了那篇文章。它提供了一个关于Slub的见解,但我的问题并没有得到完全的回答。我在Quora上找到了答案。请注意,Debian和其他发行版已经回到SLAB,因为它在多处理器系统上速度更快。请看:@Ariel这很有趣,是否有任何基准或其他东西可以描述这背后的原因?