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

image

结果:

进程跑在 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 是隔离工具,不是性能增强工具。

裸机正常,不代表容器正常。

posted @ 2026-02-27 16:15  静水深耕,云停风驻  阅读(1)  评论(0)    收藏  举报