bbr 的全局同步

很明显,bbr 的 probertt 状态向全局同步收敛,即每条流在同一时刻进入 probertt 状态,这是因为一旦有某条足够重量级的流进入 probertt 清空 inflight(保留 4),其它所有流都会在同一时间获得 minrtt,而 probertt 固定每 10s 一次,这就是 inflight-time 图中大家统一向下的那个小尖尖的成因。

probertt 的全局同步危害肉眼可见,它会引发集体卡顿,特别是长程依赖流量还会引发连锁反应,至今没有任何修正,民间修正方案也不难想到,随机化 probertt interval 即可。

事实上(作者告诉我的),bbr 的 probebw 状态最初也存在全局同步。在 bbr 迭代过程中,最初确实有用 packet-timed round 而不是 minrtt 来度量 probebw 的 cycle phase,直到意识到多条流会进入全局同步状态后,才改用 minrtt。

多流场景的 buffer 挤占动力学的 rtt 影响, 如下图所示:
在这里插入图片描述

probebw 全局同步危害很大,它彻底把 bbr 引入 mimd 的深渊,大家一起等比例 probebw,一起等比例 drain,永远无法收敛到公平,而 bbr 收敛很大程度上依赖在异步流共享链路,小流收敛比更大这个事实。

此前强调过,若不是 bbr 的 probertt 状态,共享链路瓶颈处的 queue 将越来越长,如上图也能看出,packet-timed round 越来越长,原因是 probeup phase 之后,确实靠挤占获得了新的 bw,因此接下来的 drain phase 注定 drain 不干净,这个说腻了,不说了。

以下是改用 minrtt 度量 probebw cycle phase 后的示意图:
在这里插入图片描述

然而,现网实践表明,probebw 仍然会进入同步,这也不难解释,因为 bbr 天真地假设共享链路的流也共享 minrtt,如果某条流的 minrtt 本身在链路其它部分被影响,拉伸或压缩,那么 bbr 使用 minrtt + random initial cycle phase 避免 probebw 全局同步的做法就不再可靠。

为什么这么麻烦?

注意到胶着的点,probertt 必不可少,可它的时机却不好把控,probebw 全局同步依靠 minrtt 错开 cycle phase 来避免,而 minrtt 的稳定性又不好把控,总之还是那套老话,bbr 的 maxbw,minrtt 不可同时测得,正是它们间不可弥合的 gap 引发了如此多不可控的可能性,再怎么折腾也无济于事。

再说一遍,要去跟踪 E_best = max(bw / srtt)。很少有人理解这个,就像跑步中的现象一样,正确的做法是追求 E_best = max(舒适速度 / 时间),而不是去追求配速,单纯追求配速容易跑崩,单纯追求舒适容易跑停。人们一直都很理解 “速度量纲与时间量纲的乘积”,但在控制论之外,几乎很少有人关注它们的商。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值