【拥塞控制】Copa篇 | 全网最全(二)机制合理性证明

本文深入探讨了Copa流量控制算法在稳定状态下的行为,特别是其在多条流中的平衡振荡现象。Copa流在目标速率附近做微小振荡,振幅与队列长度相关。在单流情况下,队列长度受特定阈值控制,而在多流情况下,各流同步振荡。平衡速率由多个发送端的时延参数决定,并且队列长度与网络负载成正比。Copa的目标是找到一个平衡点,在保持高吞吐量的同时降低时延,通过振荡机制实现这一目标。文章还讨论了马尔可夫模型在分析速率更新规则和目标速率计算中的应用。

篇首语

  • 由于忙于其他事情,早就写好的这篇拖了这么久,趁着元旦前赶紧发出来不拖了,还有些许不详细之处,之后会找时间补全,欢迎读者纠错。
  • yysy,笔者使用的是 marktext 编辑 md,导致实际 md 文件中有很多空行,每次传上 优快云 都要调好久的格式,有没有啥好办法解决问题呢?

Copa 平衡振荡原理

结果概述

  • 在稳定状态下,Copa 流会在目标速率(也是多条流时的平衡速率)附近做微小振荡。
  • 多条流同步振荡的条件有:
    • 共享同一瓶颈
    • 各流传播时延相近,且相较于排队时延不可忽略
  • 振荡幅度:000 pkt ~ 2.5/δ^2.5/\hat{\delta}2.5/δ^ pkt
    • δ^=(∑i1/δi)−1\hat{\delta} = (\sum_{i}1/\delta_i)^{-1}δ^=(i1/δi)1 ,在默认模式下,由于 δ=0.5\delta = 0.5δ=0.5 ,因而 1/δ^=2n1/\hat{\delta} = 2n1/δ^=2n,其中 nnn 是流的数量。
    • 平衡队列长度:(0+2.5)⋅δ^−1/2=1.25/δ^(0+2.5) \cdot \hat{\delta}^{-1} / 2 = 1.25/\hat{\delta}(0+2.5)δ^1/2=1.25/δ^

确定性(D/D/1)瓶颈队列模型分析:平衡状态性质证明

模型假设

  • 链路速率 μ\muμ 为常数(相较于 RTT 变化很慢)
  • 往返时延(亦 Copa 行为的反馈时延)RTTRTTRTT 为常数
    • RTTmin≈RTTRTTmin \approx RTTRTTminRTT

模型推论

  • 队列长度 q(t)=cwnd(t−RTTmin)−BDPq(t)=cwnd(t-RTTmin)-BDPq(t)=cwnd(tRTTmin)BDP
    • cwnd(t)cwnd(t)cwnd(t)ttt 时的拥塞窗口,由 ACK 所携带信息可知 cwnd(t−RTTmin)cwnd(t-RTTmin)cwnd(tRTTmin)
    • BDPBDPBDP 是带宽时延乘积
  • 发送速率 λ=cwnd/RTT=cwnd/RTTmin\lambda = cwnd/RTT = cwnd/RTTminλ=cwnd/RTT=cwnd/RTTmin

单流情况

单个 Copa 循环:队列随时间的变化
单个 Copa 循环:队列随时间的变化

现象简述
  • 转变点A、B:当由 ACK 携带的 RTTRTTRTT 信息计算出的 RTTstandingRTTstandingRTTstanding 估计得到的队列长度越过 δ^−1\hat{\delta}^{-1}δ^1 的阈值时,Copa 速率变化方向改变。
  • 灰色阴影区域:RTTstandingRTTstandingRTTstanding 是在时间窗口 τ=srrt/2\tau = srrt/2τ=srrt/2 的所有 ACK 中 RTTRTTRTT 的最小值
  • 反馈时延:当前行为的结果会因为数据包的往返时延而延迟一个 RTTRTTRTT 反馈到发送端
  • 变化斜率:±δ^−1\pm\hat{\delta}^{-1}±δ^1RTTRTTRTT
