作为拓扑的服务器:机箱里的距离不平等
草稿
“同一台服务器”不等于“同样的距离”:数据搬运的成本取决于路径,而路径由拓扑决定。
打开机箱:CPU、内存、PCIe、GPU、网卡、存储
一台服务器是一张图:CPU 插槽拥有内存通道;PCIe 根复合体(root complex)连接设备;GPU 与网卡可能分属不同的 NUMA 节点;NVSwitch 或 PCIe 交换芯片可能创建额外路径;NVMe 设备可能离某个插槽更近。Linux 内核通过 NUMA 与 PCI 元数据暴露这张图的一部分,厂商工具则暴露加速器专属的链路。
去神话的 NUMA
NUMA(非统一内存访问)意味着内存访问成本取决于内存域。CPU 访问挂在自己插槽下的内存通常是本地访问;访问另一插槽的内存则是远端访问。确切的延迟和带宽取决于平台与负载,但架构层面的区分是可靠的。
对 GPU 工作负载,关键问题常常是:哪些 CPU 核心、哪个内存库、哪个 PCIe 根复合体、哪块网卡离这块 GPU 最近?主机侧数据加载器、页锁定内存(pinned memory)、中断、RDMA 和控制线程都会受影响。Kubernetes 层面对应的治理机制见NUMA 感知调度。
| 观察 | 可能原因 | 有用证据 |
|---|---|---|
| GPU 喂不饱 | 远端内存或缓慢的输入管线 | numactl、CPU 亲和性、输入吞吐 |
| 集合通信慢 | GPU/网卡配对错误或缺对等链路 | nvidia-smi topo -m、NCCL 图日志 |
| 抖动 | 主机争用、中断或共享 PCIe 路径 | CPU 绑核、PCIe 树、节点负载构成 |
| Pod 被拒 | 严格拓扑策略无法满足提示 | kubelet 策略与设备插件提示 |
检查仪式
nvidia-smi -L
nvidia-smi --query-gpu=index,name,pci.bus_id,memory.total,power.limit \
--format=csv
nvidia-smi topo -m
lscpu -e=CPU,NODE,SOCKET,CORE
numactl --hardware
lspci -tv
lspci -vv -s <GPU-PCI-BDF>为什么 BIOS 和固件也在故事里
IOMMU 模式、PCIe 链路设置、电源管理、固件、风扇策略和平台固件都会影响设备可见性与性能。一个通过了软件冒烟测试的节点,仍可能带着一份在负载下发生变化的硬件或固件配置。请把平台基线当作带版本的基础设施,这与安全、可靠性与生命周期中的版本矩阵是同一个思想。
总结
调度器眼中的“一个节点”,在物理上是距离不平等的一张图。把拓扑检查变成装机仪式、把结果存成工件,NUMA 与互连层面的性能问题就有了第一手证据。下一章的加速器全景把视野从单机扩展到生态。