【操作系统百科】Slab/SLUB 分配器

💡 原文中文,约4400字,阅读约需11分钟。
📝

内容提要

SLUB是Linux内核中的对象缓存分配器,优化了内存分配效率,支持几乎无锁分配。它通过per-CPU freelist实现,支持KASAN和SLUB_DEBUG进行内存错误检测,并与cgroup v2兼容,允许限制内核内存使用。

🎯

关键要点

  • SLUB是Linux内核中的对象缓存分配器,优化了内存分配效率。

  • SLUB通过per-CPU freelist实现几乎无锁分配。

  • SLUB支持KASAN和SLUB_DEBUG进行内存错误检测。

  • SLUB与cgroup v2兼容,允许限制内核内存使用。

  • SLUB的设计简化了内存管理,减少了代码量和内存开销。

  • SLUB使用partial链表和冻结机制减少CPU间的争抢。

  • KASAN集成在SLUB级别检测内存错误,如UAF和OOB。

  • SLUB_DEBUG提供多种调试功能,但在生产环境中通常不启用以避免性能损失。

延伸问答

SLUB是什么,它的主要功能是什么?

SLUB是Linux内核中的对象缓存分配器,主要用于优化内存分配效率,支持几乎无锁分配。

SLUB是如何实现几乎无锁分配的?

SLUB通过per-CPU freelist实现几乎无锁分配,允许每个CPU缓存当前的slab和freelist。

SLUB支持哪些内存错误检测功能?

SLUB支持KASAN和SLUB_DEBUG进行内存错误检测,能够检测如使用后释放(UAF)和越界访问(OOB)等问题。

SLUB与cgroup v2的兼容性如何?

SLUB与cgroup v2兼容,允许限制内核内存使用,支持SLAB_ACCOUNT标志。

SLUB_DEBUG的作用是什么?

SLUB_DEBUG提供多种调试功能,如检查双重释放和对象损坏,但在生产环境中通常不启用以避免性能损失。

SLUB的设计如何简化内存管理?

SLUB的设计减少了代码量和内存开销,通过使用partial链表和冻结机制减少CPU间的争抢。

➡️

继续阅读