GPU那些事儿公众号文章

GPU服务器的core-to-core-latency与NUMA

GPU 服务器场中很多性能问题是 CPU 核心、内存、PCIe 和 GPU 之间的数据通路没有对齐造成的。core-to-core-latency 可量化“CPU 核心之间有多远”,结合 nvidia-smi topo -m、numactl、lscpu 等命令,可做更准确的 NUMA 亲和性、进程绑定和通信路径规划。

GPU那些事儿

公众号 · 26 篇文章

Pasted image 20261012154728.png

在 x86 GPU 服务器场景下,很多性能问题并不是显卡本身“跑不动”,而是 CPU 核心、内存、PCIe 和 GPU 之间的数据通路没有对齐。core-to-core-latency 这类工具的价值就在于:它能把“CPU 核心之间有多远”这件事量化出来,再结合 nvidia-smi topo -m、numactl、lscpu 等命令,可在 GPU 服务器上做更准确的 NUMA 亲和性、进程绑定和通信路径规划。

主要内容:

•
CPU 核心间延迟对 GPU 服务器的影响
•
core-to-core-latency 的作用与定位
•
core-to-core-latency 的安装与使用
•
core-to-core-latency 的输出分析
•
core-to-core-latency 与 GPU 拓扑结合
•
典型排查思路
•
注意事项
•
使用时机


CPU 核心间延迟对 GPU 服务器的影响

现代 x86 服务器通常采用 NUMA 架构。每个 NUMA 节点有自己的 CPU 核心、本地内存和 PCIe 根复合体。CPU 访问本地内存通常更快,跨节点访问则需要经过 QPI/UPI 等片间互联,延迟更高、带宽也可能下降。

GPU 服务器尤其容易暴露这个问题:

•
GPU 挂载在某个 NUMA 节点对应的 PCIe 上;
•
数据加载、预处理、NCCL 通信、CPU-GPU 拷贝都可能落在不同核心上;
•
如果进程、内存、GPU 不在同一 NUMA 域,数据会反复跨节点;
•
多卡训练、推理服务、分布式通信时,核心间延迟差异会被放大。

所以,core-to-core-latency 测的是 CPU 核心间延迟,但它能间接反映 NUMA 拓扑、核心布局和缓存一致性路径对性能的影响。

core-to-core-latency 的作用与定位

core-to-core-latency 是一个用于测量 CPU 核心间通信延迟的基准工具。它会把测试线程绑定到指定核心,利用缓存一致性协议和原子操作,测量不同核心对之间的往返延迟。

它适合回答这些问题:

•
哪些核心之间通信更快?
•
同 NUMA 节点内和跨 NUMA 节点之间延迟差多少?
•
核心布局是否呈现明显的“近/远”分组?
•
绑定亲和性后,关键线程是否落在低延迟核心上?

需要注意:它不是 GPU 带宽测试工具,也不能直接替代 NCCL 测试、GPU 显存带宽测试或网络延迟测试。更合理的用法是把它作为 CPU 拓扑和 NUMA 局部性的辅助诊断工具。

core-to-core-latency 的安装与使用

先安装 Rust 工具链,然后安装工具:




cargo install core-to-core-latency

运行默认测试:




core-to-core-latency

如果需要更高精度,可以增加迭代次数并导出 CSV:




core-to-core-latency 5000 --csv > c2c_latency.csv

测试时建议:

•
在系统空闲时运行;
•
关闭不必要的后台任务;
•
避免同时跑训练、推理或压测;
•
多次运行,观察最小值和分布,不要只看单次平均;
•
容器环境下要确认是否能看到完整 CPU 拓扑。

core-to-core-latency 的输出分析

Pasted image 20261012164147.png

输出通常会给出不同核心对之间的延迟,例如最小、平均、最大延迟,以及具体核心编号。

可以这样看:

