首页
/
行业洞察
/
正文
INDUSTRY INSIGHT · 深度
memory wp_page_reuse
📅 2026/11/4 7:13:29
✍️ 爱科研究院
👁 阅读 3,247
wp_page_reuse是写时复制COW处理路径中用于复用现有物理页面的辅助函数。它的核心职责是当内核判断某个页面可以被安全复用时更新 PTE 标志位以赋予写权限并清理与页面相关的 NUMA 统计信息。核心职责与调用场景该函数主要在以下情况被调用do_wp_page中的独占页复用当发生写缺页且页面是当前进程独占的匿名页例如 fork 后子进程第一次写但父进程已经退出mapcount 为 1内核无需分配新页面可以直接复用。wp_page_shared/finish_mkwrite_fault处理共享文件映射的写缺页时在page_mkwrite回调完成后调用wp_page_reuse将 PTE 设为可写。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_WRITEGUP 会据此清除FOLL_WRITE标志并重试。
📌 标签:
工业官网
设计趋势
AI 建站
SEO
获取完整报告 →
RELATED ARTICLES
推荐阅读
2026/11/4 7:13:29
基于SpringBoot+AI的在线考试管理系统(前后端源码)
2026/11/4 7:13:29
【毕设技巧】文献综述怎么写? 这3种综述写法和4个常犯的错误,一篇文章给你列清楚。
2026/11/4 7:13:29
4、Eureka服务端安装
2026/11/4 8:08:33
GDI实时抗锯齿源码:双缓冲、超采样与像素混合消除斜线毛刺
2026/11/4 8:08:33
自建内网穿透方案:基于frp的远程调试与系统维护实践
2026/11/4 8:08:33
Unity远距离贴图闪烁根因与Mipmap全链路调优指南
2026/11/4 8:08:33
AI编程工具与传统技术社区的优劣势对比与融合
2026/11/4 8:08:33
SQL实战案例教学:从业务场景掌握数据库查询
2026/11/4 8:03:32
微信小程序自动化测试:Minium框架实战指南
2026/11/4 0:02:45
AI辅助技术栈评估:提升研发决策效率60%
2026/11/4 0:02:45
从生成Token到直接决策:Jev如何重塑AI Agent工程实践
2026/11/4 0:02:45
32G统一内存跑大模型:内存账、TPS实测与端云分流
2026/11/4 4:08:30
面向复杂光照与角度的宠物面部识别鲁棒性增强策略
2026/11/4 4:08:26
DRV8818PWPR与R7FA8M1AHECBD工业步进驱动实战指南
2026/11/4 4:08:23
STM32与DRV8818双极步进电机驱动方案:从选型到调试全流程解析
2026/11/4 4:08:30
面向复杂光照与角度的宠物面部识别鲁棒性增强策略
2026/11/4 4:08:26
DRV8818PWPR与R7FA8M1AHECBD工业步进驱动实战指南
2026/11/4 4:08:23
STM32与DRV8818双极步进电机驱动方案:从选型到调试全流程解析