news 2026/5/21 14:47:19

RDMA之RoCEv2 无损网络PFC 、DCQCN 和ECN (7)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
RDMA之RoCEv2 无损网络PFC 、DCQCN 和ECN (7)

一、无损网络概述

1.1 无损网络产生的背景

传统的 TCP/IP 软硬件架构及应用存在着网络传输和数据处理的延迟过大、存在多次数据拷贝和中断处理、复杂的 TCP/IP 协议处理等问题。 RDMA(Remote Direct Memory Access,远程直接内存访问)是一种为了解决网络传输中服务器端数据处理延迟而产生的技术。 RDMA 将用户应用中的数据直接传入服务器的存储区,通过网络将数据从一个系统快速传输到远程系统的存储器中, 消除了传输过程中多次数据复制和文本交换的操作, 降低了 CPU 的负载。

分布式AI计算的迭代过程中,大量突发流量会在几毫秒内将数据分配到工作节点,当传递和更新中间参数时,发送到参数服务器的小规模流量会发生Incast。在这些流交换的过程中,网络可能会出现丢包、拥塞、负载失衡等问题。因此,一些流的FCT(Flow Completion Time,流完成时间)被延长。如果有一些流发生延迟,可能会导致存储和计算资源无法得到充分利用,进而延迟了整个应用程序的完成时间。为满足分布式AI计算的需求,需要构建高速零丢包的数据中心网络。

1.2 无损网络协议发展

高性能分布式计算和高性能存储RDMA的普及以及融合以太网的应用,使得ECN(Explicit Congestion Notification,显式拥塞通告)技术和PFC(Priority-based Flow Control,基于优先级的流控)技术等无损协议得到广泛应用,由此诞生了无损以太网的概念。

无损以太网最早在2008年提出,主要的两个基础协议为ECN和PFC。

无损以太网除了涉及网络侧的技术,还涉及服务器网卡侧的特性,包括为了支持RDMA协议在以太网传输的RoCE特性以及NVMe协议在以太网传输的NoF(NVMe over Fabric)

1.3 无损RoCE网络关键特性

在 RoCE 网络中,我们需要构建无损以太网用于保证网络传输过程中不丢包。构建无损以太网需支持以下关键特性:

• 数据缓冲区管理和监控:根据流量特点调整端口、队列能够使用的缓冲区大小,并通过命令行方式或 gRPC 上报缓冲区使用情况。

数据缓冲区大小调整请根据需要在专业人士指导下进行,数据缓冲区监控建议配置。

• (必选) PFC(Priority-based Flow Control,基于优先级的流量控制): 逐跳提供基于优先级的流量控制,能够实现在以太网链路上运行多种类型的流量而互不影响。

• (必选) ECN(Explicit Congestion Notification,显示拥塞通知): 设备发生拥塞时, 通过对报文 IP 头中 ECN 域的标识,由接收端向发送端发出降低发送速率的 CNP(CongestionNotification Packet,拥塞通知报文),实现端到端的拥塞管理, 减缓拥塞扩散恶化。

• (建议) DCBX(Data Center Bridging Exchange Protocol,数据中心桥能力交换协议):使用 LLDP 自动协商 DCB 能力参数,包括 PFC 和 ETS 等。一般用在接入交换机连接服务器的端口,与服务器网卡进行能力协商。

• (可选) ETS(Enhanced Transmission Selection,增强传输选择): 将流量按服务类型分组,在提供不同流量的最小带宽保证的同时提高链路利用率, 保证重要流量的带宽百分比。需要逐跳提供

1.4 PFC和ECN对比

PFCECN
网络位置二层网络层和传输层
作用范围点到点端到端
是否需要全网支持
被控制对象网络中的上一个节点发送主机
报文缓存位置中间网络节点以及发送端发送端
受影响的流量网络设备中8个转发队列中某个队列的所有流量发生拥塞应用的连接
响应速度

二、PFC(Priority-based Flow Control)

