3周前
[linux内存管理] 第 049 篇 深度分析 Linux kswapd 后台回收机制
在上一节整体梳理内存回收机制之后,本篇聚焦“内脏细节”,系统性拆解 Linux 内核中实际扫描与释放页面的关键链路。文章围绕 kswapd 后台回收与直接回收两大路径展开:一条从 kswapd() → balance_pgdat() → shrink_node(),解析内核回收线程何时被唤醒、在何种回收程度下停止,以及它与页面分配器之间如何协同保持内存水位;
2026-07-16
[linux内存管理] 第 048 篇 从 alloc_pages() 开始:快慢路径下的内存回收策略
本文深入剖析了Linux内核内存回收的触发机制。当应用程序通过`alloc_pages()`请求内存时,若快速路径(从空闲列表获取)失败,便会进入慢速路径。慢速路径会根据情况唤醒`kswapd`后台内核线程进行异步回收,或在内存极度紧张时执行同步的直接回收。文章通过详细的调用流程图,清晰地展示了从分配入口到具体回收操作(如页面扫描、交换、释放)的完整路径,阐明了内核如何通过这种分层策略来平衡性能和内存可用性。
2025-03-24
[linux内存管理] 第023篇 watermark详解
本文探讨了 Linux 内存管理中的水位机制,特别是 `zoned page frame allocator` 如何使用水位来控制内存分配和回收。文章首先介绍了 `struct zone` 结构体和三种水位 `WMARK_MIN`、`WMARK_LOW` 和 `WMARK_HIGH` 的概念及其作用。随后,文章详细分析了水位的初始化过程,包括计算 `min_free_kbytes`、更新内存区水位、刷新内存区统计阈值和初始化低内存保留等步骤。接着,文章讨论了快速分配和慢速分配中的水位检测机制,以及 `kswapd` 和内存规整过程中的水位检测。最后,文章强调了调整内存水位的重要性,以及如何根据不同业务场景进行优化。