Copa: Practical Delay-Based Congestion Control for the Internet论文笔记


Copa论文链接

一、摘要

Copa是一种端到端的拥塞控制算法,采用三个idea组合实现。

  • 通过优化一个效用函数(与吞吐量和延迟相关),求得其最优速率为 1 / δ d q 1/\delta d_q 1/δdq,将其作为target rate;
  • 通过调整拥塞窗口往target rate的方向变化;

这两个idea构成了一个delay-based的CC算法,能够实现高吞吐量低延时的目标。
但是delay-based的CC算法有一个通病,就是——与loss-based的CC算法竞争时,争抢不到带宽。第三个idea:

  • 通过delay的变化,探测是否存在buffer-fillers(使buffer占满的CC算法),以加性增/乘性减的方式调整 δ \delta δ参数。

二、背景

拥塞控制(CC)算法的发展可以分为三个阶段:

  1. 从Reno开始,扩展到Cubic、Compound算法,以丢包、ECN作为拥塞信号;——缺点:这些算法都倾向于填满buffer,即以delay的代价来实现高吞吐量。
  2. 基于delay的CC算法,E.g. Vegas、FAST。这些算法可以带来低延迟;——缺点:由于ACK压缩(SACK)、网络抖动,导致高估延迟,而这些算法又以delay作为拥塞信号,因此链路带宽无法完全利用;另一个缺点:无法与loss-based的CC算法竞争。
  3. 最近的研究多关注特定环境和工作负载下的CC算法,使CC算法变得特异性,而不是普遍性。这些算法在特定场景的效果优于先前具有普遍性的算法。

本文目标:

实现一个高吞吐、低排队延迟、公平分配、简单且易于理解、并且具备普遍性的CC算法,在性能上优于先前的算法。

三、Copa基本思路

Copa定义了一个效用函数:

U = l o g   λ − δ ⋅ l o g   d U=log\ \lambda - \delta \cdot log\ d U=log λδlog d
λ \lambda λ是平均吞吐量; δ \delta δ是衡量delay的权重; d d d是包延迟。

稳态速率是:
λ = 1 δ ⋅ d q \lambda = \frac{1}{\delta \cdot d_q} λ=δdq1
T a r g e t   R a t e Target\ Rate Target Rate拥塞控制策略即使发送速率往 T a r g e t   R a t e Target\ Rate Target Rate靠近。


在只有Copa存在时,使用基于delay的方法是好的;而在有loss-based的流竞争时,降低delay的权重,保证基于delay的算法不会饿死。

在这里插入图片描述
结合各自的优点:
在这里插入图片描述
即可得到:
在这里插入图片描述
即使用第三个idea来应对loss-based算法竞争带宽的问题。

Copa基本的控制思路如上,具体的讨论和细节见下面的章节。

四、Copa在每个ACK到达时的操作

  1. 更新排队延迟 d q d_q dq和srtt——使用标准的TCP指数移动平均估计。
    d q = R T T s t a n d i n g − R T T m i n d_q=RTTstanding-RTTmin dq=RTTstandingRTTmin

  2. 设置target rate
    λ t = 1 / δ ⋅ d q \lambda_t=1/\delta \cdot d_q λt=1/δdq

  3. 如果当前的发送速率 λ = c w n d / R T T s t a n d i n g ≤ λ t \lambda=cwnd/RTTstanding \leq \lambda_t λ=cwnd/RTTstandingλt,则有:
    c w n d = c w n d + v / ( δ ⋅ d q ) cwnd=cwnd+v/(\delta \cdot d_q) cwnd=cwnd+v/(δdq)
    其中, v v v是速率。
    否则:
    c w n d = c w n d − v / ( δ ⋅ d q ) cwnd=cwnd-v/(\delta \cdot d_q) cwnd=cwndv/(δdq)
    即加性增加性减AIAD。
    在这里插入图片描述

  4. 速率 v v v是用来加速收敛的,初始值为1。
    如果当前窗口cwnd大于上一个ACK的数据包发送时的窗口cwnd,则方向 d i r e c t i o n direction direction设置为up;否则,为down。
    如果当前方向与上次一样,则v将double,即 v = 2 ⋅ v v=2\cdot v v=2v。否则,重置v为1。
    值得注意的是,最开始的double v,需要方向持续3个RTT以上。因为,方向在稳态下,可能保持2.5个RTT不变。

在这里插入图片描述
上图为在一个Copa周期内队列延时随时间的变化。

