2 kernel-migration-flow: 内核迁移主流程

发布时间:2026/9/26 22:12:34

2 kernel-migration-flow: 内核迁移主流程 本篇讲清楚一次UVM_MIGRATE从 ioctl 进入内核后的完整路径重点标注NUMA 目标节点dst_node_id/dest_nid在各层如何传递。1. 入口uvm_api_migrate()文件uvm_migrate.cuvm_api_migrate约 L860。主要职责解析UVM_MIGRATE_PARAMS把destinationUuid解析成目标处理器dest_gpu或 CPU。校验cpuNumaNode见文档 01 的合法性规则uvm_migrate.c。区分内存类型分派到不同实现UVM_API_RANGE_TYPE_NUMApageable透明访问→uvm_migrate_pageable()其它managed / HMM→uvm_migrate()。处理集成 GPU / CDMM / 关闭 pageable 迁移等特殊情形把目标改写为 CPU并把cpu_numa_node设为 GPU 的closest_cpu_numa_node见 uvm_migrate.c详见文档 04。// 集成 GPU迁到该 GPU 等价于迁到它最近的 CPU NUMA 节点if(dest_gpudest_gpu-parent-is_integrated_gpu){dest_idUVM_ID_CPU;cpu_numa_nodedest_gpu-parent-closest_cpu_numa_node;}2. Managed 内存uvm_migrate()文件uvm_migrate.c。2.1 把目标 NUMA 节点注入 service context关键一行——这是把用户请求的节点交给下游 make_resident 的地方service_context-block_context-make_resident.dest_niddest_nid;// uvm_migrate.c:626dest_nid即用户cpuNumaNode或被特殊硬件逻辑改写后的值。2.2 两遍two-pass策略见 uvm_migrate.c 大段注释。除非只覆盖单个 VA block 或带UVM_MIGRATE_FLAG_SKIP_CPU_MAP否则做两遍Pass 1搬运所有 VA block 的数据不建立映射Pass 2逐 block 复查可能被别人移动过并补建映射。目的避免「建立 CPU 映射同步」阻塞后续 block 的搬运并减少并发迁移间的假依赖。HMM 始终单遍。调用链uvm_migrate() └─ uvm_migrate_ranges() // 遍历 [base,len) 覆盖的 managed range └─ uvm_va_range_migrate() // 单个 range 内按 block 切分 └─ uvm_va_range_migrate_multi_block() └─ uvm_va_block_migrate_locked() └─ uvm_va_block_make_resident*() // 真正 make resident2.3 HMM 分支若无 managed rangeuvm_migrate_ranges()转uvm_hmm_migrate_ranges()uvm_migrate.c同样最终走 make_resident CPU chunk 分配NUMA 处理与 managed 一致。3. make_residentCPU 目标的核心文件uvm_va_block.c。当目标是 CPU 时uvm_va_block_make_resident*需要为目标页分配 CPU 物理内存并拷贝。分配这一步就是 NUMA 感知的落点由block_populate_pages_cpu()完成uvm_va_block.c详见 03-numa-node-selection。目标节点通过uvm_va_block_context_get_node()归一化uvm_va_block.cstaticintuvm_va_block_context_get_node(...){if(va_block_context-make_resident.dest_nid!NUMA_NO_NODE)returnva_block_context-make_resident.dest_nid;// 1) 迁移请求指定if(policy-preferred_nid!NUMA_NO_NODE)returnpolicy-preferred_nid;// 2) 首选位置策略returnnuma_mem_id();// 3) 就近兜底}make_resident上下文中与 NUMA 相关的字段uvm_va_block_types.h字段作用dest_id最终驻留处理器CPU / GPUdest_nid目标为 CPU 时的最终 NUMA 节点node_pages_mask计算「每个 CPU 节点对应哪些页」的临时掩码pages_migrated/pages_changed_residency结果掩码4. Pageable 内存uvm_migrate_pageable()文件uvm_migrate_pageable.c。与 managed 不同pageable 借助内核migrate_vma_setup/pages/finalize框架目标页由 UVM 自己alloc_pages_node()分配因此 NUMA 落点直接由dst_node_id决定。4.1 目标节点保存在uvm_migrate_args-dst_node_id结构见 uvm_migrate_pageable.h// dst_node_id may be clobbered by uvm_migrate_pageable().intdst_node_id;4.2 决定每页是否需要搬NUMA 判断migrate_vma_compute_masks()uvm_migrate_pageable.c里对每个源页判断src_nidpage_to_nid(src_page);// 已在目标节点 → 不搬if(src_niduvm_migrate_args-dst_node_id){...dst_resident...;continue;}// 目标是 CPU且该页已在某个「有 CPU 的」节点 → 不搬if(UVM_ID_IS_CPU(dst_id)node_state(src_nid,N_CPU)){...;continue;}// 目标是 CPU且源节点不是任何 GPU 的内存节点 → 不搬if(UVM_ID_IS_CPU(dst_id)!src_gpu){...;continue;}含义回迁到 CPU 时如果页面已经在某个 CPU NUMA 节点上默认不会为了「换个 CPU 节点」而搬除非它当前在 GPU 内存节点上。这是一个重要的性能取舍。4.3 分配目标页并校验落点uvm_migrate_vma_alloc_page()uvm_migrate_pageable.cdst_pagealloc_pages_node(uvm_migrate_args-dst_node_id,g_migrate_vma_gfp_flags,0);// 校验内核是否真的把页分到了目标节点规避历史内核 __GFP_THISNODE 未生效的 bugif(dst_pagepage_to_nid(dst_page)!uvm_migrate_args-dst_node_id){__free_page(dst_page);dst_pageNULL;// 视为 OOM触发用户态换节点重试协议}分配失败会最终以NV_ERR_MORE_PROCESSING_REQUIRED返回用户态对应文档 01 的重试协议。4.4dst_node_id NUMA_NO_NODE的处理pageable 路径要求确定节点在uvm_migrate_pageable()内部若dst_node_id NUMA_NO_NODEuvm_migrate_pageable.c会做相应处理/校验这也是为什么用户态对 pageable 传-1被判非法。5. 流程小结回迁到 CPU 的 NUMA 视角集成GPU/CDMM/禁用pageablemanaged/HMMpageable失败UVM_MIGRATE ioctluvm_api_migrate 校验 cpuNumaNodedstCPU, nodeclosest_cpu_numa_node内存类型uvm_migrate: make_resident.dest_nid cpuNumaNodeblock_populate_pages_cpuuvm_cpu_chunk_alloc __GFP_THISNODE 回退uvm_migrate_pageable: dst_node_idalloc_pages_node 校验落点NV_ERR_MORE_PROCESSING_REQUIRED → 用户态换节点下一篇 03-numa-node-selection 深入 managed/HMM 路径的 CPU chunk 分配与 per-node 驻留跟踪。
延伸阅读

