一句话定义:无损网络(Lossless Network)是指在正常拥塞情况下也尽量不丢弃数据包的以太网;PFC(Priority Flow Control,基于优先级的流量控制)是实现它的核心机制——在缓冲区快溢出之前,先向上游喊一声"暂停"。
为什么非要"无损"
以太网天生是"尽力而为"的:交换机缓冲区满了,就把包丢掉。TCP 能自己重传,代价可以接受。但 AI 集群里的 RDMA(Remote Direct Memory Access,远程直接内存访问)不一样——它让网卡绕过操作系统内核直接读写对端内存,图的就是极低延迟。丢一个包,硬件要重传、要回退窗口,性能断崖式下跌。更麻烦的是分布式训练常做集合通信(如 all-reduce),本质是"所有人等最慢的那一个",任何一条链路的丢包都会让整个集群跟着干等。
打个比方
普通网络像没有红绿灯的路口,堵了就撞车,各自绕路重来。无损网络在路口上游装了闸门:眼看缓冲区要排满,就赶紧拦住来车。PFC 就是这个闸门开关,而且是分车道的——按优先级切出若干虚拟通道,每条有自己的缓冲水位线;只有某条车道堵了,才暂停那条车道,其他车道照常通行。
具体动作是:交换机某优先级的缓冲超过阈值,就向上游发 PFC Pause 帧,上游停发该优先级数据;水位回落后再发 Resume。
配置不当为什么会导致 HOL 阻塞
HOL(Head-of-Line,队头阻塞)在这里有两种典型形态:
- 优先级映射太粗。如果把所有流量都塞进同一个优先级,一条拥堵的流会触发暂停,把同端口上完全无关、目的地也不堵的流量一起冻住。本该"分车道"的机制退化成"整条路封路"。
- 暂停逐跳传播形成环。A 暂停 B,B 的缓冲被填满后去暂停 C,C 又暂停 A,环状依赖会让整个网络冻结,业内称作 PFC 死锁或 PFC 风暴。拓扑跳数越多,越容易踩到。
和相关概念的区别
| 概念 | 作用范围 | 干什么 |
|---|---|---|
| PFC | 链路层,逐跳 | 缓冲区快满时喊停上游 |
| ECN / DCQCN | 端到端拥塞通知 | 提前让发送端降速,尽量不走到"暂停" |
| TCP 重传 | 传输层,端到端 | 丢了再补,对 RDMA 代价过高 |
| QoS 优先级 | 分类 | 决定哪类流量走哪条"车道" |
对从业者的意义
做大规模训练或推理集群,无损网络是基本盘。调优时别只盯带宽数字,要看 PFC 暂停计数和每优先级的暂停时长——这个指标上涨,往往不是网卡坏了,而是某条流太猛,或者优先级映射太粗。工程上的常见做法是:精细划分优先级、用 DCQCN 这类拥塞控制让发送端提前减速,把 PFC 留作最后一道保险而非主要手段。阈值、水位线、watchdog 等具体参数,请以设备厂商官方文档为准。
对非网络岗位的人来说,它就是数据中心的红绿灯加缓冲带:不是为了跑得更快,而是为了让最慢的那辆车别把整条路堵死。
