[linux内存管理] 第025篇 细节拉满,80 张图带你一步一步推演 slab 内存池的设计与实现 4小时前查看 评论
[linux内存管理] 第025篇 细节拉满,80 张图带你一步一步推演 slab 内存池的设计与实现

本文详细介绍了 Linux 内核中用于零散小内存块分配的内存池——slab 分配器。首先回顾了 Linux 内存分配的宏观链路,然后解释了为什么需要 slab 分配器,以及它在内核中的应用场景。接着,从物理内存页 page 开始,逐步演进到完整的 slab 对象池架构,并详细介绍了 slab 的内存布局和基础信息管理。随后,阐述了 slab cache 的组织架构,包括本地 cpu 缓存 kmem_cache_cpu 和 NUMA 节点缓存 kmem_cache_node。最后,详细介绍了 slab cache 的内存分配和释放原理,包括快速路径和慢速路径,以及不同场景下的分配和释放逻辑。

[linux内存管理] 第024篇 slab内存分配器概述 7小时前查看 评论
[linux内存管理] 第024篇 slab内存分配器概述

本文主要介绍了Linux内核中的SLUB内存分配器,它是一种针对内核对象进行高效内存分配和回收的机制。以下是文章摘要: SLUB分配器通过以页为单位分配内存,减少了内存浪费,但提高了分配效率。它使用 struct kmem_cache 数据结构来管理每种类型的内核对象,通过批量操作、无锁路径和每CPU本地缓存实现高效与低碎片。文章详细介绍了SLAB分配器中的核心数据结构,包括 struct kmem_cache、slab_flags_t、struct kmem_cache_cpu 和 struct kmem_cache_node,以及它们的作用和关键成员。 SLUB通过减少全局锁的使用,提高多核并发安全性,并通过统计和调优来优化性能。此外,文章还解释了 struct page 中用于SLUB的部分,以及SLUB的对象空间布局。 总体来说,SLUB分配器通过优化内存分配策略,提高了Linux内核的内存利用率和性能。