v1 2026-10-01

hugetlb folio 的 swap 支持 · v1

为 hugetlb folio 增加用户驱动 swap:MADV_PAGEOUT 换出、缺页换入、swapoff 读回,池满时 SIGBUS。

原始补丁链接

子 Patch(6)

1/6
mm/swap: introduce folio_swap_entry() and convert all folio->swap readers
[mm/swap: introduce folio_swap_entry() and convert all folio->swap readers] Hugetlb folios keep their per-folio flags in folio->private, which shares a union with folio->swap. While such a folio sits
2/6
mm/hugetlb: swap-in support for anonymous hugetlb folios
[patchwork series v1] submitter=Zongkun Lei patches (2): [RFC,2/6] mm/hugetlb: swap-in support for anonymous hugetlb folios [RFC,5/6] mm/hugetlb: swap support for file-backed hugetlb folios
3/6
mm/hugetlb: swap out anonymous hugetlb folios via MADV_PAGEOUT
为私有匿名 hugetlb folio 增加 MADV_PAGEOUT 换出路径,实现 hugetlb_reclaim_pages()/hugetlb_reclaim_folio_list(),镜像普通 reclaim 但复用 rmap、slot、写出等叶子操作。
4/6
mm/memory-failure: handle swapcached hugetlb folios
处理位于 swap cache 的 hugetlb folio:try_to_unmap 按 TTU_HWPOISON 标志选择换出映射或毒化处理;me_huge_page 增加 swapcache 分支,避免 folio 被 truncate 驱逐导致池泄漏与毒标记丢失。
5/6
mm/hugetlb: swap support for file-backed hugetlb folios
将 hugetlb 换出扩展到 MAP_SHARED 文件页,仿 shmem 只清 PTE 并把 swp_to_radix_entry 锚点留在 page cache;hugetlbfs_writeout() 分配槽位并写出,hugetlb_no_page() 识别锚点回填。
6/6
selftests/mm: add hugetlb_swap test, document hugetlb swap
为 hugetlb 交换特性添加端到端自测,覆盖匿名页换出、fork 共享、munmap 释放、swapoff、池耗尽、hwpoison、文件映射及拒绝路径等 14 个场景,验证 PTE 转 swap entry、巨页回池、VmSwap 统计等机制正确。