![[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 cache的创建、内存布局以及相关数据结构的初始化。文章首先介绍了slab cache的创建接口函数kmem_cache_create,并解释了其参数与slab cache结构体属性之间的对应关系。随后,文章深入探讨了slab cache的创建过程,包括参数校验、锁的获取、复用已有slab cache的尝试以及创建新slab cache的详细步骤。文章还详细介绍了slab对象的内存布局,包括对齐、red zone、freepointer等关键概念,并解释了如何计算slab所需的物理内存页个数。最后,文章介绍了slab cache在NUMA节点和CPU本地缓存中的结构初始化过程,以及slab allocator体系的初始化过程,包括如何解决“先有鸡还是先有蛋”的问题。通过本文的学习,读者可以深入了解slab内存池在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内存池,主要是为了解决小内存频繁分配和释放的场景,提高性能和减少内存浪费。 文章详细介绍了slab内存池的内存布局,包括内存对齐、red zone(红色警戒区域)的插入、freepointer(空闲指针)的存储以及对象的毒化(POISON)和状态跟踪。接着,文章深入分析了slab的总体架构设计,包括slab cache的基本信息管理,如对齐方式、毒化、red zone、追踪信息等,以及slab的组织架构,包括本地cpu缓存和NUMA节点缓存。 最后,文章详细介绍了slab内存分配和释放的原理,包括从本地cpu缓存、本地cpu缓存partial列表、NUMA节点缓存以及从伙伴系统中重新申请slab的场景。同时,文章还详细介绍了slab内存释放的原理,包括释放对象所属slab在cpu本地缓存、本地cpu缓存partial列表、从full slab变为partial slab以及从partial slab变为empty slab的场景。 总的来说,本文详细介绍了slab内存池的架构和原理,对于理解Linux内核中的内存管理机制具有重要意义。
![[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内核调度器的科普文章,作者XiaoGang通过内部项目复盘中的实际问题,引出了调度器的重要性和工作原理。文章主要内容包括: 1. 调度器的作用:CPU资源有限,但任务数量众多,调度器通过分时复用让用户感觉多个线程同时运行。 2. Linux的调度类:包括stop、deadline、realtime、fair和idle等,各有不同的优先级。 3. RT调度类与fair调度的区别:RT调度类按照优先级顺序选择任务,而fair调度类采用虚拟运行时间(virtual runtime)来决定任务的调度。 4. 调度器管理的任务:只有处于TASK_RUNNING状态的进程在调度器的管理范围内。 5. 比例调度的问题:通过大量低优先级线程可能占用较高资源配额。 6. cgroup的作用和问题:cgroup通过cpu.shares控制资源配额,解决比例调度问题,但同时也带来了一些新的挑战。 文章以实例和实验说明问题,深入浅出地解释了调度器的复杂机制。下周将更新续篇,继续探讨相关话题。
![[Android稳定性] 第049篇 [问题篇] 软中断霸占CPU导致watchdog无法及时喂狗](https://halo-19274848.oss-cn-shanghai.aliyuncs.com/2025/06/halo_tstlhyw.png?x-oss-process=image/resize,w_800,m_lfit)
[Android稳定性] 第049篇 [问题篇] 软中断霸占CPU导致watchdog无法及时喂狗
当前文章内容已隐藏,评论后可见。
![[Android稳定性] 第048篇 [原理篇] Android SWT机制介绍](https://halo-19274848.oss-cn-shanghai.aliyuncs.com/2025/06/halo_ahgrdvk.png?x-oss-process=image/resize,w_800,m_lfit)
[Android稳定性] 第048篇 [原理篇] Android SWT机制介绍
![[Android稳定性] 第047篇 [问题篇] Unexpected kernel BRK exception at EL1](https://halo-19274848.oss-cn-shanghai.aliyuncs.com/2025/06/halo_ityiau2.webp?x-oss-process=image/resize,w_800,m_lfit)
[Android稳定性] 第047篇 [问题篇] Unexpected kernel BRK exception at EL1
当前文章内容已隐藏,评论后可见。

【深入内核】linux ftrace详解
Ftrace(Function Tracer)是Linux内核自带的轻量级跟踪框架,用于记录内核内部事件和函数调用,帮助开发者分析系统执行路径、时序瓶颈和异常行为。Ftrace支持多种trace类型,包括function、function_graph、blk等,可以通过静态插桩和动态插桩两种方式实现。Ftrace可以通过配置内核参数和挂载debugfs文件系统来使能,并通过trace目录下的文件进行操作和管理。常见的trace event包括sched_switch、sched_wakeup、power/suspend_resume等,可以用于调试和分析系统性能和延迟问题。

高通平台xbl启动流程补充
这篇文章介绍了高通Android设备在启动过程中的XBL(eXtensible Boot Loader)阶段的详细启动流程。通过流程图和日志分析的方式,对XBL阶段的执行步骤进行了逐一解读,帮助理解从SBL到ABL之后的关键启动环节。
![[Android稳定性] 第046篇 [方法篇] 如何使用trace32恢复AOP现场?](https://halo-1259291793.cos.ap-shanghai.myqcloud.com/2025/06/a1dmnee.png?imageView2/0/w/800)
[Android稳定性] 第046篇 [方法篇] 如何使用trace32恢复AOP现场?
这篇文章介绍了使用hansei工具解析AOP/RPM以及使用trace32恢复AOP现场的过程,包括工具的获取、安装依赖库、执行工具、恢复前的准备工作以及恢复操作。