前言
1.为什么会有拥塞?
二、PFC如何实现流控?
锁-toc">三、PFC死锁
四、利用ECN实现端到端拥塞控制
五、ECN交互过程
总结
原文:为什么我们需要RDMA?为何需要无损网络?https://www.sohu.com/a/258041228_100289134
(Priority-based Flow Control,流量控制基于优先级)
前言
RDMA技术:降低数据中心内部网络延迟,提高处理效率。
当前RDMA以太网上的传输协议是RoCEv2,RoCEv2.基于无连接协议UDP与面向连接的协议相比,面向连接的协议TCP协议,UDP协议更快,更占用CPU资源较少,但不同TCP该协议具有滑动窗口、确认响应等机制,以实现可靠的传输。一旦包丢失,依靠上层应用程序进行重新传输将大大降低RDMA传输效率。
所以,突破数据中心大规模分布式系统的网络性能瓶颈,,实现不丢包的关键是解决网络拥塞。
拥塞的原因有很多,以下是数据中心场景中的三个关键和常见原因:
1.收敛比
在设计数据中心网络架构时,从成本和收入两个方面考虑,大多数会采用不对称带宽设计,即上下链路带宽不一致。交换机的收敛比只是总输入带宽除以总输出带宽。
交换机A:下行带宽480G,上行带宽240G,整机收敛比为2:1
交换机B:下行带宽1200G,上行带宽800G,整机收敛比为1.5:1
也就是说,当当当联服务器上行承包总速率超过上行链路总带宽时,出现拥塞。
2.ECMP
目前,数据中心网络多采用Fabric并采用架构ECMP来构建多条等价负载的链路,并HASH选择链路转发很简单,但这个过程并没有考虑所选链路本身是否有拥塞。对于已经产生拥塞的链路,很可能会加剧链路的拥塞。
3.TCP Incast
TCP Incast是Many-to-One(多对一)这种通信模式经常发生在数据中心云化的大趋势下,尤其是那些Scale-Out分布式存储和计算应用包括Hadoop、MapReduce、HDFS等。
例如,当一个Parent Server当向一组节点(服务器集群或存储集群)发出请求时,集群中的节点同时收到请求,几乎同时响应,许多节点同时向机器发出请求(Parent Server)发送TCP数据流产生微突发流,使交换机连接Parent Server出口缓存不足,造成拥塞。

