QCN拥塞控制算法

Sigcomm’ 2020论文Annulus在第二环路中使用了QCN拥塞控制算法来对近源端的流进行拥塞控制。论文中没有直接陈述这个算法,而是在参考文献中给出了十页的伪代码 (头皮发麻)
根据自己搜集资料以及伪代码,这里对QCN拥塞控制算法进行总结:

QCN算法

QCN(Quantized Congestion Notification,量化拥塞通知)是一套应用于二层的端到端拥塞通知机制,通过主动反向通知,降低网络中的丢包率和延时,从而提高网络性能。QCN作为数据中心标准的一部分,主要应用于数据中心场景。
很早之前我看过的sigcomm15年的论文DCQCN就是基于QCN进行改进的,所以这两种算法大体上很接近。

Congestion Point

交换机会维持一个这样的公式:
Fb=((QQeq)+ω(QQold))F_b = -((Q-Q_{eq} )+ω*(Q-Q_{old}) )

  • ωω表示一个权重,控制(QQold)(Q-Q_{old})FbF_b中的比重,文中将它设置为2。
  • QQ代表采样时刻瞬时队列。
  • QeqQ_{eq}表示队列期望大小。
  • QoldQ_{old}表示上次采样的队列大小。

所以FbF_{b}用于表示队列是否发生拥塞,大于等于零表示没有发生拥塞,小于零表示发生拥塞。这时CP端会产生一个CNM报文通知发送端Reaction Point进行降速。

Reaction Point

RP端的基本算法是:

  • 收到CNM消息后,根据消息中FbF_{b}来调节发送速率,FbF_{b}越大发送速率降得越低;
  • 当速率降下来之后再逐步提升限速的目标上限,将发送速率恢复到原来的值。

QCN拥塞控制算法

  • CR:当前速率,速率限制器(RL)限制后的当前发送速率
  • TR:目标速率,在收到最后一个CNM消息之前的发送速率,是CR调整的目标速率
  • Rai: 增长常数

速率降低过程公式:
CR=CR(1αFb)CR=CR*(1-α*|F_b|)
其中αα 是一个常量,其取值需要保证 Fb=1/2*|F_b|=1/2 ,因此收到CNM之后速率最多降低到原来速率的一半。

速率增大过程有公式:
CR=1/2(CR+TR)CR=1/2*(CR+TR):快速恢复阶段

TR=TR+RaiTR=TR+R_{ai}
CR=1/2(CR+TR)CR=1/2*(CR+TR):主动增加阶段

参考文献
[1] Rong Pan. [n.d.]. QCN Pseudo Code: Version 2.2. http://www.ieee802.org/1/files/public/docs2008/au-pan-QCN-pseudo-code-ver2-2.pdf.

[2] https://zhuanlan.zhihu.com/p/142838792

[3] http://www.ieee802.org/1/files/public/docs2007/au_prabhakar_qcn_overview_geneva.pdf