5月前
评论
[linux内存管理] 第025篇 细节拉满,80 张图带你一步一步推演 slab 内存池的设计与实现
本文介绍了 Linux 内核中的 slab 内存池,用于高效地分配和释放小内存块。作者首先回顾了 Linux 内存分配的宏观流程,然后引出 slab 内存池的产生背景和优势。slab 内存池将频繁使用的小内存块池化,避免了频繁的内存分配和释放带来的性能开销。文章详细介绍了 slab 对象池的内存布局,包括对齐、red zone、freepointer 和状态信息等。接着,文章分析了 slab 的总体架构设计,包括 kmem_cache、kmem_cache_cpu 和 kmem_cache_node 等数据结构。最后,文章详细介绍了 slab 内存分配和释放的原理,包括从本地 cpu 缓存、partial 列表、NUMA 节点缓存和伙伴系统中分配和释放内存的场景。
5月前
评论
[linux内存管理] 第024篇 slab内存分配器概述
Buddy系统以页为单位分配内存,导致浪费和效率低下。Solaris的Slab分配器通过对象类型专属仓库和缓存复用,极大提升命中率和访问速度。Linux随后演化出SLUB和SLOB,其中SLUB采用批量、无锁和本地CPU缓存等机制,大幅降低元数据开销与碎片化,优化了性能。