篇首语
- 本篇文章是我发布的首篇博客,有点小激动,如有不当之处欢迎大佬们指正。都说发博客只有一次和无数次,我希望把握好这个契机,从今以后努力学习研究,写出更多有用的资料与大家共享。
- Copa 篇分为四个部分,前三部分为论文分析,分别是机制概述、机制合理性证明、实验实战检验,第四部分则为本人的一些归纳与推演,应该可以说是全网最全的长文了,干货满满,希望大家喜欢!
目标速率
λt=1δ⋅dq
\lambda_t = \frac{1}{\delta \cdot d_q}
λt=δ⋅dq1
由 $ U = log \lambda - \delta log d $ 推出(最大化U)
- λ\lambdaλ 表示流的平均吞吐量
- ddd 表示各包时延(d=dtotal−dpropd = d_{total} - d_{prop}d=dtotal−dprop)
- dqd_qdq 表示各包排队时延(dq=d−dtransd_q=d-d_{trans}dq=d−dtrans)
- δ\deltaδ 实际表示愿意牺牲低时延到什么程度以保障高带宽,越高表示越不愿意牺牲时延
注意:
- δ−1\delta ^ {-1}δ−1 单位是MTU大小的数据包数量
- λt\lambda_tλt 是根据一个RTT前发出的包带回的参数计算的 dqd_qdq 来估算得出的,因此具有一个 RTT 的延迟
参数测算机制
每个时间窗口 τ=srtt/2\tau=srtt/2τ=srtt/2 测算以下参数:
RTT
RTTstanding RTTstanding RTTstanding
- 取最小的RTT,作为时间窗口内估计的包对应内含排队时延的RTT值,这样选是为了保障面对 ACK compresion 和 network jitter 时的鲁棒性。
- 因为这些问题会增加 RTT 而让发送端误以为数据传输路径上存在排队导致更长的 RTT;
- 当然,ACK compresion 可由反向路径上的排队和无线链路引起。
- srttsrttsrtt 是标准平滑RTT估计值,使用标准TCP指数加权移动平均估计量的当前值
每个 ACK 到达时测算以下参数:
发送速率(平均意义上)
λ=cwndRTTstanding \lambda = \frac{cwnd}{RTTstanding} λ=RTTstandingcwnd
- cwndcwndcwnd是时间窗口,用以限制 in-flight packets 的数量上限
Copa 使用了 pacing 技术以防止 packet bursts,并且保证瓶颈处包到达呈现泊松分布(流越多越精确)
- ratepacing=2⋅cwndRTTstandingrate_{pacing} = 2 \cdot \frac{cwnd}{RTTstanding}ratepacing=2⋅RTTstandingcwnd (单位是 pkt per sec)
- 设置为 λ\lambdaλ 的两倍是为了为 pacing 中的不完美提供容纳空间,如果正好等于λ\lambdaλ 则实际上发送速率会比预期更低。
排队时延
dq=RTTstanding−RTTmin d_q = RTTstanding - RTTmin dq=RTTstanding−RTTmin
- RTTminRTTminRTTmin 是在较长的一段时间周期内的最小的RTT观测量,文中选取的时间周期为10秒
- 因为这是流启动的时间,并且也是处理路径改变可能导致的路径最小RTT改变的问题的时间。
速度控制机制
默认模式:动态调整拥塞窗口以调节速度
流启动时的慢启动机制,每个 RTT 执行:
- 每个 RTT 倍增 cwnd 直到 λ≥λt\lambda \geq \lambda_tλ≥λt
虽然 vvv 也允许倍增,但这个常数太小了,因此 Copa 采用显示慢启动以保证 Copa 有一个更大的初始 cwnd
每个 ACK 到达时执行:
- 更新srttsrttsrtt ,如果是一个时间窗口的结束,则更新dqd_qdq、RTTstandingRTTstandingRTTstanding
- 更新 λt\lambda_tλt ,计算当前 λ\lambdaλ
- cwndcwndcwnd 调整方案
- 如果 λ≤λt\lambda \leq \lambda_tλ≤λt ,则 cwnd+=vδ⋅cwndcwnd += \frac{v}{\delta \cdot cwnd}cwnd+=δ⋅cwndv
- 如果 λ>λt\lambda \gt \lambda_tλ>λt ,则 cwnd−=vδ⋅cwndcwnd -= \frac{v}{\delta \cdot cwnd}cwnd−=δ⋅cwndv
注:经过一个RTT(发送完一个 cwndcwndcwnd 的量的数据包)cwndcwndcwnd 变化 vδ⋅cwnd\frac{v}{\delta \cdot cwnd}δ⋅cwndv
- v&directionv \& directionv&direction 调整方案(vvv 是速率参数,用以加速收敛,初始为1;directiondirectiondirection 表征判断窗口变化方向,用以调整 vvv)
- 如果是一个拥塞窗口的结束(即每一个RTT),则判断当前cwndcwndcwnd 大小和上一 cwndcwndcwnd 大小,如果增大,则 directiondirectiondirection 设置为 upupup ,否则设置为 downdowndown 。
- 如果 directiondirectiondirection 保持三个 RTT 不变,则将 vvv 翻一倍,否则重新设置为 1
在稳定状态下保证 v=1v = 1v=1 ,而在非稳定状态下加速发送速率收敛
竞争模式:动态调整 δ\deltaδ 以与缓冲挤占型算法竞争
在默认模式下 δ=0.5\delta = 0.5δ=0.5,而竞争模式下 δ≤0.5\delta \leq 0.5δ≤0.5 ,并且动态调整以匹配典型缓冲挤占型算法的烈度
根据 δ\deltaδ 的含义,这实际上是 Copa 在面对缓冲挤占型竞争对手时愿意牺牲低时延以保障高吞吐量。
- Copa 不断侦测缓冲挤占型竞争对手的存在,以控制默认模式和竞争模式的切换
侦测方案(模式转换器)
- 这里利用了 Copa 的一个关键特性——当多条有相近 RTT 的 Copa 流共享一个瓶颈时,队列每5个RTT会清空一次,而与缓冲挤占型队列共存时则队列不会依次规律清空。
- 因此侦测方案的核心在于检测 5RTT 内的队列是否清空
- 判断标准:(第五个RTT)是否存在排队时延低于(前四个RTT)速率振荡值的10%
dq<0.1⋅(RTTmax−RTTmin)d_q \lt 0.1 \cdot (RTTmax - RTTmin)dq<0.1⋅(RTTmax−RTTmin)- RTTmax 指的是前四个RTT测量值中的最大值。这使得 Copa 可以依据当前网络短时的 RTT 振荡差额准确估量“几乎清空”这个概念
- 采取行动:侦测到对应流,则使 Copa 处于竞争模式,否则使 Copa 处于默认模式。
作者承认可能因为种种原因出现误判(误判存在或不存在)
- 判断标准:(第五个RTT)是否存在排队时延低于(前四个RTT)速率振荡值的10%
竞争方案
- 调整 δ−1\delta^{-1}δ−1 以模拟相应的缓冲挤占型流
- 论文作者实现的方案是依据丢包情况使用 AIMD 方式调整 δ−1\delta^{-1}δ−1
本文深入剖析Copa流量控制算法,包括其机制概述、合理性证明、实验实战检验及作者的归纳与推演。Copa旨在平衡低时延与高吞吐量,通过动态调整拥塞窗口和参数δ,实现快速收敛和公平竞争。文章详细阐述了λ_t、λ、d_q等关键参数的计算,并介绍了如何通过RTT和排队时延来调整发送速率。此外,还提出了针对缓冲挤占型算法的竞争模式,通过侦测网络状态切换模式,确保在网络竞争中获得更好的性能。
3612

被折叠的 条评论
为什么被折叠?