具体分析
  • 在稳定状态下, v=1v=1v=1 ,因此拥塞窗口每 RTTRTTRTT 只变化 1/δ1/\delta1/δ pkt
  • 当流对应的排队状态到达转变点 A 时,由于延迟时延,RTTstandingRTTstandingRTTstanding 的测量值为一个 RTTRTTRTTRTT+srtt/2RTT + srtt/2RTT+srtt/2 前发出的数据包的 RTT 中的最小值,因此实际上是在 1RTT1RTT1RTT 前超过的阈值。转变点 B 同理。
  • 由于窗口是线性变化,因此可由振幅直接计算平均队列长度,为 1.25/δ^−11.25/\hat{\delta}^{-1}1.25/δ^1 ,略高于 /δ^−1/\hat{\delta}^{-1}/δ^1 是由于 RTTstandingRTTstandingRTTstanding 的计算需要 srtt/2srtt/2srtt/2 的时间。
实际实验效果

在这里插入图片描述

  • 单 Copa 流在一条 12 Mbit/s 模拟链路上运行,周期约为 5RTT5RTT5RTT ,振幅约为 555 pkt
  • 由于 cwnd 计算仅根据 RTTstandingRTTstandingRTTstanding 和阈值的比较, Copa 对定时估计 RTTRTTRTT 的机制带来的不规律测量有免疫。

多流情况

  • N 个发送端(不同的 δ\deltaδ)共享同一个瓶颈时,它们会因为一个共同的时延信号同步。因此当它们有相同的传播时延时,它们的目标速率会同时越过目标速率,而与 δ\deltaδ 无关。
    • 由于所有发送端一同增减拥塞窗口,可以认为它们的行为可以看作一个发送端, δ=δ^=(∑i1/δi)−1\delta = \hat{\delta} = (\sum_i1/\delta_i)^{-1}δ=δ^=(i1/δi)1

振荡存在条件

  • 目标速率必须高于或低于发送端至少 1.5RTT1.5RTT1.5RTT
  • 如果两个发送端振荡反向,则会造成排队队列为常值,进而导致错误的模式切换
  • 但是轻微扰动可以致使处于稳定状态的扰动转换(应该是指提前或延后方向改变而打破原有稳态)
  • v=1v=1v=1
模拟实验的验证
  • 哑铃型拓扑,100Mbit/s 瓶颈带宽,20ms 传播时延, 5BDP 缓存,100条流,ns-2。
  • 大多数实验的大多数时候 v=1v=1v=1 ,只在流离平衡速率过远时才变化,即使网络扰动被加入实验。
  • 在某些时候,时延的同步性会减弱,发送端会错误切换到竞争模式:
    • 传播时延远小于排队时延
    • 不同发送端传播时延差别较大

Copa 平衡有什么特点?

  • 稳态速率为 λ\lambdaλ 的流,其排队时延中位数为 RTTstanding−RTTmin=1/(λδ)RTTstanding - RTTmin = 1/(\lambda\delta)RTTstandingRTTmin=1/(λδ) ,因为稳态速率与稳态队列中位数(平均数)相关。
  • 如果 RTTstandingRTTstandingRTTstanding 中位数更低,Copa 增速相较于降速会更频繁,中位数更高反之。

    忽略了 λ\lambdaλ 的振荡因为这相对于 RTTstandingRTTstandingRTTstanding 振荡更小

  • 这实际上意味着 Copa 可以达到可量化的速率+时延,最终的平衡速率和平衡时延是一一对应的(λt\lambda_tλtdqd_qdq 计算出)

为何渐进变化达到平衡?

  • 如果采取直接将当前速率设为目标速率的方案,实验证明系统仅在几个条件下收敛。否则将产生摇摆导致对网络的严重不充分利用。

为何要振荡而非相对平静?

  • 收敛到一个常数速率和非零排队时延的状态对基于实验的拥塞控制器来说并非理想状态。
  • 如果队列从不清空,则后发流将高估最低 RTT ,进而高估排队时延,并最终导致显著不公平性。
    • 因此需要渐进达到平衡,并在平衡附近轻微振荡以经常清空队列。

