篇首语
- 本篇文章是我发布的首篇博客,有点小激动,如有不当之处欢迎大佬们指正。都说发博客只有一次和无数次,我希望把握好这个契机,从今以后努力学习研究,写出更多有用的资料与大家共享。
- Copa 篇分为四个部分,前三部分为论文分析,分别是机制概述、机制合理性证明、实验实战检验,第四部分则为本人的一些归纳与推演,应该可以说是全网最全的长文了,干货满满,希望大家喜欢!
目标速率
λ t = 1 δ ⋅ d q \lambda_t = \frac{1}{\delta \cdot d_q} λt=δ⋅dq1
由 $ U = log \lambda – \delta log d $ 推出(最大化U)
- λ \lambda λ 表示流的平均吞吐量
- d d d 表示各包时延( d = d t o t a l − d p r o p d = d_{total} – d_{prop} d=dtotal−dprop)
- d q d_q dq 表示各包排队时延( d q = d − d t r a n s d_q=d-d_{trans} dq=d−dtrans)
- δ \delta δ 实际表示愿意牺牲低时延到什么程度以保障高带宽,越高表示越不愿意牺牲时延
注意:
- δ − 1 \delta ^ {-1} δ−1 单位是MTU大小的数据包数量
- λ t \lambda_t λt 是根据一个RTT前发出的包带回的参数计算的 d q d_q dq 来估算得出的,因此具有一个 RTT 的延迟
参数测算机制
每个时间窗口 τ = s r t t / 2 \tau=srtt/2 τ=srtt/2 测算以下参数:
RTT
R T T s t a n d i n g RTTstanding RTTstanding
- 取最小的RTT,作为时间窗口内估计的包对应内含排队时延的RTT值,这样选是为了保障面对 ACK compresion 和 network jitter 时的鲁棒性。
- 因为这些问题会增加 RTT 而让发送端误以为数据传输路径上存在排队导致更长的 RTT;
- 当然,ACK compresion 可由反向路径上的排队和无线链路引起。
- s r t t srtt srtt 是标准平滑RTT估计值,使用标准TCP指数加权移动平均估计量的当前值
每个 ACK 到达时测算以下参数:
发送速率(平均意义上)
λ = c w n d R T T s t a n d i n g \lambda = \frac{cwnd}{RTTstanding} λ=RTTstandingcwnd
- c w n d cwnd cwnd是时间窗口,用以限制 in-flight packets 的数量上限
Copa 使用了 pacing 技术以防止 packet bursts,并且保证瓶颈处包到达呈现泊松分布(流越多越精确)
- r a t e p a c i n g = 2 ⋅ c w n d R T T s t a n d i n g rate_{pacing} = 2 \cdot \frac{cwnd}{RTTstanding} ratepacing=2⋅RTTstandingcwnd (单位是 pkt per sec)
- 设置为 λ \lambda λ 的两倍是为了为 pacing 中的不完美提供容纳空间,如果正好等于 λ \lambda λ 则实际上发送速率会比预期更低。
排队时延
d q = R T T s t a n d i n g − R T T m i n d_q = RTTstanding – RTTmin dq=RTTstanding−RTTmin
- R T T m i n RTTmin RTTmin 是在较长的一段时间周期内的最小的RTT观测量,文中选取的时间周期为10秒
- 因为这是流启动的时间,并且也是处理路径改变可能导致的路径最小RTT改变的问题的时间。
速度控制机制
默认模式:动态调整拥塞窗口以调节速度
流启动时的慢启动机制,每个 RTT 执行:
- 每个 RTT 倍增 cwnd 直到 λ ≥ λ t \lambda \geq \lambda_t λ≥λt
虽然 v v v 也允许倍增,但这个常数太小了,因此 Copa 采用显示慢启动以保证 Copa 有一个更大的初始 cwnd
每个 ACK 到达时执行:
- 更新 s r t t srtt srtt ,如果是一个时间窗口的结束,则更新 d q d_q dq、 R T T s t a n d i n g RTTstanding RTTstanding
- 更新 λ t \lambda_t λt ,计算当前 λ \lambda λ
- c w n d cwnd cwnd 调整方案
- 如果 λ ≤ λ t \lambda \leq \lambda_t λ≤λt ,则 c w n d + = v δ ⋅ c w n d cwnd += \frac{v}{\delta \cdot cwnd} cwnd+=δ⋅cwndv
- 如果 λ > λ t \lambda \gt \lambda_t λ>λt ,则 c w n d − = v δ ⋅ c w n d cwnd -= \frac{v}{\delta \cdot cwnd} cwnd−=δ⋅cwndv
注:经过一个RTT(发送完一个 c w n d cwnd cwnd 的量的数据包) c w n d cwnd cwnd 变化 v δ ⋅ c w n d \frac{v}{\delta \cdot cwnd} δ⋅cwndv
- v & d i r e c t i o n v \& direction v&direction 调整方案( v v v 是速率参数,用以加速收敛,初始为1; d i r e c t i o n direction direction 表征判断窗口变化方向,用以调整 v v v)
- 如果是一个拥塞窗口的结束(即每一个RTT),则判断当前 c w n d cwnd cwnd 大小和上一 c w n d cwnd cwnd 大小,如果增大,则 d i r e c t i o n direction direction 设置为 u p up up ,否则设置为 d o w n down down 。
- 如果 d i r e c t i o n direction direction 保持三个 RTT 不变,则将 v v v 翻一倍,否则重新设置为 1
在稳定状态下保证 v = 1 v = 1 v=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%
d q < 0.1 ⋅ ( R T T m a x − R T T m i n ) 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
今天的文章拥塞控制机制有哪些?_拥塞控制的一般原理「建议收藏」分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/85071.html