更多相关文章

2026/9/26 19:32:57

JWT技术解析:从原理到微服务安全实践

1. JWT技术全景解析:从RFC 7519标准到实战应用 在分布式系统架构成为主流的今天,服务间安全通信的需求催生了多种认证方案。2015年5月发布的RFC 7519标准定义的JSON Web Token(JWT),以其轻量级、自包含的特性迅速成为现代Web安全的重要支柱。…

2026/9/27 10:06:16

OTC广告语合规红线与转化诊断指南(2026版)

OTC广告语的合规要求,比普通商品更严格。药品广告不得含有表示功效、安全性的断言或者保证,不得说明治愈率或者有效率,不得与其他药品进行功效或安全性对比。 合规是总前提,转化是目标。 本文梳理三类合规红线、一个类别边界、三类…

2026/9/27 10:06:16

wordpress的登陆地址与深圳建设网站和公众号对比

别找错门:WordPress登陆地址全解与建站避坑指南 想自己做个网站,却连后台门在哪都找不到?这是很多非技术背景老板最头疼的事。别慌,这其实是个典型的“信息不对称”问题。作为在这个圈子里摸爬滚打十年的老兵,我见过太多人因为搞不清…

2026/9/27 10:06:16

【电机滤波6】平方根扩展卡尔曼滤波(SR-EKF)原理与MATLAB例程:PMSM状态估计与QR协方差因子递推。订阅专栏后,可直接查看源代码,粘贴到MATLAB空脚本中即可直接运行、得到结果

如需帮助,或有滤波相关的MATLAB代码定制需求,可从个人主页左侧联系我 订阅专栏后,可直接查看源代码,粘贴到MATLAB空脚本中即可直接运行、得到结果 文章目录 运行结果 MATLAB源代码 程序详解 算法原理 核心公式 实现流程 参数说明 输出说明 运行结果 转速与位置估计图:对比…

2026/9/27 10:06:16

实战案例揭秘:如何申请一个网站做视频才不白干

实战案例揭秘:如何申请一个网站做视频才不白干 上周刚帮一个做短视频培训的客户复盘,他花了三万块建了个站,放了上百个教程视频,结果百度收录了三天就没了,后台连个访客IP都没有。他问我是不是服务器不行,我直接打开浏览器控制台一看,页面加载慢得像…

2026/9/27 10:06:16

FFsubsync 使用指南:以参考信号为锚,自动对齐任意错位字幕

音视频音频处理视频处理CLI 【免费下载链接】ffsubsync Automagically synchronize subtitles with video. 项目地址: https://gitcode.com/gh_mirrors/ff/ffsubsync 点击查看 免费下载 本文基于 FFsubsync 仓库的 docs/usage.rst 官方使用文档撰写,完整…

2026/9/27 0:00:45

东莞市品牌网站建设报价常见报错与解决

东莞品牌网站建设报价单背后:一份保姆级建站教程避坑实录 网站做好了没人访问,这大概是很多老板最头疼的事。花了大几万做的品牌站,上线后流量惨淡,比路边摊还冷清。别急着骂外包公司,很多“东莞品牌网站建设报价”里藏着不少猫腻,比如用模板站冒充定制…

2026/9/27 0:00:45

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/27 0:00:45

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/27 0:00:45

东莞市品牌网站建设报价常见报错与解决

东莞品牌网站建设报价单背后:一份保姆级建站教程避坑实录 网站做好了没人访问,这大概是很多老板最头疼的事。花了大几万做的品牌站,上线后流量惨淡,比路边摊还冷清。别急着骂外包公司,很多“东莞品牌网站建设报价”里藏着不少猫腻,比如用模板站冒充定制…

2026/9/27 0:00:45

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/27 0:00:45

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/25 20:55:38

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/26 19:58:38

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/25 18:34:56

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