随笔分类 -  内存管理

内存管理-31-系统内存统计-6-dumpsys meminfo-2-理论实现
摘要:一、dumpsys meminfo <pid> 的实现原理 下面基于你当前两套源码说明;Android 12 与 Android 14 的核心链路基本一致, 主要基于 Android 12 来说。 1. 整体调用链 adb shell dumpsys meminfo <pid> │ ▼ dumpsy 阅读全文

posted @ 2026-09-15 15:37 Hello-World3 阅读(12) 评论(0) 推荐(0)

内存管理-72-THP-2-chatGPT
摘要:一、使能THP对性能和内存的影响 1. THP 带来的性能收益 收益来源 机制 幅度 TLB miss 减少 一个 TLB 条目覆盖 2MB(原来需要 512 个 4KB 条目) TLB miss 率可降低 50-90% 页表开销减少 一个 PMD 条目替代 512 个 PTE 条目 页表内存减少 阅读全文

posted @ 2026-08-25 18:22 Hello-World3 阅读(12) 评论(0) 推荐(0)

内存管理-80-PAGE_REPORTING-6.1
摘要:一、page report 简介 CONFIG_PAGE_REPORTING —— 空闲页报告机制 1. 一句话总结 Page Reporting 让虚拟机(Guest)告诉宿主机(Host)"哪些物理页我不用了",Host 可以回收这些页面的物理内存给其他虚拟机或自身使用,实现内存超分(overc 阅读全文

posted @ 2026-08-24 11:41 Hello-World3 阅读(15) 评论(0) 推荐(0)

内存管理-79-free_pages-6.1
摘要:调用路径: free_pages(addr, order) __free_pages(page, order) free_the_page(page, order) if (pcp_allowed_order(order)) { //计划还给PCP free_unref_page(page, ord 阅读全文

posted @ 2026-08-22 22:19 Hello-World3 阅读(12) 评论(0) 推荐(0)

内存管理-77-内存检测工具-1-KMSAN-1-简介
摘要:注: Linux-6.1.114 默认不使能。 一、KMSAN 简介 CONFIG_KMSAN(Kernel Memory Sanitizer)检测内核中对未初始化内存的使用——即读取了从未被写入过的变量/内存区域。 1. 检测什么问题 /* 问题 1:栈变量未初始化 */ int do_somet 阅读全文

posted @ 2026-08-21 14:57 Hello-World3 阅读(7) 评论(0) 推荐(0)

内存管理-76-缺页异常-1-理论-chatGPT
摘要:一、帮忙列出缺页异常各个物理内存分配路径和分配掩码 Linux 6.1 (MTK) 缺页异常的物理内存分配路径与 GFP 掩码 入口流程: do_page_fault() → handle_mm_fault() → __handle_mm_fault() // 分配页表 + 分发到具体 handle 阅读全文

posted @ 2026-08-14 21:20 Hello-World3 阅读(11) 评论(0) 推荐(0)

内存管理-13-CMA内存-2-ChatGPT
摘要:基于 Linux-6.1.114 一、分配大块(比如8MB)的CMA内存使用什么接口? 分配大块 CMA 内存的接口 1. 核心接口:cma_alloc() #include <linux/cma.h> struct page *cma_alloc(struct cma *cma, unsigned 阅读全文

posted @ 2026-08-13 21:32 Hello-World3 阅读(23) 评论(0) 推荐(0)

内存管理-33-2-GFP分配掩码约束
摘要:基于 Linux-6.1.114 一、全局约束 全局约束通过全局变量 gfp_allowed_mask 实现,它是一个全局 GFP 位掩码过滤器,所有页面分配请求的 gfp_mask 在进入分配器前都会与它做 AND 运算,将系统当前不允许使用的 GFP 标志位强制清除。 1. 赋值位置 (1) 初 阅读全文

posted @ 2026-08-07 17:43 Hello-World3 阅读(8) 评论(0) 推荐(0)

内存管理-38-页标志-2-page_flags.h 展开-6.1
摘要:1. 展开文件 enum pageflags { PG_locked, PG_referenced, PG_uptodate, PG_dirty, PG_lru, PG_active, PG_workingset, PG_waiters, PG_error, PG_slab, PG_owner_pr 阅读全文

posted @ 2026-08-06 21:02 Hello-World3 阅读(11) 评论(0) 推荐(0)

内存管理-75-lru_gen-2-文档翻译
摘要:基于 Linux-6.1.115 一、multigen_lru.rst 注: 翻译自 Documentation/mm/multigen_lru.rst Multi-Gen LRU(多代 LRU) 多代 LRU 是一种替代性的 LRU 实现,它优化了页面回收并改善了内存压力下的性能。页面回收决定了内 阅读全文

posted @ 2026-08-05 21:16 Hello-World3 阅读(14) 评论(0) 推荐(0)

内存管理-75-lru_gen-1-理论
摘要:基于 Linux-6.1.115 一、LRU_GEN 简介 1. 一句话概括 CONFIG_LRU_GEN 启用 Multi-Gen LRU(多代 LRU),它用一套基于"代"(generation)的页面老化和淘汰机制, 完全替代传统的 active/inactive 双链表 LRU,目标是更精确 阅读全文

posted @ 2026-08-05 15:44 Hello-World3 阅读(25) 评论(0) 推荐(0)

内存管理-74-page_table_check-1-理论
摘要:主要文件: //kernel-6.1/mm/Kconfig.debug //kernel-6.1/Documentation/translations/zh_CN/mm/page_table_check.rst //kernel-6.1/mm/page_table_check.c 一、CONFIG_ 阅读全文

posted @ 2026-08-04 22:10 Hello-World3 阅读(9) 评论(0) 推荐(0)

内存管理-5-物理内存数据结构-6-struct folio
摘要:基于 Linux 6.1.114 一、folio 简介 struct folio - 页面描述符(Linux内核页面管理的抽象单位)。folio 是 "front object of LRU and IO" 的缩写,代表一个或多个物理连续的页面。相比传统的 struct page,folio 为复合 阅读全文

posted @ 2026-07-21 20:56 Hello-World3 阅读(27) 评论(0) 推荐(0)

内存管理-73-hugetlb-1-理论-1-内核文档翻译
摘要:注:已翻译的文档有 kernel-6.1/Documentation$ find ./ -name "*tlb*" ./translations/zh_CN/core-api/cachetlb.rst ./translations/zh_CN/arm64/hugetlbpage.rst ./tran 阅读全文

posted @ 2026-07-20 20:41 Hello-World3 阅读(16) 评论(0) 推荐(0)

内存管理-10-内存log-2-分配失败日志
摘要:基于 kernel-6.1 一、简介 1. 概述 在内核中,当物理内存分配失败的时候,会调用 warn_alloc() 进行打印,默认每 10 秒打印一条,也可以使用 __GFP_NOWARN 标志来关闭这个打印,部分轻量级分配通常会带这个标志。 2. warn_alloc 调用路径 vmemmap 阅读全文

posted @ 2026-07-20 14:29 Hello-World3 阅读(19) 评论(0) 推荐(0)

内存管理-72-THP-1-理论
摘要:一、transhuge.rst 翻译 注: 翻译自 /kernel-6.1.114/Documentation/admin-guide/mm/transhuge.rst 透明大页(THP)支持 1. 目标 面向大内存工作集的性能敏感型应用,过去通常运行在 libhugetlbfs 之上,进而使用 h 阅读全文

posted @ 2026-07-17 21:03 Hello-World3 阅读(30) 评论(0) 推荐(0)

内存管理-70-page_pinner-1-理论
摘要:基于 kernel-6.1 一、简介 CONFIG_PAGE_PINNER:回答“这页为什么迁不走,可能被谁长期持有”。目标是排查"页迁移失败/alloc_contig 失败时,谁在持有该页"。配置项定义在 Kconfig.debug,实现在 page_pinner.c。 config PAGE_P 阅读全文

posted @ 2026-07-09 16:32 Hello-World3 阅读(19) 评论(0) 推荐(0)

内存管理-69-page_owner-1-理论
摘要:相关BK:内存管理-29-page_exit功能 一、理论介绍 1. page_owner 的作用 基于kernel-6.1 CONFIG_PAGE_OWNER:回答“这页是谁分配出来的”。定义在 Kconfig.debug 中,实现文件 page_owner.c。 config PAGE_OWNE 阅读全文

posted @ 2026-07-09 16:31 Hello-World3 阅读(24) 评论(0) 推荐(0)

内存管理-68-pageblock相关概念
摘要:1. pageblock 的 migratetype 的作用 pageblock 的 migratetype 表示这一整块内存目前更适合承载什么类型的页,的全局布局信息。描述“这一整块空闲/可分配区域应该朝哪个方向组织”。 如果不可移动页、可移动页、可回收页乱混在每个 pageblock 里,那么将 阅读全文

posted @ 2026-06-20 17:51 Hello-World3 阅读(17) 评论(0) 推荐(0)

内存管理-63-VMA-2-VMA相关操作
摘要:基于msm-5.4 本文介绍VMA的初始化、插入、删除、查找、split、merge、copy等操作。 一、VMA初始化 1. 相关函数 static inline void INIT_VMA(struct vm_area_struct *vma) //linux/mm.h static inlin 阅读全文

posted @ 2026-04-28 15:29 Hello-World3 阅读(42) 评论(0) 推荐(0)

导航