TCP Incast流量模型
正如前面所说,RDMA和TCP不同的是,它需要一个无损的网络。对于普通的微突然流量,交换机Buffer缓冲区可以起到一定的作用,在缓冲区排队等待突发报纸,但由于交换机的增加Buffer容量成本很高,所以它的作用有限。一旦缓冲区排队的报纸太多,仍然会丢包。
,避免在交换机中Buffer数据包丢失是由缓冲区溢出引起的,,避免丢包。
IEEE 802.1Qbb(Priority-based Flow Control,流量控制基于优先级)简称PFC,是流量控制的增强版。
说PFC以前,我们可以先看看IEEE 802.3X(Flow Control)流量控制机制:当接收人无法处理收到的报告时,为防止报告丢弃,接收人需要通知发送人暂时停止发送报告。
如下图所示,端口G0/1和G0/2以1Gbps当速率转发报纸时,端口F拥塞将发生在0/1。为避免报纸丢失,打开端口G0/1和G0/2的Flow Control功能。
端口产生拥塞的打流模型
当F0/1在转发报文出现拥塞时,交换机B会在端口缓冲区中排队报文,当拥塞超过一定阈值时,端口G0/2向G0/1发PAUSE帧,通知G0/1暂停发送报文。
? G0/1接收到PAUSE帧后暂时停止方向G0/2发送报纸。暂停时间长短信息由PAUSE帧携带。交换机A将在此超时范围内等待,或直到收到一个Timeout然后继续发送值为0的控制帧。
IEEE 802.3X该协议存在一个缺点:一旦链路被暂停,发送就不能再发送任何数据包。如果暂停是由一些优先级较低的数据流引起的,则链路上其他更高优先级的数据流也被暂停,这实际上超过了损失。
如下图中的报文分析所示,在基础流控IEEE 802.3X在扩展的基础上,,,。
PFC协议报文结构分析
PFC流控粒度从物理端口细化到8个虚拟通道,分别对应Smart NIC硬件上的8个硬件发送队列(这些队列命名为Traffic Class,分别为TC0,TC1,...,TC7),在RDMA在不同的包装协议下,也有不同的映射方法。
? RoCEv1:
协议是将军RDMA数据段包装在以太网数据段,加上以太网头部,所以属于数据包。为了对其进行分类,只能使用VLAN(IEEE 802.1q)头部中的PCP(Priority Code Point)域3 Bits设置优先级。
二层以太网帧VLAN头部结构
这个协议是,加上UDP加上头IP头,最后加以太网头,属于数据包。它可以用于分类VLAN中的PCP也可以使用域IP头部的DSCP域。
三层IP报文头部结构
简单地说,在的情况下,,。当下数据中心因多采用三层网络,因此使用DSCP比PCP更有优势。
虽然PFC基于队列的流控可以通过向不同的队列映射不同的优先级来实现,但也引入了新的问题,如PFC死锁问题。
PFC死锁是指当多个交换机因微环等原因同时拥堵时,各自的端口缓存消耗超过阈值,等待对方释放资源,导致所有交换机上的数据流永久堵塞的网络状态。
但在特殊情况下,例如发生链路故障或设备故障时,BGP路由重新收敛期间可能会出现短暂环路,会导致出现一个循环的缓冲区依赖。如下图所示,当4台交换机都达到XOFF水线,都同时向对端发送PAUSE帧,这个时候该拓扑中所有交换机都处于停流状态,由于PFC的反压效应,整个网络或部分网络的吞吐量将变为零。
PFC死锁示意图
即使在无环网络中形成短暂环路时,也可能发生死锁。虽然经过修复短暂环路会很快消失,但它们造成的死锁不是暂时的,即便重启服务器中断流量,死锁也不能自动恢复。
为了解除死锁状态,一方面是,另一方面则可以。锐捷RG-S6510-48VS8CQ上的Deadlock检测功能,可以检测到出现Deadlock状态后的一段时间内,忽略收到的PFC帧,同时对buffer中的报文执行转发或丢弃的操作(默认是转发)。
例如,定时器的监控次数可配置设置检测10次,每次10ms内检测是否收到PFC Pause帧。若10次均收到则说明产生Deadlock,对buffer中的报文执行默认操作,之后将设置100ms作为Recover时间后恢复再检测。命令如下:
priority-flow-control deadlock cos-value 5 detect 10 recover 100 //10次检测,100ms recover。
RDMA无损网络中利用PFC流控机制,实现了交换机端口缓存溢出前暂停对端流量,阻止了丢包现象发生,但因为需要一级一级反压,效率较低,所以需要更高效的、端到端的流控能力。
当前的RoCE拥塞控制依赖ECN(Explicit Congestion Notification,显式拥塞通知)来运行。ECN最初在RFC 3168中定义,网络设备会在检测到拥塞时,通过在IP头部嵌入一个拥塞指示器和在TCP头部嵌入一个拥塞确认实现。
(RFC:Request For Comments,缩写为RFC,是由互联网工程任务组(IETF)发布的一系列备忘录。)
RoCEv2标准定义了RoCEv2拥塞管理(RCM)。启用了ECN之后,网络设备一旦检测到RoCEv2流量出现了拥塞,会在数据包的IP头部ECN域进行标记。
IP报文头ECN字段结构
这个拥塞指示器被目的终端节点按照BTH(Base Transport Header,存在于IB数据段中)中的FECN拥塞指示标识来解释意义。换句话说,当被ECN标记过的数据包到达它们原本要到达的目的地时,拥塞通知就会被反馈给源节点,源节点再通过对有问题的Queue Pairs(QP)进行网络数据包的速率限制来回应拥塞通知。
ECN交互过程示意图
① 发送端发送的IP报文标记支持ECN(10);
② 交换机在队列拥塞情况下收到该报文,将ECN字段修改为11并发出,网络中其他交换机将透传;
③ 接收端收到ECN为11的报文发现拥塞,正常处理该报文;
④ 接收端产生拥塞通告,每ms级发送一个CNP(Congestion Notification Packets)报文,ECN字段为01,要求报文不能被网络丢弃。接收端对多个被ECN标记为同一个QP的数据包发送一个单个CNP即可(格式规定见下图);--(即对同一个QP的数据发送同一个CNP即可)
⑤ 交换机收到CNP报文后正常转发该报文;
⑥ 发送端收到ECN标记为01的CNP报文解析后对相应的流(对应启用ECN的QP)应用速率限制算法。
RoCEv2的CNP包格式如下:
CNP报文结构
值得注意的是,CNP作为拥塞控制报文,也会存在延迟和丢包,从发送端到接收端经过的每一跳设备、每一条链路都会有一定的延迟,会最终加大发送端接收到CNP的时间,而与此同时交换机端口下的拥塞也会逐步增多,若发送端不能及时降速,仍然可能造成丢包。建议拥塞通告域的规模不要过大,从而避免因为ECN控制报文交互回路的跳数过多,而影响发送端无法及时降速,造成拥塞。
总结
网络正是在网络中部署。PFC技术让我们可以对链路上RDMA专属队列的流量进行控制,并在交换机入口(Ingress port)出现拥塞时对上游设备流量进行反压。利用ECN技术我们可以实现端到端的拥塞控制,在交换机出口(Egress port)拥塞时,对数据包做ECN标记,并让流量发送端降低发送速率。
从充分发挥网络高性能转发的角度,我们一般建议通过,让ECN快于PFC触发,即网络还是持续全速进行数据转发,让服务器主动降低发包速率。如果还不能解决问题,再通过PFC让上游交换机暂停报文发送,虽然整网吞吐性能降低,但是不会产生丢包。
在数据中心网络中应用RDMA,不仅要解决转发面的无损网络需求,还要关注精细化运维,才能应对延迟和丢包敏感的网络环境