发布时间:2026/8/9 18:43:38
4 special-hardware-ats: 特殊硬件与 ATS 缺页的 NUMA 行为 本篇覆盖回迁到 CPU 时与硬件拓扑强相关的 NUMA 逻辑closest_cpu_numa_node的来源、EGM / 集成 GPU / C2CGrace-Hopper等一致性平台以及 ATS 缺页驱动的 CPU 驻留节点选择。1.closest_cpu_numa_node每张 GPU 最近的 CPU 节点每个uvm_parent_gpu_t记录一个「物理上最近的 CPU NUMA 节点」是很多 NUMA 决策的基准。1.1 从 PCI 拓扑获取uvm_gpu.cparent_gpu-closest_cpu_numa_nodedev_to_node(parent_gpu-pci_dev-dev);即用内核提供的 PCI 设备所属 NUMA 节点。1.2 集成 GPU 的兜底对集成 GPU如 Tegra / Grace-Hopper 上的 GPU若拓扑没给出节点用当前内存节点兜底uvm_gpu.cif(parent_gpu-is_integrated_gpuparent_gpu-closest_cpu_numa_node-1){parent_gpu-closest_cpu_numa_nodenuma_mem_id();}1.3 相关uvm_gpu_numa_node()在一致性平台上GPU 自己的显存也以一个 NUMA 节点的形式暴露给系统systemMemoryWindowStartuvm_gpu_numa_node(gpu)返回该节点。uvm_va_space_find_gpu_with_memory_node_id()可反查某 nid 是否属于某 GPU用于区分「CPU 节点」和「GPU 内存节点」。2. 集成 GPU迁到 GPU 迁到最近的 CPU 节点在uvm_api_migrate()中uvm_migrate.cif(dest_gpudest_gpu-parent-is_integrated_gpu){dest_idUVM_ID_CPU;cpu_numa_nodedest_gpu-parent-closest_cpu_numa_node;}对集成 GPU 而言「GPU 显存」本质上就是某个 CPU NUMA 节点的内存所以迁移被重写为「迁到该 GPU 最近的 CPU 节点」。同类改写还发生在禁用 pageable 迁移时把 GPU 目标降级为 CPU closest_cpu_numa_nodeuvm_migrate.cCDMM 模式下的类似处理uvm_migrate.c。3. EGMExtended GPU MemoryEGM 允许 GPU 通过其显存地址窗口访问「宿主 CPU 内存」这块内存对应 GPU 的closest_cpu_numa_node。UvmGpuInfo中有egmEnabled/egmPeerId/egmBaseAddr见nv_uvm_types.h。VA space 侧在 EGM 打开且closest_cpu_numa_node ! NUMA_NO_NODE时用该节点建立 EGM NUMA 节点信息uvm_va_space.c 与 L771-L778node_infouvm_va_space_get_egm_numa_node_info(va_space,parent-closest_cpu_numa_node);node_info-node_startnode_start_pfn(parent-closest_cpu_numa_node)PAGE_SHIFT;node_info-node_endnode_end_pfn(parent-closest_cpu_numa_node)PAGE_SHIFT;因此在 EGM 场景回迁到「GPU 本地的宿主内存」就是回迁到closest_cpu_numa_node对应的 DRAM。4. CPU 亲和性查询uvm_va_space_*的 NUMA affinityuvm_va_space.c提供把 GPU 映射到 CPU NUMA 节点的接口用于accessed_by/ 亲和放置uvm_va_space.c 与 L938-L983当gpu-parent-closest_cpu_numa_node ! -1时把该 GPU 的 CPU 亲和节点设为closest_cpu_numa_node*numa_node_id(NvS32)gpu-parent-closest_cpu_numa_node;// 一致性 GPU 的 CPU 亲和中断底半部ISR bottom half线程也绑定到closest_cpu_numa_nodeuvm_gpu_isr.c 与 L414减少跨节点开销。5. ATS 缺页按 VMA 内存策略选 CPU 驻留节点在支持 ATSAddress Translation Services的平台上GPU 直接对系统页缺页UVM 需要决定把页驻留到哪个 NUMA 节点。文件uvm_ats_faults.c。5.1 尊重进程的mbind/set_mempolicyats_compute_residency_node()类逻辑uvm_ats_faults.c读取该地址的 VMA mempolicyif(modeMPOL_BIND||modeMPOL_PREFERRED_MANY||modeMPOL_PREFERRED){inthome_nodeNUMA_NO_NODE;if(mode!MPOL_PREFERREDvma_policy-home_node!NUMA_NO_NODE)home_nodevma_policy-home_node;if(home_node!NUMA_NO_NODE){residencyhome_node;// ① 优先 home_node}elseif(!node_isset(residency,vma_policy-nodes)){intclosestgpu-parent-closest_cpu_numa_node;if(closest!NUMA_NO_NODEnode_isset(closest,vma_policy-nodes))residencyclosest;// ② 其次GPU 最近节点若在允许集合内elseresidencyfirst_node(vma_policy-nodes);// ③ 再次允许集合的第一个}}优先级mempolicy home_node → 缺页 GPU 自身节点若被允许→ GPU 最近 CPU 节点若被允许→ 允许集合首个节点。5.2 目标节点传入迁移选出的节点写入ats_context-residency_node再作为uvm_migrate_args.dst_node_id驱动迁移uvm_ats_faults.cuvm_migrate_args_tuvm_migrate_args{....dst_node_idats_context-residency_node,...};结论ATS 路径下「回迁/驻留到 CPU」严格尊重用户通过numactl/mbind设置的 NUMA 策略。6. 小结不同硬件下「回迁到 CPU」的 NUMA 基准场景目标 CPU 节点来源普通独立 GPU managed显式cpuNumaNode→preferred_nid→ 就近pageable透明访问dst_node_id用户给定alloc_pages_node落点校验集成 GPU / 禁用 pageable / CDMMGPU 的closest_cpu_numa_nodeEGMclosest_cpu_numa_node对应的宿主 DRAMATS 缺页VMA mempolicyhome_node / 允许集合必要时回退closest_cpu_numa_node