•
低延迟核心对:通常位于同一 NUMA 节点、同一 L3 域或同一 CPU socket 内;
•
中等延迟:可能在同一 socket 内但跨不同核心簇;
•
高延迟:往往出现在跨 NUMA 节点、跨 socket 或跨 QPI/UPI 路径上;
•
延迟分布是否均匀:如果不均匀,说明拓扑对线程调度影响较大,亲和性优化收益可能更高。

不要只盯一个平均数。更关键的是看“哪些核心之间明显更慢”,以及这些慢路径是否正好出现在 GPU 数据通路附近。

core-to-core-latency 与 GPU 拓扑结合

单看 core-to-core-latency 还不够,建议配合 GPU 拓扑一起分析:




nvidia-smi topo -m
numactl --hardware
lscpu -e=CPU,NODE,SOCKET,CORE

nvidia-smi topo -m 会显示 GPU 与 GPU、GPU 与 NIC、GPU 与 CPU 亲和性以及 NUMA 亲和性。

常见连接类型含义如下:

•
NV#:NVLink 直连,通常延迟最低;
•
PIX:经过单个 PCIe 交换机;
•
PXB:经过多个 PCIe 桥接;
•
PHB:经过 PCIe 主机桥,通常靠近 CPU;
•
NODE:同一 NUMA 节点内但路径更远;
•
SYS:跨 NUMA 节点或跨系统互联,通常最慢。

结合方法包括:

•
用 nvidia-smi topo -m 确认 GPU 属于哪个 NUMA 节点;
•
用 numactl --hardware 确认该 NUMA 节点包含哪些 CPU 核心;
•
用 core-to-core-latency 确认这些核心之间的延迟是否确实更低;
•
把数据加载、预处理、NCCL 通信线程绑定到对应 NUMA 节点;
•
用 numastat 观察跨节点内存访问是否下降。

典型排查思路

假设一台双路服务器上有 8 张 GPU,训练时发现多卡通信效率不稳定。可以先做拓扑快照:




lscpu
numactl --hardware
nvidia-smi topo -m

再运行核心间延迟测试:




core-to-core-latency 5000 --csv > c2c_latency.csv

如果发现某些核心对延迟明显更高,再检查 GPU 亲和性:




nvidia-smi topo -m

如果 GPU0–GPU3 亲和于 NUMA 0,而业务进程被调度到了 NUMA 1 的核心上,就可能出现跨节点访问。此时可以用 numactl 或 taskset 做绑定验证:




numactl --cpunodebind=0 --membind=0 your_command

如果绑定后 GPU 利用率更稳定、通信延迟下降,说明拓扑对齐确实带来了收益。反之,如果绑定后性能下降,可能是绑核范围过小、核心不足,或者绑定到了离 GPU 更远的节点,需要重新对照拓扑验证。

注意事项

•
不要在业务高峰下测:系统负载会显著影响延迟分布。
•
不要只看单次结果:建议多次采样,关注最小值和稳定区间。
•
容器内结果可能受限:容器可能只暴露部分 CPU,需要结合实例配置理解。
•
不要机械照搬节点编号:不同服务器的 NUMA 编号可能不同,必须以本机拓扑为准。
•
绑核不等于绑内存:只绑 CPU 不绑内存,仍可能产生跨节点访存。
•
它不能替代业务压测:最终仍要用真实训练、推理或通信任务验证。

使用时机

以下场景比较适合引入 core-to-core-latency:

•
新 GPU 服务器验收时建立拓扑基线;
•
多卡训练出现 GPU 利用率波动;
•
推理服务 P99 延迟偏高;
•
NCCL 通信效率不达预期;
•
对比不同 BIOS、内核参数或 NUMA 配置;
•
编写运维手册时补充“这台机器 CPU 拓扑长什么样”。

前往微信阅读全文

内容来自公众号,可前往微信查看原文。

查看作者的更多文章 →订阅更新、RSS 与阅读指南 →