2.1 PFC的由来

现有以太Pause机制(802.3协议定义)即可实现不丢包。以太Pause机制的原理如下:当下游设备发现接收能力小于上游设备的发送能力时,会主动发Pause帧给上游设备,要求暂停流量的发送,等待一定时间后再继续发送数据。但是以太Pause机制是将链路上所有的流量都暂停,即流量暂停是针对整个接口。

而对实际业务而言链路共享至关重要,链路共享要求:

  • 一种类型的突发流量不能影响其他类型流量的转发。
  • 一种类型的流量大量积压在队列中不能抢占其他类型流量的缓存资源。

为了解决现有以太Pause机制和链路共享之间的冲突,PFC产生了。

PFC也称为Per Priority Pause或CBFC(Credit Based Flow Control),是对现有以太Pause机制的增强。

  • PFC允许在一条以太网链路上创建8个虚拟通道,并为每条虚拟通道指定一个优先等级,允许单独暂停和重启其中任意一条虚拟通道,同时允许其它虚拟通道的流量无中断通过。这一方法使网络能够为单个虚拟链路创建零丢包类别的服务,使其能够与同一接口上的其它流量类型共存。
  • 为了做到无损转发,队列应有足够的深度且拥塞门限不应过大,以保证反压生效前报文能够进队列缓存,不会因为队列满被丢弃。
  • PFC从拥塞点(目的端)在网络中逐级反压到源端,抑制源端发送的速率,所以对于发送端(服务器)而言,也需支持PFC功能。

PFC的定义:Priority-based Flow Control,基于优先级的流量控制。

  • 当收端特定优先级队列缓存超过反压门限时,向发端发送PFC反压帧。
  • 发端收到PFC反压帧时,停止向收端发送流量。
  • 当收端特定优先级队列缓存恢复到反压停止门限时,向发端发送PFC反压停止帧。
  • 发端收到PFC反压停止帧时,恢复向发端发送流量。

2.2 PFC帧的格式

PFC报文格式如下,可以看出流量暂停只针对某一个或几个优先级队列,不针对整个接口进行中断。每个队列都能单独进行暂停或重启,而不影响其他队列上的流量,真正实现多种流量共享链路。而对非PFC控制的优先级队列,系统则不进行反压处理,即在发生拥塞时将直接丢弃报文。

  • D.MAC:目的MAC地址,取值固定为01-80-c2-00-00-01
  • S.MAC:源MAC地址。
  • Type:以太网帧类型,取值为88-08。
  • Control opcode:控制码,取值为01-01。
  • Priority enable vector:反压使能向量。其中E(n)和优先级队列n对应,表示优先级队列n是否需要反压。当E(n)=1时,表示优先级队列n需要反压,反压时间为Time(n);当E(n)=0时,则表示该优先级队列不需要反压。
  • Time(0~7):反压定时器。当Time(n)=0时表示取消反压。
  • Pad:预留,传输时为0。
  • CRC:循环冗余校验。

2.3 PFC 帧产生过程

Device B 的端口 1 收到来自 Device A 的报文后, MMU(Memory Manage Unit, 存储器管理单元) 会为该报文分配 cell 资源, 当设备的 PFC 功能处于开启状态时,会根据报文中的 dot1p优先级统计占用的 cell 资源。

cell 资源:用来存储数据包的内容,端口会根据报文的实际大小占用相应大小的 cell 资源。比如一个 cell 资源是 208 字节,当发送的报文是 128 字节时,端口会给它分配一个 cell 资源,当发送的报文是 300 字节时,端口会给它分配两个 cell 资源。

芯片提供了两个视角:Ingress和Egress,报文在进入MMU缓冲前先做Ingress Admission Check和Egress Admission Check,二者都通过才会进入MMU;

芯片在MMU中的计数单位是CELL,会在Ingress/Egress两个方向上设置门限和统计队列长度;

2.4 PFC反压原理