为何采用 AIAD 机制而非 AIMD?

  • Copa 的目标函数希望保持较小队列。
    • 稍高于平衡时 MD 会导致网络严重不充分利用。
    • 稍低于平衡时 MI 会导致巨大的队列长度。
  • 有速度参数 vvv 加持的 AIAD 机制也快速收敛。

马尔可夫(M/M/1 & M/D/1)瓶颈队列模型分析:目标速率证明

  • 泊松分布式随机包到达条件下的一个关键特性是即使瓶颈链路未被充分利用,仍然有队列。
  • 非泊松分布式到达的流可能相互关联,因此 Copa 会高估网络负载而化悲愤时延估计地更高。

目标速率与纳什平衡证明

  • Ui=logλi−δilogdsU_i = log \lambda_i - \delta_i log d_sUi=logλiδilogds 是发送端结合吞吐量和时延的目标函数
    • ds=dq+1/μ=dtotal−dpropd_s = d_q + 1/\mu = d_{total} - d_{prop}ds=dq+1/μ=dtotaldprop 是交换时延(忽略节点处理时延),该时延几乎等于排队时延。
  • 每个发送端都试图将目标函数最大化,在该模型下系统将达到纳什平衡,此时没一个发送端能够通过单方面改变速率增加目标函数。
    ∀i,x≥0,Ui(λ1,...,λi,...,λn)>Ui(λ1,...,λi−1,x,λi+1,...,λn) \forall i,x\geq 0, U_i(\lambda_1,...,\lambda_i,...,\lambda_n) \gt U_i(\lambda_1,...,\lambda_{i-1},x,\lambda_{i+1},...,\lambda_n) i,x0,Ui(λ1,...,λi,...,λn)>Ui(λ1,...,λi1,x,λi+1,...,λn)
为什么假设马尔可夫包到达模型?
  • 论文作者假设马尔可夫分布式到达&服务模型来研究速率更新规则。选择确定性服务模型也能得到相似结果,只是系数乘上2而偏移。
  • 大体上,发送端发送速率不是在一个确定的平均速率上,而是在一种马尔可夫的形式下。但是实际上,并非如此:
    • 发送端的传输总会有自然的抖动;
    • 只有少量发送端的情况下,故意的抖动会增加不必要的时延;
    • Copa 的行为对这个假设不敏感。
其他模型说明
  • 采用该模型并不是因为其精确,而是因为它是现实情况的简单且易处理的估计。
  • 论文作者的目的是推导出一个原理性强的目标速率,并将它作为整个模型的稳定基础以引导速率更新规则。

平衡速率理论与证明

M/M/1 模型理论简述

存在 n 条流,各流数据包依马尔可夫模式到达瓶颈队列,且服务过程也是马尔可夫式的,且有上文中的目标函数,瓶颈为 M/M/1 队列,那么存在独一无二的纳什平衡。
λi=μδi(δ^−1+1) \lambda_i = \frac{\mu}{\delta_i(\hat{\delta}^{-1}+1)} λi=δi(δ^1+1)μ
其中 δ^=(∑i/δi)−1\hat{\delta}=(\sum_i/\delta_i)^{-1}δ^=i/δi1

