Sigcomm’ 2020论文Annulus在第二环路中使用了QCN拥塞控制算法来对近源端的流进行拥塞控制。论文中没有直接陈述这个算法,而是在参考文献中给出了十页的伪代码 (头皮发麻)。
根据自己搜集资料以及伪代码,这里对QCN拥塞控制算法进行总结:
QCN算法
QCN(Quantized Congestion Notification,量化拥塞通知)是一套应用于二层的端到端拥塞通知机制,通过主动反向通知,降低网络中的丢包率和延时,从而提高网络性能。QCN作为数据中心标准的一部分,主要应用于数据中心场景。
很早之前我看过的sigcomm15年的论文DCQCN就是基于QCN进行改进的,所以这两种算法大体上很接近。
Congestion Point
交换机会维持一个这样的公式:
F
b
=
−
(
(
Q
−
Q
e
q
)
+
ω
∗
(
Q
−
Q
o
l
d
)
)
F_b = -((Q-Q_{eq} )+ω*(Q-Q_{old}) )
Fb=−((Q−Qeq)+ω∗(Q−Qold))
- ω ω ω表示一个权重,控制 ( Q − Q o l d ) (Q-Q_{old}) (Q−Qold)在 F b F_b Fb中的比重,文中将它设置为2。
- Q Q Q代表采样时刻瞬时队列。
- Q e q Q_{eq} Qeq表示队列期望大小。
- Q o l d Q_{old} Qold表示上次采样的队列大小。
所以 F b F_{b} Fb用于表示队列是否发生拥塞,大于等于零表示没有发生拥塞,小于零表示发生拥塞。这时CP端会产生一个CNM报文通知发送端Reaction Point进行降速。
Reaction Point
RP端的基本算法是:
- 收到CNM消息后,根据消息中 F b F_{b} Fb来调节发送速率, F b F_{b} Fb越大发送速率降得越低;
- 当速率降下来之后再逐步提升限速的目标上限,将发送速率恢复到原来的值。
- CR:当前速率,速率限制器(RL)限制后的当前发送速率
- TR:目标速率,在收到最后一个CNM消息之前的发送速率,是CR调整的目标速率
- Rai: 增长常数
速率降低过程公式:
C
R
=
C
R
∗
(
1
−
α
∗
∣
F
b
∣
)
CR=CR*(1-α*|F_b|)
CR=CR∗(1−α∗∣Fb∣)
其中
α
α
α 是一个常量,其取值需要保证
∗
∣
F
b
∣
=
1
/
2
*|F_b|=1/2
∗∣Fb∣=1/2 ,因此收到CNM之后速率最多降低到原来速率的一半。
速率增大过程有公式:
C
R
=
1
/
2
∗
(
C
R
+
T
R
)
CR=1/2*(CR+TR)
CR=1/2∗(CR+TR):快速恢复阶段
T
R
=
T
R
+
R
a
i
TR=TR+R_{ai}
TR=TR+Rai
C
R
=
1
/
2
∗
(
C
R
+
T
R
)
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