v3
2026-09-11
新增稀疏 vmemmap 优化配置 · v3
为 sparse vmemmap 引入优化,让 device DAX 使用共享 tail vmemmap 页,并移植到 powerpc。
原始补丁链接
子 Patch(11)
1/11
mm/sparse-vmemmap: introduce CONFIG_SPARSEMEM_VMEMMAP_OPTIMIZATION
引入 SPARSEMEM_VMEMMAP_OPTIMIZATION 统一守卫 section 级 vmemmap 优化状态与 helper,让 HugeTLB 和 DEV_DAX 共用,不再绑死 HUGETLB 配置。
2/11
mm/sparse-vmemmap: factor out shared vmemmap tail page allocation
抽出 vmemmap_shared_tail_page(),用 vmemmap_alloc_block() 分配并以 cmpxchg 安装 per-zone shared tail,合并 HugeTLB 与 sparse-vmemmap 的重复分配。
3/11
mm/sparse-vmemmap: open-code init_compound_tail()
把 init_compound_tail() 内联进 vmemmap_shared_tail_page(),避免 mm/internal.h 暴露可传 NULL compound head 的特殊接口,无功能变化。
4/11
mm/sparse-vmemmap: prepare DAX vmemmap population for compound page orders
为 DAX 引入专用 population 标志,使 head/first-tail 仍走普通 vmemmap 分配并保留复用 tail 的引用,避免被通用 section 优化误判。
5/11
mm/sparse-vmemmap: set compound page order for device DAX
填充 DAX section 前将 compound page order 写入 section metadata,空时清除;禁止同一 section 混用优化与普通布局,因 struct page 初始化以 section 为粒度。
6/11
mm/sparse-vmemmap: switch device DAX to shared tail vmemmap pages
DEV-DAX 改用 vmemmap_shared_tail_page(),由 pgmap->vmemmap_shift 启用;tail 页不变故共享安全,并给 ZONE_DEVICE 条目置 PG_reserved、跳过 poison。
7/11
mm/sparse-vmemmap: move vmemmap optimization helpers to a public header
把 mm/sparse.h 中的 vmemmap 优化声明和内联 helper 移到公共 include/linux/vmemmap-optimization.h,供 powerpc 等架构复用。
8/11
powerpc/mm: switch device DAX to shared tail vmemmap pages
powerpc radix 的 compound vmemmap 填充不再遍历页表找可复用 tail,而调用 vmemmap_shared_tail_page() 直接共享,删除 ppc 专用查找/回退路径。
9/11
mm/sparse-vmemmap: drop the extra tail page from device DAX reservation
去掉 DAX 在 head 后额外预留的 first-tail vmemmap page,改用 per-zone shared tail 覆盖全部 tail,与 HugeTLB 预留模型一致并简化填充路径。
10/11
mm/sparse-vmemmap: drop unused section_nr_vmemmap_pages() arguments
section_nr_vmemmap_pages() 已不用 altmap/pgmap,删除这两个形参及调用处实参,纯清理无功能变化。
11/11
Documentation/mm: update DAX vmemmap deduplication docs
更新 DAX vmemmap 去重文档,改为描述与 HugeTLB 相同的 per-zone shared tail 布局,并整合 powerpc radix/64K 说明与 PMD/PUD 图。