in-flight 要维持在 bdp 附近吗

试图在 bbr 和 aimd 之间保持公平是徒劳的,因为它们没有共识。bbr 认为 in-flight 超过 bdp 是拥塞,而 aimd 认为 buffer 溢出才拥塞,兼顾彼此,就是 bbr3,aimd 不会往左,bbr 就往右。

vegas 同理,vegas 流认为超过 bdp 的报文量大于 β 就拥塞,而 β 并没多大,这让 vegas 更难与 aimd 共存。

但 vegas 还有更有趣的事,每条 vegas 流都试图维持 buffer 中的报文量的下界 α,α 是个很小的数。但 N * α > buffer_size 可与 α > diff 同时成立,buffer 已溢出,vegas 却还试图 cwnd++。 bbr 也存在该问题,虽然 bbr 为单流设置了 in-flight 上界 2 * bdp,但 N * 2 * bdp > buffer_size 和 cwnd < 2 * bdp 亦可同时满足。

无论 bbr 还是 vegas 均采用 rack 丢包探测,值得一提的事,rack 早在 1994 年 vegas 论文中就被提出,只是 linux 没有实现,让人误认为 rack 是晚近才由 google 提出。

我一向抱怨 bbr 状态机太稀碎,但它也没大错,虽然 probe 会挤占 buffer,但 probertt 后 Σbw_i == C && queue_len == 0,却也兑现了承诺,但值得注意,probertt 是同步的,众流在同时进入 probebw 后仅维持自己的 bwi,却释放了所有 buffer,除非 N * 4 - bdp > buffer_size,请注意,如果 vegas 的 β 取 3,N 巨大且总 bdp 不太大时,bbr 更易爆 buffer。

说这个的目的是,虽然 bbr 和 vegas 均承诺把 in-flight 维持在 bdp or bdp 附近,但它们在 N 很大时却没有兑现能力,相反 aimd 就不同,即使 N 很大,md 行为却同步将 in-flight 降到远小于 bdp 处,而 bbr/vegas 没有这类自适应的 decrease 行为。

问题的核心在于,bbr/vegas 测得的 bdp 中的 b 更全局,它们依靠 “越小的流加速比越大” 来公平收敛,而加速比必须在 buffer 中获得(简单等式:buffer 占比 = 带宽占比),反之,aimd 的天然公平性意味着对每条流而言,bdp 中的 b 都是自己的,因为异步流从概率上讲,buffer_size 为 B,一条流在 in-flight 为 B 会丢包 md,N 条流就是 B / N 会丢包 md,自适应性在于除以 N,与 bbr/vegas 的 α * N 和 4 * N 相比如何。

这就是我那个 E_best 余量或 pid 逼近 E_best 试图解决的问题,为了始终在 buffer 中保存一定的报文(借鉴于 vegas)以自适应资源腾挪,又不至于 N * 余量 > buffer_size,那么该余量一定要携带负反馈缩放,N 虽对单流不可见,但可用 minrtt / rtt 间接感知:

  • 对所有流共同作用而言,minrtt / rtt 越小,buffer 被占越多,潜在流数增多,余量必须收缩;
  • 对共存流相互作用而言,bw 越大,侵占倾向越大,越需要为它流腾挪 buffer,余量必须收缩;

minrtt / rtt 实则就是 cwnd 缩放比例,这很容易理解。设瓶颈带宽为 C,当拥塞临界点到达时,Σcwndi/rtti = C,而拥塞控制的目标是将 in-flight 总量收缩到 bdp,即 C * minrtt,因此目标状态应该是 Σcwndi/minrtti = C,而共享 buffer 中 rtt 想等,从 Σcwndi/rtti = C 到 Σcwndi/minrtti = C,需要乘以一个系数 β = 1 / (minrtt/rtt) = rtt / minrtt。

既然 cwnd 如此缩放 in-flight 到 bdp,那任何比较系数都应该如此缩放,包括 vegas 系数,bbr probertt in-flight = 4,以及 E_best in-flight 余量。

如下可对 vegas 的 α,β 行为负反馈缩放。设 g(x) 为与 minrtt / rtt 正相关的参数增益函数,值域在 (0, 1),vegas 则变为 g * α < diff < g * β。同理,对 bbr probertt 状态的 in–flight = 4 亦可做 in–flight = g * 4 来缩放。然而在这种情况下,更细粒度的 cwnd 控量就是必须,当 N 很大,g 接近 0,cwnd 粒度需要切割到等同量级,cwnd += 1 显得过大,cwnd += 0.08 可能更合适。

最后,这篇短文不牵扯 dcn,不要在 dcn 部署基于时延的算法:

  • dcn 时延小,测量精度不足以过滤抖动(g 家 swift 缘由);
  • dcn buffer 小,N 太大更易爆 buffer;
  • dcn 短流多,负反馈难以生效。

浙江温州皮鞋湿,下雨进水不会胖。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值