Mellanox -- 性能排查
https://mp.weixin.qq.com/s/Ho6Fh7M0m-fWbvI7_CxGLg
—— 容器化如何悄悄打破算力网络的物理假设
00
现象:一切都“看起来正常”
某天你把训练从裸机迁移到 K8s。
结果出现:
GPU 利用率从 95% 掉到 72%
NCCL 没报错
网络没丢包
NIC 带宽也能打满
延迟却明显增加
更诡异的是:
在宿主机跑 RDMA benchmark 正常,在容器里跑就变慢。
这就是典型的:
容器跨层问题。
01
RDMA 本来依赖什么假设?
在裸机环境下,RDMA 高性能依赖四个核心假设:
① GPU ↔ NIC 距离最短
② NUMA 绑定正确
③ NIC 资源完整
④ MTU/优先级配置一致
容器化后,这四个假设可能全部被破坏。
02
完整排查路径图
RDMA 变慢
│
├── ① 是否跨 NUMA?
├── ② GPU ↔ NIC 是否仍在同一 PCIe 域?
├── ③ 是否使用 VF(SR-IOV)?
├── ④ MTU 是否被 CNI 改写?
├── ⑤ 是否启用了 hostNetwork?
├── ⑥ cgroup 是否限制 RDMA 资源?
└── ⑦ 是否存在 iptables/TC 干扰?
03
第一类问题:NUMA 亲和性被打破
在裸机:
GPU0 + NIC0 在 NUMA0
进程绑定 NUMA0
在容器里:
Pod 被调度到任意 CPU
未开启 topologyManager
未设置 CPU pinning

结果:
进程跑在 NUMA1
GPU/NIC 在 NUMA0
发生:
跨 UPI 访问
PCIe 访问延迟增加
ibv_post_send 变慢
图片
排查命令
在容器内:
numactl --show
cat /sys/class/infiniband/mlx5_0/device/numa_node
nvidia-smi topo -m
如果 NUMA 不一致,就是第一嫌疑人。
04
第二类问题:GPU ↔ NIC 拓扑被破坏
在容器环境中常见:
通过 device plugin 暴露 GPU
通过 SR-IOV 暴露 VF
但:
VF 可能不在与 GPU 同一个 PCIe Switch 下。
裸机时是:
GPU0 --(PIX)-- NIC0
容器时可能变成:
GPU0 --(SYS)-- VF3
GPUDirect RDMA 路径变长。
延迟上升。
05
第三类问题:SR-IOV 切割 NIC 资源
SR-IOV 把 PF 切成多个 VF。
问题是:
QP 资源被切割
NIC SRAM 被分配
DCQCN 状态被隔离
结果:
单 VF 可用 QP 减少
拥塞控制精度下降
瞬时突发更强
表现为:
CNP 增多
延迟抖动
排查命令
ibv_devinfo
ethtool -S ethX | grep -i pfc
看是否使用 VF 设备。
06
第四类问题:MTU 被 CNI 改写
某些 CNI 插件(如 overlay 网络)会:
把 MTU 改成 1450
甚至更小
RoCE 仍是 9000 MTU。
结果:
ACK 报文走容器网络
MTU 不匹配
可能碎片化
表现为:
小包延迟明显上升。
排查命令
ip link show
cat /sys/class/net/ethX/mtu
宿主机 vs 容器对比。
07
第五类问题:hostNetwork vs netns
如果未启用 hostNetwork:
容器在独立 netns
iptables 规则不同
TC 可能插入队列
RoCE 是 UDP 4791。
iptables 可能对其:
做 conntrack
做限速
做 mangle
即便不丢包,也会增加 CPU 路径开销。
08
第六类问题:cgroup RDMA 限制
Linux 支持 RDMA 资源限制:
/sys/fs/cgroup/rdma/
如果 kubelet 开启限制:
每个 Pod 只能用有限 QP
CQ 数量受限
结果:
NCCL 可能被迫复用 QP,降低并行度。
09
第七类问题:多轨调度被打乱
在 8 NIC 机器上:
裸机:
channel0 → NIC0
channel1 → NIC1
...
容器化后:
Pod 只被分配 1 个 VF
多 rail 优势消失
通信带宽骤降。
10
一个真实案例分析
场景:
16 节点
每节点 8 GPU
SR-IOV 8 VF
Kubernetes 调度
现象:
GPU 利用率 73%
排查:
单机裸机可达 96%
容器内 RDMA latency 增加 18%
NUMA 不一致
VF 不在 GPU 最近 PCIe Switch
修复:
启用 topologyManager
设置 single-numa-node policy
手动对齐 GPU/VF
结果:
GPU 利用率恢复 92%。
11
容器化破坏了什么?
容器本质是:
把逻辑隔离叠加在物理资源之上。
但 RDMA 是:
极度依赖物理路径的技术。
当逻辑层忽略物理层:
性能就会悄悄下降。
RDMA 的性能来自物理拓扑,而不是 API。
容器不会自动理解 PCIe 距离。
NUMA 错位是容器算力集群的第一隐形杀手。
SR-IOV 是隔离工具,不是性能增强工具。
裸机正常,不代表容器正常。

浙公网安备 33010602011771号