☰
memory wp_page_reuse
2026/11/4 7:13:10 网站建设 项目流程

wp_page_reuse是写时复制(COW)处理路径中用于复用现有物理页面的辅助函数。它的核心职责是:当内核判断某个页面可以被安全复用时,更新 PTE 标志位以赋予写权限,并清理与页面相关的 NUMA 统计信息。

核心职责与调用场景

该函数主要在以下情况被调用:

  1. do_wp_page中的独占页复用:当发生写缺页,且页面是当前进程独占的匿名页(例如 fork 后子进程第一次写,但父进程已经退出,mapcount 为 1),内核无需分配新页面,可以直接复用。

  2. wp_page_shared/finish_mkwrite_fault:处理共享文件映射的写缺页时,在page_mkwrite回调完成后,调用wp_page_reuse将 PTE 设为可写。

  3. wp_pfn_shared:处理VM_PFNMAP/VM_MIXEDMAP共享映射的写缺页。

关键操作

该函数的核心操作包括:

static inline void wp_page_reuse(struct vm_fault *vmf, struct folio *folio) __releases(vmf->ptl) { struct vm_area_struct *vma = vmf->vma; pte_t entry; VM_BUG_ON(!(vmf->flags & FAULT_FLAG_WRITE)); if (folio) { VM_BUG_ON(folio_test_anon(folio) && !PageAnonExclusive(vmf->page)); /* 清除 folio 的 cpupid 信息,旧信息可能来自完全不相关的进程 */ folio_xchg_last_cpupid(folio, (1 << LAST_CPUPID_SHIFT) - 1); } flush_cache_page(vma, vmf->address, pte_pfn(vmf->orig_pte)); entry = pte_mkyoung(vmf->orig_pte); entry = maybe_mkwrite(pte_mkdirty(entry), vma); if (ptep_set_access_flags(vma, vmf->address, vmf->pte, entry, 1)) update_mmu_cache(vma, vmf->address, vmf->pte); pte_unmap_unlock(vmf->pte, vmf->ptl); }

1. 清除 cpupid 信息

folio_xchg_last_cpupid()将last_cpupid设置为全 1(无效值)。注释解释:复用的页面之前可能属于一个完全不相关的进程,保留旧的 cpupid 会导致 NUMA balancing 做出错误决策。

2. 赋予写权限并刷新 TLB

通过maybe_mkwrite和pte_mkdirty将 PTE 标记为可写和脏,然后调用ptep_set_access_flags原子更新,并刷新 TLB。

3. 释放 PTE 锁

函数标记了__releases(vmf->ptl),意味着调用者传入的 PTE 锁会在函数内部释放。

历史演进与关键修复

2022 年空指针修复:wp_page_reuse原本设计允许folio/page为 NULL(例如wp_pfn_shared场景)。但新增的VM_BUG_ON无条件调用PageAnonExclusive(vmf->page),当vmf->page为 NULL 时触发崩溃。修复方案是将VM_BUG_ON移入if (folio)块内。

2023 年 folio 化:Kefeng Wang 将参数从隐式的vmf->page改为显式的struct folio *folio,并将page_cpupid_xchg_last改为folio_xchg_last_cpupid,为后续 folio 转换铺路。

2025 年批量优化:补丁将函数扩展为支持操作页面范围(anon_folio_range),以批量处理大 folio 的缓存维护和事件计数。当前所有调用点仍传NULL,无功能变化。

返回值处理

wp_page_reuse本身返回void,但它的调用者通常返回VM_FAULT_WRITE表示“写缺页已处理完成”。这个返回值在 GUP 路径中具有特殊语义:当 GUP 以FOLL_WRITE触发缺页,内核完成 COW 后返回VM_FAULT_WRITE,GUP 会据此清除FOLL_WRITE标志并重试。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询