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

Sid*_*rth 38 memory-management linux-kernel

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

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

Sid*_*rth 51

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

我假设您从系统用户的角度来询问这个问题,或者可能是为某个特定产品构建内核的人.作为内核开发人员,您不关心正在使用的"slab"分配器; API是一样的.

首先,"slab"已成为一个通用名称,指的是采用对象缓存的内存分配策略,从而实现内核对象的有效分配和释放.它首先由Sun工程师Jeff Bonwick 1记录,并在Solaris 2.4内核中实现.

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

Slab是最初的,基于Bonwick的开创性论文,自Linux内核版本2.2起可用.这是对Bonwick提案的忠实实施,并通过Bonwick的后续文件2中描述的多处理器更改得到了增强.

Slub是下一代替换内存分配器,自2.6.23以来一直是Linux内核的默认内存分配器.它继续采用基本的"平板"模型,但修复了Slab设计中的一些缺陷,特别是在具有大量处理器的系统中.竹节比平板更简单.

SLOB(简单块列表)是一种内存分配器,针对内存非常少的嵌入式系统进行了优化 - 大小为兆字节.它在块列表上应用了一个非常简单的首先拟合算法,与旧的K&R样式堆分配器不同.在消除了几乎所有从内存分配器的overhad的,SLOB是非常适合在极端的内存限制的系统,但它提供了全没有描述的好处1,可以从病理碎片受苦.

你应该用什么?Slub,除非您为内存有限的嵌入式设备构建内核.在这种情况下,我会对Slub和SLOB进行基准测试,看看什么最适合您的工作量.没有理由使用Slab; 它可能会从未来的Linux内核版本中删除.

请参阅此链接以获取原始回复.

  • 请注意,Debian和其他发行版已经回到SLAB,因为它在多处理器系统上更快.请参阅:https://lists.debian.org/debian-kernel/2012/03/msg00944.html (3认同)
  • @Ariel,这很有趣,是否有任何基准或描述其背后原因的东西? (2认同)