Linux内核中的Slab和Slub Allocator之间有什么选择?

时间:2013-03-18 05:59:03

标签: memory-management linux-kernel

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

在目前的Linux内核中,我们可以选择SLAB,SLUB或SLOB。我已经读过SLOB用于较小脚印的内核。但我想知道有助于在Slab Allocator和Slub Allocator之间做出决定的因素。

1 个答案:

答案 0 :(得分:51)

在寻找答案时,我在Quora上发布了同样的问题,Robert Love回答了这个问题:

  

我假设你是从用户的角度问这个   一个系统,或者也许某个人为某个特定的内核构建内核   产品。作为内核开发人员,你不关心什么是“slab”分配器   正在使用中; API是一样的。

     

首先,“slab”已成为指代记忆的通用名称   采用对象缓存的分配策略,实现高效   内核对象的分配和释放。它首先被记录在案   由Sun工程师Jeff Bonwick 1完成,并在Solaris 2.4中实现   内核。

     

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

     

Slab是最初的,基于Bonwick的开创性论文并且可用   自Linux内核版本2.2起。这是忠实的执行   Bonwick的提议,通过描述的多处理器变化得到了增强   在博威克的后续文件2中。

     

Slub是下一代替换内存分配器,具有   自2.6.23以来一直是Linux内核的默认设置。它继续   采用基本的“平板”模型,但修复了几个不足之处   Slab的设计,特别是在大量系统的设计   处理器。竹节比平板更简单。

     

SLOB(简单块列表)是一个优化的内存分配器   内存非常少的嵌入式系统 - 大约为兆字节。它   在块列表上应用非常简单的首先拟合算法,而不是   不像旧的K& R风格的堆分配器。在消除几乎所有   来自内存分配器的overhad,SLOB非常适合系统   在极端的内存限制下,但它没有提供任何好处   在1中描述并且可能遭受病理性碎片化。

     

你应该用什么?竹节,除非你正在构建内核   内存有限的嵌入式设备。在那种情况下,我愿意   基准Slub与SLOB,看看什么最适合您的工作量。   没有理由使用Slab;它可能会从将来删除   Linux内核版本。

请参阅此link以获取原始回复。