•PFC是为了防止因为拥塞导致丢包。

•当接口因为拥塞导致报文积压时,设备(交换机)会将报文缓存下来,但设备的缓存能力有限,因此当缓存队列满时,需要通告上游停止发送报文,称作反压

•反压就是发送Pause流控帧通告上游设备停止发送报文。

•反压端口则根据拥塞端口流量的入端口来决定,报文在进入交换机时,有入端口标记。因此在出端口拥塞时,通过报文的入端口向上游发送Pause帧停流。

2.5 PFC死锁

•PFC死锁(PFC DeadLock)是指当多个交换机之间因为环路等原因同时出现拥塞,各自端口缓存消耗超过阈值,而又相互等待对方释放资源,从而导致所有交换机上的数据流都永久阻塞的一种网络状态。

•如下图:Leaf1由于2口被堵塞,1口进来报文得不到转发,向Spine1反压;Spine1由于1口被堵塞,2口进来报文得不到转发,向Leaf2反压;Leaf2由于1口被堵塞,2口进来报文得不到转发,向Spine2反压;Spine2由于2口被堵塞,1口进来报文得不到转发,向Leaf1反压;Leaf1的2口继续被堵塞,形成循环依赖。

PFC死锁的影响:一旦出现死锁,死锁路径上的交换机,都处于停流状态,将导致业务中断。

2.6 PFC死锁预防

针对数据中心Clos场景:

•若Leaf2与Server2间出现链路故障,或者Leaf2因为某些故障原因没有学习到Server2的地址,都将导致流量不从Leaf2的下游端口转发,而是从Leaf2的上游端口转发。这样Leaf2-Spine2-Leaf1-Spine1就形成了一个循环依赖缓冲区,当4台交换机的缓存占用都达到PFC反压帧触发门限,都同时向对端发送PFC反压帧以停止发送某个优先级的流量,将形成PFC死锁状态,最终导致该优先级的流量在组网中被停止转发。

•PFC死锁预防功能中定义了PFC上联端口组,用户可以将一个Leaf设备上与Spine相连的接口都加入PFC上联端口组,一旦Leaf设备检测到同一条业务流从属于该端口组的接口内进出,即说明该业务流是一条高风险的钩子流,易引起PFC死锁的现象,针对钩子流将会执行死锁预防。

三、DCQCN(Data Center Quantized Congestion Notification,数据中心量化拥塞通知)

3.1 DCQCN出现的缘由

当前RDMA在数据中心部署主要使用RoCE v2协议,该协议依赖PFC(Priority-based Flow Control)来保证网络的无损,即不发生丢包。PFC 能够防止以太网交换机和网络接口卡上的缓冲区溢出。交换机和网络接口卡会跟踪入站队列。当队列超过一定阈值时,会向上游实体发送“暂停”消息。随后上行实体会停止在该链路上的数据传输,直到接收到“恢复”消息。PFC最多可指定八个优先级类别。暂停/恢复消息会指定它们所适用的优先级类别。

问题在于,暂停机制是按端口(和优先级)来操作的,而非按流来操作的。这可能会导致队头阻塞问题。结果是在单个流的传输性能方面表现不佳但是PFC性能表现不佳,由于队头阻塞和带宽分配不均等问题,PFC 会导致应用程序性能不佳。为了缓解这些问题,DCQCN诞生了。

3.2 PFC队头阻塞问题现象

•如 下图所示Flow 1在Device2产生拥塞,反压Device1,导致Flow 2受到阻塞,得不到转发。

如果要避免头阻问题出现,可以部署基于流的拥塞控制,如部署ECN,提前降低Flow 1的发送速率,缓解拥塞,进而避免Device2发送PFC反压帧。

3.3 DCQCN具体实现

DCQCN(Data Center Quantized Congestion Notification,数据中心网络的拥塞控制算法):目前是RDMA网络应用最广泛的拥塞控制算法,DCQCN只需要可以支持ECN功能的网络设备,其他的协议功能在主机的网卡上实现。DCQCN可以在需要零丢包传输的RDMA网络中保证高吞吐,满足无损业务的高要求。

