无损网络实现的几种技术

无损网络实现方式

端口流量控制

以太网PAUSE

下游设备接收能力不够时,会发PAUSE帧给上游设备,上游设备会暂停发送,根据PAUSE帧所携带时间参数计时,超时后再发送数据。以此控制流量速度,避免缓存溢出导致丢包。

PAUSE帧组织普通数据帧,不能阻止MAC控制帧。

PAUSE帧存在的问题:

PUASE帧会暂停链路上的所有流量,对于VIP服务的流量是不能接受的。

PFC

Priority-based Flow Control,基于优先级的流量控制,增强型的PAUSE。

PFC允许一条以太网链路上创建8个虚拟通道,各个通道有自己的优先级。数据包根据VLAN Tag中的User Priority(3 Bits)确定优先级,或者IP头DSCP域确定优先级,进而确定数据包的发送通道。

下游设备的某个虚拟通道的缓存队列超过阈值,则向上游设备发送反压信号STOP。

反压信号携带定时器参数,定时器为0时解除反压。

PFC可以按照虚拟通道进行流量控制,不影响其他通道流量。

在链路中,PFC控制的虚拟通道实现零丢包(无损),而非PFC控制的通道在拥塞时丢弃报文(尽力而为)

PFC存在的问题:

线头阻塞HOLB( head-of-line blocking),当某优先级通道触发PFC,该优先级其他流量也被阻塞住。上游会增加额外阻塞,PFC反压会向上游扩散。

PFC死锁,网络在出现可能的短暂环路时,循环反压导致死锁;网卡故障狂发PFC反压,PFC风暴扩散导致死锁。

死锁的检测,设备在PFC反压后,检测一段时间内该队列一直处于PFC-XOFF(流控)状态,判定为死锁,进行死锁恢复流程。

死锁的恢复,忽略PFC反压,持续发送该队列流量或者丢弃,恢复周期后再次开启PFC正常流控。

死锁的预防, Leaf对钩子流进行识别,并调整其优先级切换到队列。

以上方法并不能彻底解决死锁问题,得通过基于流的拥塞控制,尽量减少PFC的反压。

流的拥塞控制

ECN-显示拥塞通知

网络设备的无损队列出现拥塞,对数据包打上ECN标记(ECN 11),目的服务器收到ECN报文后,向源服务器发送CNP拥塞通知报文,源服务器降低发包速率。

ECN存在问题:

从ECN报文标记到源端收到CNP报文有一定延迟,流量大时仍会出发PFC流控。

ECN门限偏低时,对时延敏感的老鼠流有益,但是限制了大象流的带宽。

ECN门限偏高时,队列深度变大,引起较大的队列时延,对时延敏感的老鼠流无益。

ECN的和PFC的门限设置很难照顾周全,在有Incast的情况下同时满足无丢包、低时延、高吞吐的需求。

DCQCN

DCQCN是WRED和ECN的组合

交换机通过WRED给数据包打ECN标记,并且按照一定门限 不丢包、随机丢包、全丢包。

其中ECN采用入队标记方式。

接收端有一套算法实时出发CNP,源端有一套算法降低发送速率。

DCQCN并没有解决CNP报文延时,大流量导致的PFC流控。

iQCN

为了应对CNP未及时被源端收到的情况,iQCN让转发设备智能识别网络拥塞状况。

根据返回CNP的时间间隔太长,大于网卡降速的间隔,主动补偿CNP报文,让源端及时收到CNP,避免拥塞加剧。

流量调度

动态负载分担

固定特征(Flow)的负载均衡面对大象流和老鼠流无法均衡流量,多路径冲突,Incast常会发生。

如果Flow不选择同一个路径的强制负载均衡,会导致数据包乱序,大量的乱序会制造更大的吞吐量下降(乱序的报文超过终端TCP缓冲区,导致大量重传)。

动态负载分担,把Flow的流量按照突发流进行分割即Flowlet,保证一个Flowlet区间内按照同一路径负载均衡,下一个Flowlet到空闲的其他路径。更精细颗粒度的负载均衡,降低了静态多路径冲突发生的概率。

大小流区分调度

在PFC中每个端口有8个队列,数据包根据优先级进入队列处理。在大流和小流在同一队列时,大象流会影响老鼠流的延时。

在同一队列中增加一个阈值判断流量是大象流还是老鼠流,对识别到的大象流,将其降低到低优先级队列转发,老鼠流保持原队列转发,老鼠流的流完成时间(Flow Completion Time)得以保障。

你可能感兴趣的:(无损网络,HPC,AIGC,运维)