首先为什么平衡的时候,队列长度为 δ − 1 \delta^{-1} δ1个数据包?
当平衡的时候有:
当前速率等于目标速率,即
λ t = 1 / ( δ d q ) = c w n d / R T T s t a n d i n g \lambda_t=1/(\delta d_q)=cwnd/RTT_{standing} λt=1/(δdq)=cwnd/RTTstanding
d q = R T T s t a n d i n g − R T T M i n d_q=RTT_{standing}-RTT_{Min} dq=RTTstandingRTTMin
即有: c w n d ⋅ R T T s t a n d i n g − R T T M i n R T T s t a n d i n g = 1 δ cwnd\cdot \frac{RTT_{standing}-RTT_{Min}}{RTT_{standing}}=\frac{1}{\delta} cwndRTTstandingRTTstandingRTTMin=δ1
即cwnd中在排队的数据包为 δ − 1 \delta^{-1} δ1

对该图的解读:
在Change Point A时,Copa收到ACK,并将当前的发送速率 λ \lambda λ与目标速率 λ t \lambda_t λt对比,这需要1个RTT的反馈延迟。而如果要检测出方向改变,则需要减少cwnd,即在第3 步要实现 λ > λ t \lambda > \lambda_t λ>λt。而 λ = c w n d / R T T s t a n d i n g \lambda = cwnd/RTT_{standing} λ=cwnd/RTTstanding, λ t = 1 / ( δ ⋅ d q ) \lambda_t = 1/(\delta \cdot d_q) λt=1/(δdq),即当 R T T s t a n d i n g RTT_{standing} RTTstanding从稳态开始变大时, d q d_q dq增大, λ t \lambda_t λt减小,即此时 λ > λ t \lambda > \lambda_t λ>λt,cwnd开始减少,direction改变。

五、第三个idea:与Buffer-filler竞争

设置Copa的两种操作模型:

  • 默认模型: δ = 0.5 \delta=0.5 δ=0.5;
  • 竞争模型:动态调整 δ \delta δ

Copa会检测是否有buffer-filler竞争,来决定使用哪个模型。

性质:每5个RTT会排空队列一次。

因此,当Copa检测到接近于空队列的RTT,则使用默认模型;否则,使用竞争模型。
在竞争模型中,使用AIMD的策略调整 δ \delta δ,因此, δ ≤ 0.5 \delta \leq0.5 δ0.5

六、Target Rate的推导

本文将数据包的到达分布建模为泊松分布——在流更多的情况下,更贴近真实情况。

随机到达(泊松分布)带来的一个性质:尽管在链路未完全利用时,也可能形成队列。

Utility函数:
U i = log ⁡ λ i − δ i log ⁡ d s U_{i}=\log \lambda_{i}-\delta_{i} \log d_{s} Ui=logλiδilogds

引理1

Consider a network with n flows, with flow i sending packets with rate λ i \lambda_i λi such that the arrival at the bottleneck queue is Markovian. Then, if flow i has the objective function defined by Eq. (3)(即上面的式子), and the bottleneck is an M/M/1 queue, a unique Nash equilibrium exists.
并且,在均衡时,对于每个发送端 i i i有:
λ i = μ δ i ( δ ^ − 1 + 1 ) \lambda_{i}=\frac{\mu}{\delta_{i}\left(\hat{\delta}^{-1}+1\right)} λi=δi(δ^1+1)μ
其中, δ ^ = ( ∑ 1 / δ i ) − 1 \hat{\delta}=\left(\sum 1 / \delta_{i}\right)^{-1} δ^=(1/δi)1

证明:
定义总到达速率为: λ = ∑ j λ j \lambda = \sum_{j} \lambda_{j} λ=jλj
假设数据包到达模型为排队论中的M/M/1模型,则平均排队之和为 1 μ − λ \frac{1}{\mu-\lambda} μλ1
代入效用函数的式子,有:
U i = log ⁡ λ i + δ i log ⁡ ( μ − λ i − ∑ j ≠ i λ j ) U_{i}=\log \lambda_{i}+\delta_{i} \log \left(\mu-\lambda_{i}-\sum_{j \neq i} \lambda_{j}\right) Ui=logλi+δilogμλij=iλj
令一阶偏导为0,有:
δ i λ i + ∑ j λ j = μ \delta_{i} \lambda_{i}+\sum_{j} \lambda_{j}=\mu δiλi+jλj=μ
二阶导数为:
− 1 / λ i 2 − δ i / ( μ − λ ) 2 < 0 -1 / \lambda_{i}^{2}-\delta_{i} /(\mu-\lambda)^{2}<0 1/λi2δi/(μλ)2<0
则有下式满足:
λ i ( 1 + δ i ) + ∑ j ≠ i λ j = μ \lambda_{i}\left(1+\delta_{i}\right)+\sum_{j \neq i} \lambda_{j}=\mu λi(1+δi)+j=iλj=μ
这是一个n维线性方程组。
求解得到:
λ i = μ δ i ( δ ^ − 1 + 1 ) \lambda_{i}=\frac{\mu}{\delta_{i}\left(\hat{\delta}^{-1}+1\right)} λi=δi(δ^1+1)μ

