004、网络性能关键指标:带宽、延迟、吞吐量与拥塞
上周在客户现场调一个分布式训练任务,明明用的是100G RoCE网卡,但实际训练速度只有理论值的30%。客户指着监控面板问:“带宽不是跑满了吗,为什么还是这么慢?”——这个问题太经典了,今天我们就来拆解网络性能的四个核心指标。
从一次实际调试说起
当时监控显示网络带宽利用率确实接近90%,看起来网络很“忙”。但用perf抓了几个热点函数,发现大量时间卡在recv()系统调用上。用ethtool -S看网卡统计,发现outbound_pause_frames计数一直在涨。这里第一个坑就出现了:高带宽利用率不等于高效传输,可能是拥塞导致的报文重传和流控。
后来在交换机上打了镜像抓包,发现大量TCP重传和Dup-ACK。问题根源是某个计算节点的PCIe链路有降速,导致出向流量突发,把交换机的出口缓冲区打满了。这就是典型的“带宽看起来够用,但延迟和拥塞拖垮了整体吞吐”。
四个指标的真正含义
带宽是管道直径,单位Gbps。但很多人忽略了这个值是理论峰值。实际能用到多少,取决于协议开销、MTU大小、网卡DMA效率。比如100G RoCE,扣除各种头部开销,应用层能拿到的大概在94Gbps左右。用iperf3 -c测带宽时记得加-P 4开多流,单流经常跑不满。
延迟是报文从发到收的时间,单位微秒或毫秒。它分几个层次:网卡硬件延迟(微秒级)、内核协议栈处理延迟(几十微秒)、应用层RTT(毫秒级)。AI训练里All-Reduce操作对延迟极其敏感,因为要等所有节点同步。有一次我们把内核的net.core.busy_poll打开,延迟直接从800us降到300us。
吞吐量才是应用实际感受到的“速度”,单位通常是MB/s。它受带宽和延迟共同制约。有个粗略估算公式:吞吐量 ≤ 窗口大小 / RTT。窗口受内核参数net.core.rmem_max和net.ipv4.tcp_rmem限制。遇到过有人把容器里的rmem_max设成默认值,而宿主机调得很大,结果吞吐量只有宿主机的十分之一。
拥塞是动态现象,不是静态指标。它发生时通常伴随三个现象:延迟抖动增大、吞吐量下降、重传增多。现代数据中心网络用ECN(显式拥塞通知)和DCQCN(RoCE的拥塞控制)来缓解。但调试时最直观的还是看ifconfig里的dropped和overruns计数。
几个实操命令
看延迟用ping -A(打印时间戳),或者用hping3 -S -p 443 -i u100微调间隔。更精细的可以用tcpdump -ni eth0 -w file.pcap抓包后Wireshark看IO Graph。
测吞吐推荐用iperf3 -c server -t 30 -b 0(零表示不限速),同时客户端开watch -n 1 'ethtool -S eth0 | grep bytes'看实际物理层流量。
拥塞检测最直接的是ethtool -S | grep -E "(pause|discard|buffer)",或者ss -ti看TCP的srtt和cwnd变化。遇到RoCE网卡可以看mlx5_fs_dump的统计(Mellanox卡)。
参数调优片段
调优不是无脑加大缓冲区,这里踩过坑。曾经把net.ipv4.tcp_rmem的max设到1GB,结果内存被吃光触发OOM。现在我的习惯配置:
# 内核参数(/etc/sysctl.conf)
net.core.rmem_default = 256M
net.core.wmem_default = 256M
net.core.rmem_max = 512M
net.core.wmem_max = 512M
# 这里别设太大,留点给应用
net.ipv4.tcp_rmem = 4096 87380 512M
net.ipv4.tcp_wmem = 4096 65536 512M
# 开启ECN和快速打开
net.ipv4.tcp_ecn = 1
net.ipv4.tcp_fastopen = 3
RoCE网卡还要调priority_flow_control和congestion_control,不同厂商命令不同。有个经验:先跑nvidia-smi netq -t看健康度(N卡),或者mlnx_qos -i eth0看配置(Mellanox)。
个人经验建议
带宽就像高速公路的车道数,延迟是红绿灯等待时间,吞吐是实际通过的车流量。调优时别只盯着一个指标。我习惯的排查顺序是:先看吞吐是否达标,不达标查延迟和丢包,延迟高查中断绑定和NUMA亲和性,丢包查缓冲区和流控。
实际项目中,超过一半的“网络性能问题”最终定位不在网络本身。比如那次PCIe降速,还有一次是内存带宽瓶颈导致网卡DMA饿死。所以硬件一致性很重要:确保网卡插在CPU直连的PCIe槽,用lspci -vvv看链路速度是不是预期值。
最后留个思考题:为什么有些AI集群用400G网络反而比100G训练速度提升不到2倍?因为瓶颈可能卡在All-Reduce的同步开销,或者GPU的NVLink带宽。网络只是管道,真正要优化的是端到端的数据流。
下次我们聊如何用eBPF动态跟踪网络栈延迟分布。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)