有哪些因素有助于决定Linux内核中内存分配器的选择?
在目前的Linux内核中,我们可以选择SLAB,SLUB或SLOB。我已经读过SLOB用于较小脚印的内核。但我想知道有助于在Slab Allocator和Slub Allocator之间做出决定的因素。
答案 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以获取原始回复。