【操作系统百科】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间的争抢。
➡️