【拥塞控制】Copa篇 | 全网最全(一)机制概述

本文深入剖析Copa流量控制算法,包括其机制概述、合理性证明、实验实战检验及作者的归纳与推演。Copa旨在平衡低时延与高吞吐量,通过动态调整拥塞窗口和参数δ,实现快速收敛和公平竞争。文章详细阐述了λ_t、λ、d_q等关键参数的计算,并介绍了如何通过RTT和排队时延来调整发送速率。此外,还提出了针对缓冲挤占型算法的竞争模式,通过侦测网络状态切换模式,确保在网络竞争中获得更好的性能。

篇首语

  • 本篇文章是我发布的首篇博客,有点小激动,如有不当之处欢迎大佬们指正。都说发博客只有一次和无数次,我希望把握好这个契机,从今以后努力学习研究,写出更多有用的资料与大家共享。
  • 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=dtotaldprop
    • dqd_qdq 表示各包排队时延(dq=d−dtransd_q=d-d_{trans}dq=ddtrans
  • δ\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=2RTTstandingcwnd (单位是 pkt per sec)
  • 设置为 λ\lambdaλ 的两倍是为了为 pacing 中的不完美提供容纳空间,如果正好等于λ\lambdaλ 则实际上发送速率会比预期更低。

排队时延

dq=RTTstanding−RTTmin d_q = RTTstanding - RTTmin dq=RTTstandingRTTmin

  • RTTminRTTminRTTmin 是在较长的一段时间周期内的最小的RTT观测量,文中选取的时间周期为10秒
    • 因为这是流启动的时间,并且也是处理路径改变可能导致的路径最小RTT改变的问题的时间。

速度控制机制

默认模式:动态调整拥塞窗口以调节速度

流启动时的慢启动机制,每个 RTT 执行:

  • 每个 RTT 倍增 cwnd 直到 λ≥λt\lambda \geq \lambda_tλλt

虽然 vvv 也允许倍增,但这个常数太小了,因此 Copa 采用显示慢启动以保证 Copa 有一个更大的初始 cwnd

每个 ACK 到达时执行:

  • 更新srttsrttsrtt ,如果是一个时间窗口的结束,则更新dqd_qdqRTTstandingRTTstandingRTTstanding
  • 更新 λ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(RTTmaxRTTmin)
      • RTTmax 指的是前四个RTT测量值中的最大值。这使得 Copa 可以依据当前网络短时的 RTT 振荡差额准确估量“几乎清空”这个概念
    • 采取行动:侦测到对应流,则使 Copa 处于竞争模式,否则使 Copa 处于默认模式。

    作者承认可能因为种种原因出现误判(误判存在或不存在)

竞争方案

  • 调整 δ−1\delta^{-1}δ1 以模拟相应的缓冲挤占型流
    • 论文作者实现的方案是依据丢包情况使用 AIMD 方式调整 δ−1\delta^{-1}δ1
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值