![[linux内存管理] 第000篇 Linux内存管理系列开篇](https://halo-19274848.oss-cn-shanghai.aliyuncs.com/2025/06/halo_pdqfdb0.png?x-oss-process=image/resize,w_800,m_lfit)
[linux内存管理] 第000篇 Linux内存管理系列开篇
这篇文章介绍了Linux内存管理相关的知识,包括内存管理预备知识、物理内存初始化流程、各种内存分配器(如buddy分配器、percpu分配器、CMA分配器、slab分配器等),以及内存管理中的一些专业术语解释。
![[linux内存管理] 第027篇 Linux ARM64 虚拟地址布局](https://halo-19274848.oss-cn-shanghai.aliyuncs.com/2025/06/halo_fqmrh3x.png?x-oss-process=image/resize,w_800,m_lfit)
[linux内存管理] 第027篇 Linux ARM64 虚拟地址布局
本文在讨论虚拟地址布局,所采用的是如下的配置: kernel版本:5.15 CONFIG_ARM64_VA_BITS=39 CONFIG_ARM64_PA_BITS=48 PAGE_SHIFT = 12 (4KB 页面) STRUCT_PAGE_MAX_SHIFT = 6 (默认值,struct p
![[linux内存管理] 第026篇 从内核源码看 slab 内存池的创建初始化流程](https://halo-19274848.oss-cn-shanghai.aliyuncs.com/2025/06/halo_o9u8kmg.png?x-oss-process=image/resize,w_800,m_lfit)
[linux内存管理] 第026篇 从内核源码看 slab 内存池的创建初始化流程
本文介绍了Linux内核中slab内存池的创建过程。slab内存池是一种高效的内存管理机制,用于分配和回收固定大小的内存块。文章详细解释了slab cache的创建流程,包括kmem_cache_create接口函数的参数、slab cache的架构设计、内核如何安排slab对象在内存中的布局等。此外,文章还介绍了slab allocator体系的初始化过程,以及内核如何解决创建第一个slab cache时遇到的“先有鸡还是先有蛋”的问题。最后,文章总结了slab cache的创建过程和slab allocator体系的初始化过程,为读者提供了深入理解Linux内核内存管理的参考。
![[linux内存管理] 第025篇 细节拉满,80 张图带你一步一步推演 slab 内存池的设计与实现](https://halo-19274848.oss-cn-shanghai.aliyuncs.com/2025/06/halo_o9u8kmg.png?x-oss-process=image/resize,w_800,m_lfit)
[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内存分配器概述](https://halo-19274848.oss-cn-shanghai.aliyuncs.com/2025/06/halo_o9u8kmg.png?x-oss-process=image/resize,w_800,m_lfit)
[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内核的内存利用率和性能。
![[linux内存管理] 第023篇 watermark详解](https://halo-19274848.oss-cn-shanghai.aliyuncs.com/2025/06/halo_pw9ljvu.png?x-oss-process=image/resize,w_800,m_lfit)
[linux内存管理] 第023篇 watermark详解
0. 前言 简单来说,在使用zoned page frame allocator分配页面时,会将可用的free pages与zone的watermark进行比较,以便确定是否分配内存。 同时watermark也用来决定kswapd内核线程的睡眠与唤醒,以便对内存进行检索和压缩处理。 回忆一下之前提到
![[linux内存管理] 第22篇 buddy内存管理之慢速分配](https://halo-19274848.oss-cn-shanghai.aliyuncs.com/2025/06/halo_vhe9kfz.png?x-oss-process=image/resize,w_800,m_lfit)
[linux内存管理] 第22篇 buddy内存管理之慢速分配
0. 前言 在上一篇文章中我们分析了__alloc_pages中的get_page_from_freelist,也就是快速分配部分。这个函数会根据分配掩码和分配order进行快速分配,若快速分配过程并不能分配到合适的内存时,则会进入慢速分配的过程。 本文紧接前文继续分析__alloc_pages函数
![[linux内存管理] 第21篇 buddy内存管理之快速分配](https://halo-19274848.oss-cn-shanghai.aliyuncs.com/2025/06/halo_zarkuub.png?x-oss-process=image/resize,w_800,m_lfit)
[linux内存管理] 第21篇 buddy内存管理之快速分配
0. 前言 在前一文[linux内存管理] 第19篇 buddy分配器基础知识以及分配器api接口中,对buddy分配器的基础知识做了简单的介绍,包括涉及到的分配掩码、分配标志、分配入口函数、释放入口函数,而buddy分配的工作是分为快速分配和慢速分配两种的 快速分配:指现有的buddy系统中的fr
![[linux内存管理] 第020篇 Linux内核slab内存的越界检查SLUB_DEBUG的原理剖析](https://hexoimg.oss-cn-shanghai.aliyuncs.com/blog/25/2/cover_linux_memory_management_020.png)
[linux内存管理] 第020篇 Linux内核slab内存的越界检查SLUB_DEBUG的原理剖析
copyright_author: 蜗窝科技 copyright_author_href: http://www.wowotech.net copyright_url: http://www.wowotech.net/memory_management/427.html copyright_info
![[linux内存管理] 第019篇 buddy分配器基础知识以及分配器api接口](https://hexoimg.oss-cn-shanghai.aliyuncs.com/blog/25/1/cover_linux_memory_management_019.png)
[linux内存管理] 第019篇 buddy分配器基础知识以及分配器api接口
0. 前言 众所周知,Linux内存管理的核心是伙伴系统(buddy system)。其实在linux启动的那一刻,内存管理就已经开始了,只不过不是buddy在管理。在内核中,实现物理内存管理的allocator包括: 连续物理内存管理buddy allocator 非连续物理内存管理vmalloc