参考资料
Congestion Control for Large-Scale RDMA Deployments
[RoCE]拥塞控制机制(ECN,DC-QCN) - 知乎 (zhihu.com)
背景
基于 PFC 协议,数据中心可以运行接近无损的以太网, 但由于 PFC 协议是端口级别的粗粒度流量暂停,在保证以太网 L2 层无损的同时,频繁的 PFC 触发会带来吞吐量的降低,同时还会导致流级别的拥塞扩散,死锁,PFC暂停帧风暴和行头阻塞等性能问题。为避免PFC 的这些局限性,因此IB协议规定了一套RoCEv2 Congestion Management协议。
RoCEv2 拥塞控制
通过流级别的拥塞控制协议,发送方可以做到根据网络拥塞情况动态调整发送速率,在积极利用网络带宽的同时,也能够减少网络中 PFC 协议的触发。RoCEv2 拥塞控制大致流程为,发送方通过网络中的某些拥塞信号(如 ECN or RTT 等),感知到网络中的拥塞情况;当网络未发生拥塞时,发送方会按照特定算法增加发送速率或发送窗口,以充分利用网络带宽;而当网络拥塞时,发送方会按照特定算法降低发送速率或发送窗口,来缓解网络中拥塞情况。
RoCEv2 网络拥塞控制的目标为:
1)减少流完成时间 ,即保证短流的低延迟传输,保证长流的高吞吐量传输;
2)减少 PFC 协议的触发;
3)防止死锁。
因此需要 RoCEv2 拥塞控制协议能够满足高带宽利用率,公平性,稳定性,快速收敛这四个要求。公平性要求多个流公平共享拥塞链路带宽;高带宽利用率要求拥塞控制协议的部署不能降低链路利用率;快速收敛要求拥塞控制协议能快速响应网络拥塞,减少 PFC 的触发;而稳定性要求在在复杂的流量情况下,拥塞控制的速率调控都能保持稳定。通过减少 FCT 与 PFC 的触发,便能够有效减少由 PFC 导致的路由死锁。
网络拥塞控制框架
如图所示,RoCEv2将 网络拥塞控制框架抽象成 RP(Reaction Point),CP(Congestion Point),NP(Notification Point)三方,分别对应着发送方,交换机,接收方;而 RoCEv2 拥塞控制协议往往部署在其中三方之上,交换机 CP 通过特定协议检测网络拥塞的发生;而接收方 NP 接收到网络拥塞信号后将其捎带在反馈流中,通知发送方网络拥塞的发生;发送方 RP 接收到反馈后,通过特定的算法调整发送速率。
现有 RoCEv2 拥塞控制协议(如 DCQCN,TIMELY,PCN,HPCC 等)在感知网络拥塞后,通过调整发送速率来减少 PFC 协议触发,减轻网络拥塞。
DCQCN拥塞控制算法
DCQCN 采用 ECN 作为拥塞信号,完全符合 RCM 架构,是 RoCEv2 网络中第一个具有较高实用性的拥塞控制协议,已在商用网卡上部署。
CP交换机拥塞检测
CP的ECN检测和标记是现代数据中心商用交换机普遍具有的功能。启用ECN功能后,在网络上出现拥塞后,交换机会对ECN域打上CE值,由接收方(NP)产生CNP来通知发送方网络拥塞事件。发送方(RP)收到CNP指示的事件通知后,根据DC-QCN算法中对当前速度处于快速恢复,积极增加和超积极增加三个阶段中对应的动作来对注入速率进行控制,从而解决网络中的拥塞情况。
ECN(Explicit Congestion Notification)信号,如图所示,通过 IP 头部的 2-bits ECN 字段标记数据包是否拥塞,只有发送端将该字段设置成ECT模块,交换机的拥塞检测算法才会将ECN字段设置为CE。
NP 接收端拥塞通知
接收方上的 NP 算法执行拥塞通知策略,每 N us 检测每个流接收到 RoCEv2 数据包,若其中
包含带有 CE拥塞标记的数据包,则会针对该流生成特殊的 CNP 数据包,其中包含该发送方QP的信息,并以较高的优先级发回给发送方RP,告知其网络中出现了拥塞。
CNP报文格式如下图所示
RP发送端速率控制
并且对于每个流在公平速率计算上,引入拥塞参数𝛼,该参数表示当前网络拥塞程度,其更新
周期为 K,即每 K us 检测是否收到 CNP 数据包,并按照公式(1-1)更新𝛼:
𝛼 = (1 − 𝑔) · 𝛼 + 𝑔 i𝑓 𝑅𝑒𝑐𝑒i𝑣𝑒 𝐶𝑁𝑃
𝛼 = (1 − 𝑔) · 𝛼 i𝑓 𝑁𝑜𝑡 𝑅𝑒𝑐𝑒i𝑣𝑒 𝐶𝑁𝑃 (1-1)
其中𝑔 ∈ (0,1),表示拥塞因子更新权重;若连续收到 CNP 数据包,RP 算法则会不断增加拥塞参数𝛼的值,证明网络拥塞中发生了持续拥塞,需要较大的速率调整幅度,反之亦然。
对于速率减少,DCQCN 每接收到一个 CNP 数据包,则认为该流路径上产生拥塞,参考当前路径的拥塞参数𝛼,按照公式(1-2)减少发送速率,其中𝑅𝑐 表示当前流发送速率,𝑅𝑡 保存上一次降速前的速率,用于速率恢复。
𝑅𝑡 = 𝑅𝑐,
𝑅𝑐 = 𝑅𝑐 · (1 −𝛼/2) , (1-2)
而对于速率增加,DCQCN 引入了一个字节计数器和一个定时器来判断速率增长的增长阶段。 字节计数器每发送 B 字节数据就增加发送速率,而定时器每 T 单位时间就增加发送速率,速率增加阶段根据这两个参数来判断,主要分为快速恢复阶段和加性增加阶段,前者根据公式(1-3)增加快速恢复发送速率。
𝑅𝑐 =(𝑅𝑡 + 𝑅𝑐)/2 (1−3)
后者根据公式(1-4)逐渐探索可用带宽,其中𝑅𝑎i 为固定的加性递增因子。
𝑅𝑡 = 𝑅𝑡 + 𝑅𝑎i
𝑅𝑐 =(𝑅𝑡 + 𝑅𝑐)/2 (1−4)
还存在一个超性递增阶段,其采用动态加性递增因子,速率探索速度更快。