v2
2026-09-01
优化匿名swapbacked大folio解除映射 · v2
为匿名 swap 大 folio 增加批量 dup/put swap、批量 rmap 共享与 unmap 及 softleaf PTE 辅助函数。
原始补丁链接
子 Patch(8)
1/8
mm/swapfile: add batched version of folio_dup_swap
新增 folio_dup_swap_pages(),将 folio_dup_swap 泛化到任意连续页数;移除 subpage==NULL 的调用歧义,整 folio 仍走原函数。
2/8
mm/swapfile: add batched version of folio_put_swap
新增 folio_put_swap_pages(),批量释放 folio 内连续页的 swap 槽位;泛化 folio_put_swap 到任意 nr_pages,去掉 subpage 间接参数,按整/部分 folio 选择接口。
3/8
mm: move anon-exclusive batch helper to mm.h
将 page_anon_exclusive_batch() 从 mprotect.c 移到 mm.h 并置于 CONFIG_MMU 下供 rmap 复用;类型改 unsigned long,变量名缩短。
4/8
mm/rmap: Add batched version of folio_try_share_anon_rmap_pte
新增批量版 folio_try_share_anon_rmap_pte:按 nr_pages 清除 PageAnonExclusive,PMD 路径仍只清头页;nr_pages 改 unsigned long 并加 WARN 校验。
5/8
mm/internal: rename swap offset helpers to softleaf offset
将按 delta 偏移 swap entry 的辅助函数改名/泛化为 softleaf offset 版本,使其也能用于迁移等非 swap softleaf;保留 soft-dirty/exclusive/uffd 位语义。
6/8
mm/internal: add set_softleaf_ptes
新增 set_softleaf_ptes(),仿照 set_ptes() 批量设置连续 non-present softleaf pte,覆盖 swap softleaf 与 softleaf_has_pfn 分组,供后续批量 unmap 使用。
7/8
mm/memory: use set_softleaf_ptes for uffd-wp markers
mm/memory.c 改用 set_softleaf_ptes() 批量写入多个 uffd-wp marker pte,替换原来手写循环,减少重复。
8/8
mm/rmap: batch unmap anonymous swap-backed large folios
在 rmap 批量解除匿名 swap-backed 大 folio 映射:用 folio_unmap_pte_batch() 一次清/写 PTE,按 anon-exclusive 分组,减少原子操作/屏障及 contpte 开销。