当服务过程是确定的时,为M/D/1模型,排队时间为: 1 / ( 2 ( μ − λ ) ) − μ / 2 ≈ 1 / ( 2 μ − λ ) 1 /(2(\mu-\lambda))-\mu / 2 \approx1 /(2\mu-\lambda) 1/(2(μλ))μ/21/(2μλ)
此时均衡速率为:
λ i = 2 μ / ( δ i ( 2 δ ^ − 1 + 1 ) ) \lambda_{i}=2 \mu /\left(\delta_{i}\left(2 \hat{\delta}^{-1}+1\right)\right) λi=2μ/(δi(2δ^1+1))
这两个速率的区别只有一个因子2,即将 δ / 2 \delta/2 δ/2

七、Copa的更新规则

在上一段求得的结果,与最终结果还是有点差距。这段将推一下这两个的关系。

  • λ i = μ δ i ( δ ^ − 1 + 1 ) \lambda_{i}=\frac{\mu}{\delta_{i}\left(\hat{\delta}^{-1}+1\right)} λi=δi(δ^1+1)μ
  • λ = 1 δ ⋅ d q \lambda = \frac{1}{\delta \cdot d_q} λ=δdq1

首先,由第一个式子,对i进行累加,有:
λ = ∑ j λ j = μ ⋅ δ ^ − 1 / ( δ ^ − 1 + 1 ) = μ / ( 1 + δ ^ ) \lambda = \sum_{j} \lambda_{j}=\mu \cdot \hat{\delta}^{-1}/(\hat{\delta}^{-1}+1)=\mu /(1+\hat{\delta}) λ=jλj=μδ^1/(δ^1+1)=μ/(1+δ^)

d s = 1 μ − λ d_s=\frac{1}{\mu-\lambda} ds=μλ1,将上式代入,有:
d s = δ ^ − 1 + 1 μ d_s=\frac{\hat{\delta}^{-1}+1}{\mu} ds=μδ^1+1
因此, λ i = 1 δ i ⋅ d s \lambda_{i}=\frac{1}{\delta_{i} \cdot d_s} λi=δids1


同时,处于均衡时的排队队列中的包个数为:
1 + 1 / δ ^ 1+1/\hat{\delta} 1+1/δ^

这可以通过排队时间 d s ⋅ d_s\cdot ds链路速率 μ \mu μ(单位是pkts)得到。
即:
μ μ − λ \frac{\mu}{\mu-\lambda} μλμ

当只有一个用户时,队列包个数为 1 + δ − 1 1+\delta^{-1} 1+δ1,与之前的 δ − 1 \delta^{-1} δ1不同,这是因为后面定义的 d s d_s ds的区别,回忆一下, d s = d q + 1 / μ d_s=d_q+1/\mu ds=dq+1/μ
而在 d s ⋅ μ d_s\cdot \mu dsμ后,就变成了 d q ⋅ μ + 1 d_q\cdot \mu+1 dqμ+1。多出的1就在这。

但为什么要定义 d s d_s ds仍然不懂,这个switch delay是什么情况,有什么物理意义吗?


一个比较有趣的理解:
注意到下面两条公式:
λ i = μ δ i ( δ ^ − 1 + 1 ) \lambda_{i}=\frac{\mu}{\delta_{i}\left(\hat{\delta}^{-1}+1\right)} λi=δi(δ^1+1)μ
λ = ∑ j λ j = μ / ( 1 + δ ^ ) \lambda = \sum_{j} \lambda_{j}=\mu /(1+\hat{\delta}) λ=jλj=μ/(1+δ^)

δ i \delta_i δi都等于 δ \delta δ时,有:
δ ^ − 1 = δ n \hat{\delta}^{-1}=\frac{\delta}{n} δ^1=nδ
λ i = μ / ( n + δ ) \lambda_i=\mu/(n+\delta) λi=μ/(n+δ)
相当于链路速率被分给 n n n个发送端和 δ \delta δ个伪发送端。

八、一点小结果

在这里插入图片描述

Copa在和Cubic竞争时,不损害Cubic的性能,自己也保持高性能,甚至利用了Cubic没用到的带宽。
在这里插入图片描述

一些参考连接:
copaMIT网站
会议视频
原始仓库
复现仓库

  • 7
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值