DCQCN可以划分为三个部分:

  • 拥塞点算法:中间交换机检查当前拥塞情况,当队列深度超过阈值时,通过ECN标记报文,然后转发给下一跳。
  • 通知点算法由接收方网卡完成,主要是把拥塞信息通知到发送方。RoCEv2新增了CNP控制报文用于拥塞通知。接收方网卡检查每个接收包的ECN标志,如果ECN被设置,那么发送CNP给发送方。
  • 响应点算法:由发送方网卡完成,负责调节发送速率避免拥塞。

四、ECN (Explicit Congestion Notification,显示拥塞通告)

4.1 DCQCN与ECN结合实际作用

当CP(Congestion Point,拥塞点)的队列中,报文已经超过ECN(Explicit Congestion Notification,显示拥塞通告)门限时,CP在转发报文中打上ECN拥塞标记(ECN字段置为11),ECN拥塞标记使用IP报文头部中的ToS(Type of Service)字段的最后两比特,其含义如下:

  • 00 – 不支持ECN的传输,非ECT(ECN-Capable Transport,支持ECN的传输)。
  • 10 – 支持ECN的传输,ECT(0)。
  • 01 – 支持ECN的传输,ECT(1)。
  • 11 – CE(Congestion Encountered,发送拥塞)。

宿端服务器NP(Notification Point,通知点)收到携带ECN拥塞标记的报文后,向源端服务器RP(Reaction Point,响应点)发送CNP(Congestion Notification Packet,拥塞通知报文)。源端服务器收到CNP拥塞通知报文后,降低发包速率。

ECN门限分为高门限和低门限:

  • 当队列缓存低于ECN低门限时,不进行ECN标记。
  • 当队列缓存大于低门限,小于高门限时,按照概率进行ECN标记。
  • 当队列缓存超过高门限时,全部进行ECN标记。

4.2 PFC和ECN结合降低拥塞

设备通过缓存门限来度量队列的缓存使用情况。为了实现对无损队列的流量控制,减缓无损队列的缓存拥塞,可以为无损队列设置两种缓存门限:ECN门限和PFC门限。PFC门限是入方向的队列缓存阈值,ECN门限是出方向的队列缓存阈值。实际上,如果出方向一直不拥塞,入方向是很难拥塞的,报文到达后会被马上转发,所以发生拥塞时,可以通过先触发ECN门限通知源端降速,让拥塞缓解,避免过多的触发PFC。

4.3 ECN处理流程

  • 当Device的无损队列出现拥塞,队列已使用的缓存超过ECN门限时,Device在转发报文中打上ECN拥塞标记(将ECN字段置为11)。
  • Server收到携带ECN拥塞标记的报文后,向Client发送CNP拥塞通知报文。Client收到CNP拥塞通知报文后,降低发包速率。
  • 当Device的无损队列拥塞加剧,队列已使用的缓存超过PFC反压帧触发门限时,Device向Client发送PFC反压通知报文。Client收到PFC反压通知报文后,停止发送对应优先级队列的报文。
  • 当Device的无损队列拥塞缓解,队列已使用的缓存低于PFC反压帧停止门限时,Device向Client发送PFC反压停止报文。Client收到PFC反压停止报文后,继续发送对应优先级队列的报文。

4.4 合理设置ECN门限阈值

从Device发现队列缓存出现拥塞触发ECN标记,到Client感知到网络中存在拥塞降低发包速率,是需要一段时间的。在这段时间内,Client仍然会按照原来的发包速率向Device发送流量,从而导致Device队列缓存拥塞持续恶化,最终触发PFC流控而暂停流量的发送。因此,需要合理设置ECN门限,使得ECN门限和PFC门限之间的缓存空间能够容纳ECN拥塞标记之后到Client降速之前这段时间发送过来的流量,尽可能的避免触发网络PFC流控。

