PFC 和 ECN
PFC 和 ECN
参考文档:https://support.huawei.com/enterprise/zh/doc/EDOC1100598450/cf0e7db6
01-PFC死锁预防简介
简介
PFC死锁预防是一种预防PFC死锁现象发生的技术。
目的
PFC(Priority-based Flow Control,基于优先级的流量控制)是一种有效避免丢包的流量控制技术,是无损网络的基础。但当多个设备之间因为环路等原因同时出现拥塞,各自端口缓存消耗超过PFC触发门限值,相互发送PFC反压帧,同时又相互等待对方释放资源时,会导致所有设备上的数据流都永久阻塞,这种网络状态称为PFC死锁。
为了解决PFC死锁的问题,智能无损网络提供了PFC死锁预防功能,通过识别易造成PFC死锁的业务流,修改队列优先级,从而预防PFC死锁的发生。
02-PFC死锁预防原理描述
1-PFC优先级流量控制
PFC优先级流量控制
产生原因
现有以太Pause机制即可实现不丢包。以太Pause机制的原理如下:当下游设备发现接收能力小于上游设备的发送能力时,会主动发Pause帧给上游设备,要求暂停流量的发送,等待一定时间后再继续发送数据。但是以太Pause机制是将链路上所有的流量都暂停,即流量暂停是针对整个接口。而对实际业务而言链路共享至关重要。链路共享要求:
- 一种类型的突发流量不能影响其他类型流量的转发。
- 一种类型的流量大量积压在队列中不能抢占其他类型流量的缓存资源。
为了解决现有以太Pause机制和链路共享之间的冲突,基于优先级流量控制PFC(Priority-based Flow Control)产生了。
基本原理
PFC也称为Per Priority Pause或 CBFC(Class Based Flow Control),是对现有以太Pause机制的增强。PFC是一种基于优先级的流控机制,如[图2-1所示,DeviceA发送接口分成了8个优先级队列,DeviceB接收接口有8个接收缓存,两者一一对应。当DeviceB的接口上某个接收缓存产生拥塞时,发送一个反压信号“STOP”到DeviceA,DeviceA停止发送对应优先级队列的报文。



由此可见,流量暂停只针对某一个或几个优先级队列,不针对整个接口进行中断。每个队列都能单独进行暂停或重启,而不影响其他队列上的流量,真正实现多种流量共享链路。而对非PFC控制的优先级队列,系统则不进行反压处理,即在发生拥塞时将直接丢弃报文。
2-PFC死锁检测
PFC死锁
PFC死锁(PFC DeadLock),是指当多个交换机之间因为环路等原因同时出现拥塞,各自端口缓存消耗超过阈值,而又相互等待对方释放资源,从而导致所有交换机上的数据流都永久阻塞的一种网络状态。
正常情况下,PFC中流量暂停只针对某一个或几个优先级队列,不针对整个接口进行中断,每个队列都能单独进行暂停或重启,而不影响其他队列上的流量,真正实现多种流量共享链路。然而当发生链路故障或设备故障时,在路由重新收敛期间,网络中可能会出现短暂环路,会导致出现一个循环依赖缓冲区(Cyclic Buffer Dependency)。如[图 PFC死锁示意图]所示,当4台交换机都达到PFC门限,都将同时向对端发送PFC反压帧,这个时候该拓扑中所有交换机都处于停流状态。

PFC死锁检测工作原理
PFC死锁检测通过以下几个过程对PFC死锁进行全程监控,当设备在死锁检测期间持续收到PFC反压帧时,将不会响应。
1.死锁检测
Device2的端口收到Device1发送的PFC反压帧后,内部调度器将停止发送对应优先级的队列流量,并开启定时器,根据设定的死锁检测和精度开始检测队列收到的PFC反压帧。

2.死锁判定
若在设定的PFC死锁检测时间内该队列一直处于PFC-XOFF(即被流控)状态,则认为出现了PFC死锁,需要进行PFC死锁恢复处理流程。

3.死锁恢复
在PFC死锁恢复过程中,会忽略端口接收到的PFC反压帧,内部调度器会恢复发送对应优先级的队列流量,也可以选择丢弃对应优先级的队列流量,在恢复周期后恢复PFC的正常流控机制。若下一次死锁检测周期内仍然判断出现了死锁,那么将进行新一轮周期的死锁恢复流程。

4.死锁控制
若上述死锁恢复流程没有起到作用,仍然不断出现PFC死锁现象,那么用户可以配置在一段时间内出现多少次死锁后,强制进入死锁控制流程。比如设定一段时间内,PFC死锁触发了一定的次数之后,认为网络中频繁出现死锁现象,存在极大风险,此时进入死锁控制流程,设备将自动关闭PFC功能,需要用户手动恢复。

3-PFC死锁预防
PFC死锁检测功能在死锁检测周期内持续收到PFC反压帧时,设备可以通过不响应反压帧的方式去解除PFC死锁现象。然而这种事后解锁的方式只能解决极低概率出现PFC死锁的场景,对于一些由于多次链路故障等原因出现环路的网络,在PFC死锁恢复流程后瞬间又会进入PFC死锁状态,网络吞吐将受到很大影响。
PFC死锁预防正是针对典型CLOS组网的一种事前预防的方案,通过识别易造成PFC死锁的业务流,修改队列优先级,从而预防PFC死锁的发生。
如[图2-8所示,一条业务流从Host1-Leaf1-Spine1-Leaf2-Host4,这种正常的业务转发过程不会引起PFC死锁。然而若Leaf2与Host4间出现链路故障,或者Leaf2因为某些故障原因没有学习到Host4的地址,都将导致流量不从Leaf2的下游端口转发,而是从Leaf2的上游端口转发。这样Leaf2-Spine2-Leaf1-Spine1就形成了一个循环依赖缓冲区,当4台设备的缓存占用都达到PFC反压帧触发门限,都同时向对端发送PFC反压帧停止发送某个优先级的流量,将形成PFC死锁状态,最终导致该优先级的流量在组网中被停止转发。

PFC死锁预防功能中定义了PFC上联端口组,用户可以将一个Leaf设备上与Spine相连的接口,例如[图2-9]中的interface1与interface2,都加入PFC上联端口组,一旦Leaf2设备检测到同一条业务流从属于该端口组的接口内进出,即说明该业务流是一条高风险的钩子流,易形成循环依赖缓冲区,引起PFC死锁。

如[图2-10所示,用户可以在DeviceB上对指定DSCP值的业务流进行重点检测。比如某指定DSCP值的业务流从DeviceA发过来,根据DSCP值映射的设备内部优先级,该流在DeviceB内会通过队列1转发。若DeviceB检测到该流量为钩子流,易引起PFC死锁,此时DeviceB会修改其队列优先级,使其从队列2转发,这样就可以破除队列1可能产生的循环依赖缓冲区,预防了PFC死锁的产生,保障流量的正常转发。
并且DeviceB也会修改其报文中的DSCP值,让该流量在DeviceC中也从队列2转发,若该流在下游设备DeviceC引起了拥塞,触发了PFC门限,则会对DeviceB的队列2进行反压,让DeviceB停止发送队列2对应优先级的流量。

若该流在DeviceB内出现了拥塞,触发了队列2的PFC门限,则PFC死锁预防功能支持向队列1发送PFC反压帧,让DeviceA感知到拥塞,停止发送队列1的流量。

03-PFC死锁预防应用场景
如[图2-12所示的智能无损网络中部署了PFC来避免网络拥塞及丢包。但是在部分故障场景下,PFC可能会引发死锁的问题,导致流量阻塞。
为了避免PFC死锁,可以在网络中部署PFC死锁预防功能,将Leaf上与Spine相连的接口加入到PFC上联端口组中,一旦Leaf设备检测到同一条业务流从属于该端口组的接口内进出,即说明该业务流是一条高风险的业务流(钩子流),通过修改该业务流的队列优先级,从而预防PFC死锁的发生。

04-AI ECN简介
定义
AI ECN(Artificial Intelligence Explicit Congestion Notification)是一种根据现网流量模型智能地调整无损队列的ECN门限的功能,可以保障零丢包下的低时延和高吞吐,让无损业务达到最优性能。
目的
DCQCN(Data Center Quantized Congestion Notification)目前是RDMA网络应用最广泛的拥塞控制算法,DCQCN只需要可以支持ECN功能的网络设备,其他的协议功能在主机的网卡上实现。DCQCN可以在需要零丢包传输的RDMA网络中保证高吞吐,满足无损业务的高要求。
DCQCN提供的拥塞控制机制,是在转发设备上发现队列拥塞后,由转发设备向接收端发送ECN拥塞标记报文。接收端收到ECN报文后,向发送端发送CNP拥塞通知报文,以通知发送端的网卡降低发包速率。
传统的静态ECN功能需要在转发设备上手工配置ECN的高低门限、ECN的标记概率等参数,对于需要无丢包传输的无损业务,无法使ECN门限适应队列中不断变化的缓存空间,在兼顾时延敏感小流和吞吐敏感大流的情况下尽量避免触发PFC流控。
无损队列的AI ECN功能结合了智能算法,可以根据现网流量模型进行AI训练,对网络流量变化进行预测,及时推理最优ECN门限,并且支持根据现网流量变化实时调整ECN门限,进行无损队列缓存的精确管控,保障整网的最优性能。同时,与队列调度技术配合使用时,无损队列的AI ECN功能可以实现网络中TCP流量与RoCEv2流量的混合调度,保障RoCEv2流量的无损传输的同时实现低时延和高吞吐。
05-AI ECN原理描述
背景信息
设备通过缓存门限来度量队列的缓存使用情况。为了实现对无损队列的流量控制,减缓无损队列的缓存拥塞,可以为无损队列设置两种缓存门限——ECN门限和PFC门限。PFC门限是入方向的队列缓存阈值,ECN门限是出方向的队列缓存阈值。实际上,如果出方向一直不拥塞,入方向是很难拥塞的,报文到达后会被马上转发,所以发生拥塞时,可以通过先触发ECN门限通知源端降速,让拥塞缓解,避免过多的触发PFC。
下面以[图2-20]为例,介绍PFC门限和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反压停止报文后,继续发送对应优先级队列的报文。
本章节描述的所有“PFC门限”均指PFC反压帧触发门限,即PFC-XOFF,PFC反压帧停止门限PFC-XON不在本节讨论范围内。取值上,PFC-XON应该小于PFC-XOFF,确保已占用的缓存减少(拥塞已缓解)后再停止反压。
由上面的过程可以看出,从Device发现队列缓存出现拥塞触发ECN标记,到Client感知到网络中存在拥塞降低发包速率,是需要一段时间的。在这段时间内,Client仍然会按照原来的发包速率向Device发送流量,从而导致Device队列缓存拥塞持续恶化,最终触发PFC流控而暂停流量的发送。因此,需要合理设置ECN门限,使得ECN门限和PFC门限之间的缓存空间能够容纳ECN拥塞标记之后到Client降速之前这段时间发送过来的流量,尽可能的避免触发网络PFC流控。
并且网络中同时存在着时延敏感小流和吞吐敏感大流,ECN门限也需要同时兼顾:
- ECN门限设置偏高时,可以延缓触发ECN拥塞标记,保障流量发送的速率和队列内用来吸收突发流量的缓存空间,满足吞吐敏感的大流的流量带宽。但是,在队列拥塞时,报文在缓存空间内排队,会带来较大的队列时延,对时延敏感的小流无益。
- ECN门限设置偏低时,可以尽快触发ECN拥塞标记,通知Client降速,从而使队列内的缓存空间维持在较低的缓存深度,减少报文排队,降低队列时延,对时延敏感的小流有益。但是,过低的ECN门限会影响吞吐敏感的大流,限制了大流的流量带宽,无法满足大流的高吞吐。
静态ECN功能中,其ECN门限值是通过手工配置的,对于需要无丢包传输的无损业务,无法使ECN门限适应队列中不断变化的缓存空间,在兼顾时延敏感小流和吞吐敏感大流的情况下尽量避免触发PFC流控。
AI ECN可以很好的解决上述问题。无损队列的AI ECN功能结合了智能算法,可以根据现网流量模型进行AI训练,对网络流量的变化进行预测,并且可以根据队列长度等流量特征调整ECN门限,进行无损队列缓存的精确管控,保障整网的最优性能。
实现原理
如[图2-21]所示,设备会对现网的流量特征进行采集并上送至AI ECN组件,AI ECN组件将根据嵌入式AI系统的推理结果,智能的为无损队列设置最佳的ECN门限,保障无损队列的低时延和高吞吐,从而让不同流量场景下的无损业务性能都能达到最佳。

- Device设备内的转发组件会对当前流量的特征进行采集,比如队列缓存占用率、带宽吞吐、当前的ECN门限配置等,然后通过Telemetry技术将网络流量实时状态信息推送给AI ECN组件。
- AI ECN功能启用后,将自动订阅嵌入式AI系统的服务。依据嵌入式AI系统,AI ECN组件收到推送的流量状态信息后,将智能的对当前的流量模型进行判断,识别当前的网络流量场景是否是已知场景。
- 如果该流量模型是嵌入式AI系统内已训练的模型,则判断当前网络流量场景为已知场景,AI ECN组件将根据嵌入式AI系统推理的最优结果,计算出与当前网络状态匹配的ECN门限配置,这种模式称为模型推理模式,这种模式采用NN(Neural Network)算法,因此也称为NN模式。
- 如果该流量模型是嵌入式AI系统内未训练的模型,则判断当前网络流量为未知场景,AI ECN组件将结合启发式搜索算法,基于现网状态,在保障高带宽、低时延的前提下,对当前的ECN门限不断进行实时修正,最终计算出最优的ECN门限配置,这种模式称为启发式推理模式,这种模式采用BBR(Bottleneck Bandwidth and RTT)算法,因此也称为BBR模式。
- 最后,AI ECN组件将最优ECN门限下发到设备中,调整无损队列的ECN门限。
- 对于获得的新的流量状态,设备将重复进行上述操作,从而保障无损业务的最佳性能。
06-AI ECN应用场景
如[图2-22]所示的智能无损网络中部署了PFC来避免网络拥塞及丢包。为了让无损业务达到最优性能,可以在网络中部署AI ECN功能,根据流量模型智能地调整无损队列的ECN门限,保障零丢包下的低时延和高吞吐。
图2-22 AI ECN应用组网图

07-智能无损原理之PFC





















华为交换机 配置 PFC 流程命令,










08-智能无损原理之ECN
1-DCQCN 和 ECN


2-iQCN


3-NPCC


4-AI ECN



09-智能无损原理之iNOF









浙公网安备 33010602011771号