v2 2026-08-13

大页迁移时批量rmap遍历 · v2

重构迁移/rmap 代码,拆出 hugetlb 专用路径,并批量处理大 folio 的迁移/rmap 遍历。

原始补丁链接

子 Patch(7)

1/7
mm: factor out generic PTE batch detection from swap_pte_batch()
从swap_pte_batch()提取通用PTE batch检测逻辑到softleaf_pte_batch(),供后续迁移恢复批处理复用;swap_pte_batch()仅保留swap特定部分,无功能变化。
2/7
mm/migrate: factor out migration PTE construction
将remove_migration_pte()内联构造工作PTE的代码提取为migration_entry_to_pte(),供后续hugetlb恢复路径分离时共享,无功能变化。
3/7
mm/migrate: split remove_migration_pte_hugetlb() out of remove_migration_pte()
把remove_migration_pte()中交织的hugetlb处理拆成独立回调remove_migration_pte_hugetlb(),由remove_migration_ptes()分派,常规路径专注普通folio,PMD检查简化为一次性警告。
4/7
mm/migrate: batch the restore-side migration rmap walk
新增migration_pte_batch()检测连续且PTE位相同的迁移项,批量恢复PTE映射大folio,避免每个base page重复page_vma_mapped_walk等,改用folio_is_device_private()。
5/7
mm/rmap: factor out migration PTE construction
将try_to_migrate_one()中构造迁移PTE的代码提取为make_migration_pte(),供后续hugetlb迁移路径独立时共享,无功能变化。
6/7
mm/rmap: split try_to_migrate_hugetlb_one() out of try_to_migrate_one()
拆分try_to_migrate_hugetlb_one()回调,避免hugetlb特殊处理散落在常规迁移路径;调整update_hiwater_rss、huge_pte_dirty、PVMW_SYNC、循环及BUG_ON等细节。
7/7
mm/rmap: batch the unmap of large folios in try_to_migrate_one()
仿照try_to_unmap_one()新增folio_migrate_pte_batch(),在try_to_migrate_one()中批量转换映射大folio连续子页的PTE,减少重复ptep清除/刷新、rmap和folio_put开销。