相关新闻

2026/8/9 18:43:38

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

本篇讲清楚一次 UVM_MIGRATE 从 ioctl 进入内核后的完整路径,重点标注 NUMA 目标节点(dst_node_id / dest_nid)在各层如何传递。 1. 入口:uvm_api_migrate() 文件:uvm_migrate.c(uvm_api_migrate&#xff…

2026/8/9 19:53:43

AI少儿英语APP选购指南:费用、效果与技术解析

1. 项目概述:AI少儿英语APP的市场定位与价值当前教育科技领域最显著的趋势之一,就是AI技术与语言学习的深度融合。作为这个赛道的典型代表,AI少儿英语APP通过智能算法重构了传统语言学习模式,其核心价值在于三点:首先&…

2026/8/9 19:53:43

SwarmForge版本管理:如何高效更新与维护你的AI代理系统

SwarmForge版本管理:如何高效更新与维护你的AI代理系统 【免费下载链接】swarm-forge A simple tool for coordinating several AI agents. 项目地址: https://gitcode.com/GitHub_Trending/sw/swarm-forge SwarmForge作为一款简单而强大的AI代理协调工具&am…

2026/8/9 19:53:42

基于Ollama与OpenClaw的本地AI自动化工作流构建实战

1. 项目概述:当“养虾”遇上本地AI,一场数据自主的革命最近在折腾一个挺有意思的事儿,我把一个叫“养虾”的自动化流程,从依赖云端API的“寄人篱下”状态,彻底搬回了自己的电脑里。这个项目的核心,就是标题…

2026/8/9 19:48:42

Python上下文管理器:优雅实现资源管理与异常处理

1. 初识contextmanager:Python资源管理的优雅之道第一次接触Python的contextmanager是在处理文件操作时。那时我还在用传统的try-finally块来确保文件关闭,直到发现同事的代码里出现了这个神奇的contextmanager装饰器。它就像一位尽职的管家,…

2026/8/9 0:01:56

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/9 0:01:56

当 LLM 遇见大文档:主流开源项目如何处理上下文超限

从 Agentic Loop 到 Repo Map,七种策略与六类陷阱引言:128K vs 10MB 的硬冲突 2026 年的 LLM 上下文窗口已达到 128K ~ 1M token(≈ 0.5MB ~ 4MB 文本),但 LLM 想要处理的真实数据规模远远超过这个量级:真实…

2026/8/9 0:01:56

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/9 0:01:56

当 LLM 遇见大文档:主流开源项目如何处理上下文超限

从 Agentic Loop 到 Repo Map,七种策略与六类陷阱引言:128K vs 10MB 的硬冲突 2026 年的 LLM 上下文窗口已达到 128K ~ 1M token(≈ 0.5MB ~ 4MB 文本),但 LLM 想要处理的真实数据规模远远超过这个量级:真实…

2026/8/7 9:44:18

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/7 19:03:32

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/9 15:24:19

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…