本系列文档旨在帮助工作在异构计算领域的朋友们理解mmu notifier的原理和应用场景,进而理解HMM的原理与应用。
2026年01月月度专栏: 正文每周一和周四各放送两篇,即每周四篇。
- 2026/01/05: 第1、2章已上线。
- 2026/01/08: 第3、4章已上线。
- 2026/01/12: 第5、6章已上线。
- 2026/01/15: 第7、8章已上线。
- 2026/01/19: 第9、10章已上线。
- 2026/01/21: 第11、12章已上线。
专栏已审核校对完毕,如有发现错误,请反馈。后续linux内核有upstream的话,会继续更新进展,请持续关注。
引文:当SVM转角遇上Copy-on-Write (COW)
第一部分:基础概念与原理
第1章 背景与问题域
- 1.1 虚拟内存管理基础回顾
- 1.2 设备与CPU地址空间协作的挑战
- 1.3 为什么需要MMU Notifier机制
- 1.4 典型应用场景概览(虚拟化、GPU、RDMA)
第2章 MMU Notifier 全局通知
- 2.1 设计目标与架构
- 2.2 核心数据结构详解
- 2.2.1
mmu_notifier_ops回调接口 - 2.2.2
mmu_notifier订阅结构 - 2.2.3
mmu_notifier_range失效范围事件描述
- 2.2.1
- 2.3 事件类型与触发时机
- 2.3.1 事件类型枚举
- 2.3.2 各事件详解与触发场景
- 2.3.3 事件触发时机总结
第3章 MMU Interval Notifier 区间级通知
- 3.1 为什么需要Interval Notifier(区间级通知)
- 3.2 核心数据结构
- 3.2.1
mmu_interval_notifier - 3.2.2 invalidate回调触发时机和调用路径
- 3.2.1
- 3.3 序号同步机制详解
- 3.3.1
invalidate_seq的作用 - 3.3.2 read-begin/read-retry模式
- 3.3.3 如何保证一致性
- 3.3.1
- 3.4 高并发场景下的性能优化
第二部分:内核实现分析
第4章 内核实现机制
- 4.1 数据结构组织
- 4.1.1 per-mm notifier链表
- 4.1.2 notifier的注册与注销实现
- 4.2 常用事件触发路径分析
- 4.2.1 unmap路径
- 4.2.2 migration路径
- 4.2.3 protection change路径
- 4.3 核心API实现剖析
- 4.3.1 失效通知流程
- 4.3.2 序号更新机制
第5章 使用模式与最佳实践
- 5.1 基本使用流程
- 5.2 回调函数实现要点
- 5.3 错误处理与重试策略
- 5.4 性能优化技巧
- 5.4.1 区间粒度选择
- 5.4.2 批量操作优化
- 5.4.3 避免死锁
- 5.5 常见陷阱与调试技巧
第三部分:应用案例深度分析
第6章 KVM虚拟化中的应用
- 6.1 KVM内存管理架构
- 6.2 shadow page table同步
- 6.3 EPT/NPT失效处理
- 6.4 代码实现分析(kvm_mmu_notifier_ops)
第7章 AMD GPU驱动中的应用
- 7.1 AMDGPU内存管理概述
- 7.2 HMM(异构内存管理)集成
- 7.3
amdgpu_hmm.c实现详解- 7.3.1 SVM区间管理
- 7.3.2 GPU页表同步机制
- 7.3.3 Page fault处理流程
- 7.4 性能分析与优化案例
第8章 NVIDIA GPU驱动应用
- 8.1 NVIDIA UVM(Unified Virtual Memory)
- 8.2 mmu_interval_notifier的使用
- 8.3 CPU-GPU内存迁移
- 8.4 与AMD方案的对比
第9章 RDMA/InfiniBand应用
- 9.1 RDMA内存注册机制
- 9.2 用户空间DMA映射管理
- 9.3 ODP(On-Demand Paging)实现
- 9.4 mmu_notifier在RDMA中的作用
第四部分:高级主题
第10章 与HMM的协作
- 10.1 HMM架构回顾
- 10.2 HMM如何使用mmu_interval_notifier
- 10.3 设备私有内存迁移
- 10.4 完整的CPU-GPU共享内存方案
第11章 性能分析与调优
- 11.1 典型性能问题
- 11.2 性能诊断方法
- 11.3 优化策略
- 11.4 实战案例
- 11.5 性能调优清单
第12章 内核演进与未来方向
- 12.1 历史演进(从mmu_notifier到mmu_interval_notifier)
- 12.2 当前内核版本的改进
- 12.3 未来发展方向
- 12.4 社区讨论与提案
附录
附录A:API快速参考
- A.1 mmu_notifier API列表
- A.2 mmu_interval_notifier API列表
- A.3 常用辅助函数
附录B:数据结构速查
- B.1 核心结构体定义
- B.2 枚举类型说明
- B.3 结构体关系图
附录C:示例代码集
- C.1 基本使用示例
- C.2 完整驱动示例
- C.3 测试代码
附录D:调试技巧
- D.1 内核配置选项
- D.2 ftrace/tracepoint使用
- D.3 常见问题排查
技术交流和投稿,欢迎加入社区: GPUers。