2026-07-22
[linux内存管理] 第 050 篇 深度分析 direct reclaim 机制
直接回收是 Linux 内存分配慢路径中的同步回收机制:当 kswapd 的后台回收跟不上分配需求、快路径已失败时,由分配线程“自己动手”回收页面,作为介于 kswapd 与 OOM 之间的第二道防线。整体流程发生在 __alloc_pages_slowpath 中:先尝试唤醒 kswapd 和常规分配,再进行内存压缩和预留内存使用,关键的第四阶段是 __alloc_pages_direct_reclaim,通过 __perform_reclaim 调用 try_to_free_pages 做实际回收,然后再用 get_page_from_freelist 重试分配;若仍失败,则一次性释放 H
2026-07-20
[linux内存管理] 第 049 篇 深度分析 Linux kswapd 后台回收机制
在上一节整体梳理内存回收机制之后,本篇聚焦“内脏细节”,系统性拆解 Linux 内核中实际扫描与释放页面的关键链路。文章围绕 kswapd 后台回收与直接回收两大路径展开:一条从 kswapd() → balance_pgdat() → shrink_node(),解析内核回收线程何时被唤醒、在何种回收程度下停止,以及它与页面分配器之间如何协同保持内存水位;
2026-07-16
[linux内存管理] 第 048 篇 从 alloc_pages() 开始:快慢路径下的内存回收策略
本文深入剖析了Linux内核内存回收的触发机制。当应用程序通过`alloc_pages()`请求内存时,若快速路径(从空闲列表获取)失败,便会进入慢速路径。慢速路径会根据情况唤醒`kswapd`后台内核线程进行异步回收,或在内存极度紧张时执行同步的直接回收。文章通过详细的调用流程图,清晰地展示了从分配入口到具体回收操作(如页面扫描、交换、释放)的完整路径,阐明了内核如何通过这种分层策略来平衡性能和内存可用性。
2026-07-15
[linux内存管理] 第 047 篇 Linux 内存回收(Memory Reclaim)总体架构
Memory Reclaim 是 Linux 内存管理的重要组成部分,也是理解内核内存管理的关键。本文以 Linux 5.15 为主线,从整体架构的角度梳理 Memory Reclaim 的工作流程、核心模块及源码结构,为后续深入分析页面回收机制做好铺垫。
2026-04-10
[linux内存管理] 第046篇 Page Cache脏页回写机制深入分析
围绕 Linux‑6.1 的 Page Cache 脏页回写机制展开,承接上一篇“脏页标记”,完整追踪数据从被修改到落盘的路径。先提炼回写要解决的三大问题:何时触发、由谁执行、如何高效写回;再从历史演进切入,对比早期全局 pdflush/kupdated 与现代按设备划分的 bdi_writeback 框架,重点解析 backing_dev_info、bdi_writeback 等核心结构中与脏页控制、阈值、速率限制和等待队列相关的关键字段。通过源码路径展示回写线程从 bdi_queue_work 被唤醒,到 wb_workfn 轮询任务、wb_do_writeout 扫描 inode 链表并
2026-03-06
[linux内存管理] 第045篇 per-CPU变量的静态与动态分配
延续前一篇对 per-CPU 基础与初始化的分析,这一部分聚焦于内核中的静态 per-CPU 变量及其使用方式。之后将问题的重点放在了动态per-CPU变量的分配逻辑上,并通过一个案例来分析分配逻辑的内部细节。
2026-03-04
[linux内存管理] 第044篇 per-CPU基础知识以及per-CPU分配器的初始化
围绕 Linux 在 ARM64、SMP 场景下的并发挑战,本章聚焦内核 per‑CPU 变量机制及其底层内存布局。详细介绍了per-CPU的初始化流程,并以一个简单的案例来计算percpu memory的布局。
2026-02-26
[linux内存管理] 第043篇 page cache 脏页跟踪机制
深入解析了Page Cache中脏页的跟踪机制。文章详细阐述了address_space结构体的作用,并对比了mmap映射与write系统调用两种场景下的脏页标记原理。内容涵盖缺页异常处理、页表项操作及回写流程,重点分析了ext4文件系统的具体实现,为理解内核数据持久化奠定了基础。
2026-02-04
[linux内存管理] 第042篇 Linux内核Page Cache机制深入分析
Page Cache作为Linux内核提升文件访问性能的核心机制,通过将磁盘数据缓存于内存,显著减少磁盘I/O次数。文章深度解析了Page Cache的架构及其关键数据结构,系统梳理address_space在文件和内存页间的桥梁作用。详细讲解address_space及page结构体的核心字段,阐明它们如何精准映射文件数据,实现高效的数据定位与状态管理,同时详细描述了读流程下的文件映射和内存映射的代码流程。