在线咨询 400-826-1668
回到顶部
ARTICLE DETAIL

资讯详情

深耕国风建站与运营引流的一线实战洞察。

4 special-hardware-ats: 特殊硬件与 ATS 缺页的 NUMA 行为

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
返回列表