证明
  • 记法:
    • 队列总达到速率 λ=∑jλj\lambda = \sum_j\lambda_jλ=jλj
    • 链路速率 μ\muμ
  • 前提结论:
    • 在 M/M/1 队列中,在队列和链路中的平均等待时间为 1μ−λ\frac{1}{\mu-\lambda}μλ1
  • 目标函数(效用方程):
    Ui=logλi+δilog(μ−λi−∑j≠iλj) U_i = log \lambda_i + \delta_i log (\mu - \lambda_i - \sum_{j \neq i}\lambda_j) Ui=logλi+δilog(μλij=iλj)
    • 令一阶导数 ∂Ui∂λi\frac{\partial U_i}{\partial \lambda_i}λiUi 为 0,则 δiλi+λ=μ\delta_i\lambda_i + \lambda = \muδiλi+λ=μ
    • 二阶导数 d2Uidλi2=−1λi2−δi(μ−λ)2\frac{d^2 U_i}{d \lambda_i ^2} = -\frac{1}{\lambda_i^2} - \frac{\delta_i}{(\mu - \lambda) ^ 2}dλi2d2Ui=λi21(μλ)2δi 小于0,因此当且仅当每条流的目标函数一阶导数为0,可以达到纳什平衡。
  • 单发送端发送速率:
    λi=μδi(δ^−1+1) \lambda_i =\frac{\mu}{\delta_i(\hat{\delta}^{-1}+1)} λi=δi(δ^1+1)μ
    • 将一阶导数形式转换为 λi=μ−λδi\lambda_i = \frac{\mu-\lambda}{\delta_i}λi=δiμλ
    • 计算 λ=∑iλi\lambda = \sum_i \lambda_iλ=iλiλ=(μ−λ)∑i(1/δi)\lambda = (\mu - \lambda) \sum_i (1/\delta_i)λ=(μλ)i(1/δi)
    • 化简得(注意此处 δ^\hat{\delta}δ^ 项不含 −1-11 次方)
      λ=μδ^+1 \lambda = \frac{\mu}{\hat{\delta}+1} λ=δ^+1μ
    • 带入得 λi=μδi(δ^−1+1)\lambda_i =\frac{\mu}{\delta_i(\hat{\delta}^{-1}+1)}λi=δi(δ^1+1)μ
M/D/1 模型的类比推理(本部分仅作对比,其他部分的结论仍然使用 M/M/1 的模型)
  • 相较于 M/M/1,服务过程假设为确定性的
  • 在队列的等待时间为 12(μ−λ)−μ2≈12(μ−λ)\frac{1}{2(\mu - \lambda)} - \frac{\mu}{2} \approx \frac{1}{2(\mu - \lambda)}2(μλ)12μ2(μλ)1
  • 平衡速率为 λi=2μδi(2δ^−1+1)=μ0.5δi((∑1/0.5δi)−1+1)\lambda_i = \frac{2\mu}{\delta_i(2\hat{\delta}^{-1} + 1)} = \frac{\mu}{0.5\delta_i((\sum 1/0.5\delta_i)^{-1} + 1)}λi=δi(2δ^1+1)2μ=0.5δi((1/0.5δi)1+1)μ ,相当于M/M/1 模型下所有 δi\delta_iδi 减半的情况。
    • 因为不确定性减少,发送端可以在相同时延下达到更高带宽。

目标速率机制的基础与启发:平衡时包间发送间隔时间

  • 在平衡状态下,包间发送间隔时间(也可以理解为数据包的平均传输时延) Δt\Delta tΔt 有如下等式:
    Δt=1λi=δi(δ^−1+1)μ \Delta t = \frac{1}{\lambda_i} = \frac{\delta_i(\hat{\delta}^{-1} + 1)}{\mu} Δt=λi1=μδi(δ^1+1)

    为了与 RTTstandingRTTstandingRTTstanding 中的 τ\tauτ 区别开来,这里不使用论文原符号 τ\tauτ

  • 但是式子是理论上的,实际上由于马尔可夫模式,各发送端无需知道有多少其他发送端存在,也无需知道它们各自 δi\delta_iδi 的情况。
    • δ^−1+1\hat{\delta}^{-1} + 1δ^1+1 代表其他有效发送端的数量,或者等效于网络负载,可以(在不摸清其他发送端的情况下)以其他方式计算。
    • 由之前已知的结论可以得到其他计算方法:
      • λ=μδ^+1\lambda = \frac{\mu}{\hat{\delta}+1}λ=δ^+1μ 代入 ds=1μ−λd_s = \frac{1}{\mu-\lambda}ds=μλ1ds=δ^−1+1μd_s = \frac{\hat{\delta}^{-1} + 1}{\mu}ds=μδ^1+1
      • 代入式子: Δt=δids\Delta t = \delta_i d_sΔt=δids
      • ds=dq+1/μd_s = d_q + 1/\muds=dq+1/μ 代入上式得
        Δt=δi(dq+1/μ) \Delta t = \delta_i (d_q + 1/\mu) Δt=δi(dq+1/μ)
  • 这个机理并未对 Copa 的动态性进行建模,未展现出发送端的速率随时间的变化。这些分析实际的目的是为了确定一个好的目标速率。尽管如此,使用稳定状态的公式用作预计的排队时延是可以接受的,因为稳定状态下速率变化很慢。

