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

相关新闻

ChatGPT、Codex实战:长任务为什么容易跑偏?从任务拆分到Checkpoint的6层控制

ChatGPT、Codex实战:长任务为什么容易跑偏?从任务拆分到Checkpoint的6层控制

Codex越来越强以后,一个很明显的变化是:我们开始敢把更大的任务交给Agent。以前可能只是:帮我写一个函数。后来变成:帮我修复这个Bug。再往后是:把认证模块重构一下,补齐测试,然后确保现有接口行…

2026/8/9 18:42:33 阅读更多 →
C++网络编程核心:从Socket到Epoll的并发服务器实践

C++网络编程核心:从Socket到Epoll的并发服务器实践

1. 项目概述:为什么C网络编程依然值得投入?如果你是一名C开发者,或者正在学习C,并且对“网络编程”这四个字感到既熟悉又陌生,甚至有点望而生畏,那么这篇文章就是为你准备的。我见过太多开发者,…

2026/8/9 18:42:33 阅读更多 →
3分钟快速上手:如何用完全离线语音识别工具保护你的隐私?

3分钟快速上手:如何用完全离线语音识别工具保护你的隐私?

3分钟快速上手:如何用完全离线语音识别工具保护你的隐私? 【免费下载链接】buzz Buzz transcribes and translates audio offline on your personal computer. Powered by OpenAIs Whisper. 项目地址: https://gitcode.com/GitHub_Trending/buz/buzz …

2026/8/9 18:42:33 阅读更多 →

最新新闻

Google Benchmark:C++ 性能基准测试的开源神器,从零到实战

Google Benchmark:C++ 性能基准测试的开源神器,从零到实战

Google Benchmark 是 Google 开源的 C 基准测试(Benchmark)库,专门用来"科学地测量"一段代码到底跑多快。它就像给代码配了一位专业计时裁判,告诉你哪段代码快、快多少、稳定不稳定。 开源地址:GitHub - goo…

2026/8/9 21:26:59 阅读更多 →
C++ 编译链接全流程深度解析:从源码到可执行文件

C++ 编译链接全流程深度解析:从源码到可执行文件

一、为什么你必须懂编译链接很多 C 新手能写出能跑的程序,却搞不懂下面这些报错:undefined reference to xxx 到底是谁找不到谁?为什么我改了头文件,整个项目都要重新编译?为什么 #define 写错了会引发"八竿子打不…

2026/8/9 21:26:59 阅读更多 →
MySQL数据库核心技术与高可用架构实战

MySQL数据库核心技术与高可用架构实战

1. MySQL数据库核心解析与应用实践MySQL作为全球最流行的开源关系型数据库管理系统,已经渗透到互联网应用的各个角落。从个人博客到千万级用户的电商平台,MySQL凭借其稳定性、易用性和出色的性能表现,成为开发者首选的数据库解决方案。我在过…

2026/8/9 21:26:59 阅读更多 →
MOOTDX终极指南:3分钟解锁免费通达信金融数据接口

MOOTDX终极指南:3分钟解锁免费通达信金融数据接口

MOOTDX终极指南:3分钟解锁免费通达信金融数据接口 【免费下载链接】mootdx 通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx 还在为获取股票行情数据而烦恼吗?高昂的API费用、复杂的接口文档、不稳定…

2026/8/9 21:26:59 阅读更多 →
Go 后端服务开发与并发编程模型解析:高并发下的容量估算与背压控制

Go 后端服务开发与并发编程模型解析:高并发下的容量估算与背压控制

Go 后端服务开发与并发编程模型解析:高并发下的容量估算与背压控制 对于Go 服务,请求上下文、goroutine 生命周期和依赖调用比抽象架构更值得先检查。本文把“高并发下的容量估算与背压控制”限定为可由配置、代码和测试记录交叉验证的事项。 Go 后端服务…

2026/8/9 21:26:59 阅读更多 →
数据库文本字段类型选型与优化实战指南

数据库文本字段类型选型与优化实战指南

1. 数据库文本字段类型深度解析在数据库设计中,选择正确的文本字段类型直接影响着数据存储效率、查询性能和系统稳定性。VARCHAR、TEXT和BLOB这三种类型看似简单,但在实际项目中我见过太多因为选型不当导致的性能问题和存储浪费。今天我们就来彻底拆解它…

2026/8/9 21:25:59 阅读更多 →

日新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/9 0:01:47 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

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

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

2026/8/9 0:01:47 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/9 0:03:48 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/9 0:01:47 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

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

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

2026/8/9 0:01:47 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/9 0:03:48 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/9 17:05:02 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/9 0:45:04 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/9 17:05:02 阅读更多 →