并且网络中同时存在时延敏感小流和吞吐敏感大流,ECN门限也需要同时兼顾:

  • ECN门限设置偏高时,可以延缓触发ECN拥塞标记,保障流量发送的速率和队列内用来吸收突发流量的缓存空间,满足吞吐敏感的大流的流量带宽。但是,在队列拥塞时,报文在缓存空间内排队,会带来较大的队列时延,对时延敏感的小流无益。
  • ECN门限设置偏低时,可以尽快触发ECN拥塞标记,通知Client降速,从而使队列内的缓存空间维持在较低的缓存深度,减少报文排队,降低队列时延,对时延敏感的小流有益。但是,过低的ECN门限会影响吞吐敏感的大流,限制了大流的流量带宽,无法满足大流的高吞吐。

各阈值的大小关系必须满足:

如果这个顺序搞反了——比如 ECN 的 K_max 比 PFC 的 XOFF 还高——那 ECN 形同虚设,每次都是 PFC 先触发,你就回到了纯 PFC 那个噩梦模式。

4.5 PFC和ECN对比

PFCECN
网络位置二层网络层和传输层
作用范围点到点端到端
是否需要全网支持
被控制对象网络中的上一个节点发送主机
报文缓存位置中间网络节点以及发送端发送端
受影响的流量网络设备中8个转发队列中某个队列的所有流量发生拥塞应用的连接
响应速度

五、新协议的出现UEC(Ultra Ethernet Consortium)

后面单独写一篇文章。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/21 14:46:47

5分钟掌握res-downloader:跨平台网络资源智能捕获与下载实战指南

5分钟掌握res-downloader:跨平台网络资源智能捕获与下载实战指南 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader …

作者头像 李华
网站建设 2026/5/21 14:46:30

构建完整系统安全防护方案:Legacy Update终极兼容性解决方案

构建完整系统安全防护方案:Legacy Update终极兼容性解决方案 【免费下载链接】LegacyUpdate Get back online, activate, and install updates on your legacy Windows PC 项目地址: https://gitcode.com/gh_mirrors/le/LegacyUpdate 还在为Windows XP、Vist…

作者头像 李华
网站建设 2026/5/21 14:45:48

Onekey Steam清单下载器:5分钟学会专业游戏清单管理

Onekey Steam清单下载器:5分钟学会专业游戏清单管理 【免费下载链接】Onekey Onekey Steam Depot Manifest Downloader 项目地址: https://gitcode.com/gh_mirrors/one/Onekey Onekey是一款开源的Steam Depot Manifest下载工具,能够直接连接Steam…

作者头像 李华
网站建设 2026/5/21 14:44:26

联想笔记本BIOS解锁神器:3分钟开启隐藏硬件性能

联想笔记本BIOS解锁神器:3分钟开启隐藏硬件性能 【免费下载链接】LEGION_Y7000Series_Insyde_Advanced_Settings_Tools 支持一键修改 Insyde BIOS 隐藏选项的小工具,例如关闭CFG LOCK、修改DVMT等等 项目地址: https://gitcode.com/gh_mirrors/le/LEGI…

作者头像 李华
网站建设 2026/5/21 14:42:23

别再瞎找了!2026年不容错过的专业AI论文软件

2026年AI论文写作工具已从“基础生成”升级为智能协同研究系统,核心评价维度包括文献真实性、格式合规性、长文本逻辑、查重降重、AIGC合规与多语言支持。本次测评覆盖6款主流工具,涵盖中文与英文场景、全流程与专项功能、免费与付费版本,让你…

作者头像 李华
网站建设 2026/5/21 14:42:20

通过Taotoken聚合调用,在不同时段测试模型响应速度的观察

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 通过Taotoken聚合调用,在不同时段测试模型响应速度的观察 在构建依赖大模型能力的应用时,响应速度是一个直…

作者头像 李华