无损网络:PFC 信用流控 这些概念是什么意思?
是什么约束导致我们要引入无损网络,无损网络会带来什么问题?
了解Go-Back-N,选择性重传,乱序重排的概念
无损网络:PFC 信用流控 这些概念是什么意思?
是什么约束导致我们要引入无损网络,无损网络会带来什么问题?
了解Go-Back-N,选择性重传,乱序重排的概念
核心约束不是“必须绝对零丢包”,而是:某些上层/端侧协议在丢包时的代价太高,尤其是 RDMA(比如 RoCEv2 的 RC 语义):
无损网络的代价非常现实,典型问题包括:
一句话:无损把“丢包问题”换成了“暂停传播、调参复杂、全局稳定性”的系统问题。
这些都是可靠传输里处理丢包/乱序的经典机制。
如果你把这些放到同一张图里理解:
微突发 多发一收 这些都是什么?是由什么引起的?
微突发指的是在数据中心网络中,短时间内非常大量的数据流量涌入某一网络端口,导致该端口的缓冲区瞬间被填满,从而产生严重的网络拥塞,通常持续时间极短,可能只有几毫秒到几十毫秒。
**多发一收(Incast)**指的是一种典型的网络拥塞情况,通常发生在数据中心环境中,当多个源节点(通常是多个服务器)同时向一个目标节点发送数据时,目标节点的网络链路可能瞬间被大量的并发请求填满,导致目标节点接收数据的吞吐量出现瓶颈。
这两种现象都属于网络中突发流量带来的问题,并且都可能引起网络链路的拥塞、丢包,对数据传输的性能和稳定性产生严重影响。
简明地总结我们上面遇到的所有问题与概念。我既不是在考试,也不是在面试,我是在学习
下面把我们一路提到的概念按“从目标→机制→副作用→端侧可靠性”串起来,尽量用一套一致的视角。
数据中心里,短时拥塞很常见;对 RDMA 这类对丢包/恢复很敏感的业务来说,丢包会把尾延迟放大。
于是出现两条路线:
极短时间(微秒~毫秒级)内到达某个端口的瞬时速率 超过端口线速,队列一下被灌满。
典型诱因:
多个发送端同时给一个接收端/同一出端口发,接收端口或交换机出端口成为瓶颈,常伴随微突发,是 microburst 的常见场景来源之一。
不是全网“绝对不丢”,而是:对某个业务优先级(priority)尽量避免因队列溢出而丢包,让它走“快路径”,避免进入“重传/超时”的慢路径。
最早的链路层暂停:让对端“别发了”。通常是整口暂停,粒度粗。
PAUSE 的升级版:按优先级暂停(某个 priority 暂停,别的还能发)。
特点:逐跳(hop-by-hop),靠阈值触发(队列快满就 pause,上游停发)。
更“精确”的逐跳流控:下游给上游发“还能收多少”的信用,上游按信用发。
在 IB 很典型;以太网生态里更多见的是 PFC。
拥塞标记而不是丢包:交换机在队列超过阈值时给包打标记,接收端把标记反馈给发送端,让发送端降速。
一种结合 ECN 标记 + 端侧速率调节 的拥塞控制方案,用来减少队列增长、降低触发 PFC 的概率,避免“全网暂停”。
直觉:PFC 是“刹车”,ECN/DCQCN 是“提前松油门”。
同一队列/同一优先级里,前面的流被堵住,会把后面本来没问题的也一起拖住。
下游 pause 上游,上游排队又 pause 更上游,拥塞从局部扩散成更大范围的停顿。
多方向流互相占着缓冲,大家又被 PFC 暂停,可能形成循环等待(网络“僵住”)。
所以无损网络通常需要:队列隔离、合理阈值、拥塞控制(ECN/DCQCN)、以及小心的拓扑/路由与缓冲规划。
RDMA 通信端点(发送队列 SQ + 接收队列 RQ),很多可靠/有序语义在 QP 层实现。
两边要先准备接收缓冲(post RECV),发送是“两边协作”的消息语义;对比 one-sided 是远端内存读写语义。
可靠语义下丢包/ACK 缺失会触发超时,进入重传/恢复;这就是“丢包导致尾延迟爆炸”的常见来源。
丢一个包,后面一串一起重传;实现简单但浪费带宽、延迟抖动大。
只重传丢的;需要乱序缓存与更复杂的确认信息。
包可能乱序到达,接收端需要缓存并按序交付;缓存不足会退化(丢/等待),缓存过大有成本与时延抖动。
微突发/多发一收 → 交换机队列暴涨 →(要么丢包,要么 PFC 暂停)→ 丢包会触发端侧重传/重排/超时(尾延迟变差)→ 所以用 ECN/DCQCN 这类拥塞控制尽量“少 pause、少丢包”,但无损机制本身会带来 HOL、扩散、死锁与运维复杂度。
如果你接下来要继续学,我建议按这个顺序:
队列与突发 → PFC/缓冲阈值 → ECN 标记与端侧降速 → RDMA 端侧可靠性(QP/重传/乱序)→ 再回头理解 HOL/扩散/死锁为什么出现。