平衡的性质

  • 由于所有发送端的聚合速率为 λ=μδ^+1\lambda = \frac{\mu}{\hat{\delta}+1}λ=δ^+1μ ,这也意味着平衡排队时延是 1+1/δ^1+1/\hat{\delta}1+1/δ^ ,如果 ∀i,δi=0.5\forall i, \delta_i = 0.5i,δi=0.5nnn 条流的队列中数据包数量是 2n+12n + 12n+1
  • 如果 ∀i,δi=δ\forall i,\delta_i = \deltai,δi=δ ,那么 λi=μδ+n\lambda_i = \frac{\mu}{\delta + n}λi=δ+nμ ,这等效于将网络带宽切分为 n+δn + \deltan+δ 份给 nnn 个发送端和 δ\deltaδ (可能非整数)个虚拟发送端,δ\deltaδ 是一道屏障防止完全占满瓶颈链路,以防止平均排队时延无止境地膨胀到 ∞\infty
    • 分给虚拟发送端的带宽是没有被使用的,并决定了平均排队长度(发送端可以通过选择 δ∈(0,+∞)\delta \in (0,+\infty)δ(0,+) 来调节)。
    • 聚合速率 λ=nλi=nμδ+n\lambda = n\lambda_i = \frac{n\mu}{\delta+n}λ=nλi=δ+nnμ ,因此以常数 δ\deltaδ 为参数的单发送端等效于以常数 kδk\deltakδ 为参数的 kkk 个发送端。
    • δi\delta_iδi 并不相等时,带宽依据 δ\deltaδ 的反比例进行分配。
  • 论文选定 δi=0.5\delta_i = 0.5δi=0.5 作为默认值。 Copa 的目的是取得高吞吐的同时取得低时延,因此应当选择尽可能大的 δ\deltaδ 同时保证高吞吐量。
    • δ=1\delta = 1δ=1 会造成平衡时队列中仅有一个数据包。但是网络抖动会导致数据包的不完美 pace,这在仅有单流占据瓶颈时(这在实验中时常见情况)导致经常性的空队列,并且浪费传输时隙。
    • 因此本文作者选择 δ=1/2\delta = 1/2δ=1/2 ,为数据包 pace 留出动态余量。
      • 在 M/M/1 排队模型下,当只有少量(≤5\leq 55)发送端时,链路会严重不充分利用,且队列不呈泊松分布,并且随机的变化并不会造成队列长度的增加。因此在实际情况中,队列增长前,链路的利用率是 100%。
  • 平衡点的定义与更新规则(中的目标)的定义是一致的,即各发送端的传输速率等于各自的目标速率当且仅当系统处于纳什平衡。
    • 该分析提出了一种发送端互相合作的机制(如此翻译更好):
      • 各发送端观测一个相同的时延 dsd_sds 并i企鹅计算一个共同的 δds\delta d_sδds (当 δi\delta_iδi 相同时),或者各自的 δids\delta_i d_sδids (并由此计算各自的 λt=(δds)−1\lambda_t = (\delta d_s)^{-1}λt=(δds)1)。超过该值的发送端降低其速度,而低于的则增加速率,这将使得所有发送端受益。
        是 100%。
  • 平衡点的定义与更新规则(中的目标)的定义是一致的,即各发送端的传输速率等于各自的目标速率当且仅当系统处于纳什平衡。
    • 该分析提出了一种发送端互相合作的机制(如此翻译更好):
      • 各发送端观测一个相同的时延 dsd_sds 并i企鹅计算一个共同的 δds\delta d_sδds (当 δi\delta_iδi 相同时),或者各自的 δids\delta_i d_sδids (并由此计算各自的 λt=(δds)−1\lambda_t = (\delta d_s)^{-1}λt=(δds)1)。超过该值的发送端降低其速度,而低于的则增加速率,这将使得所有发送端受益。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值