更合理的 BBR

BBR 倾向于排空队列,甚至用特殊的 ProbeRTT 状态来排空自己产生的队列以测量 RTT,但这并不现实。一言以蔽之,BBR 无法实时跟踪现状,只靠拢理想。

若因背景流量造成 buffer 抖动,BBR 完全无法应对,其运行状态甚至非常糟糕。本文提一个自己的想法。用一个值而不是两个值逼近最优的收益成本比,而不是逼近 bltBW 和 RTprop。

BBR 给出了最佳效能操作点,在上周的文章中我导出了 E/inflt 曲线:
在这里插入图片描述
深入 E/inflt 曲线,我发现它比 maxB 和 minD 的乘积 BDP 更适合作不动点,理由如下:

  • 队列虽并非自己所为,但始终存在。需求是收敛到 “最大的吞吐” 和 “最小的延时”,而不是排空排队。
  • 端到端难控制全链路的 pacing rate,用 inflight 作控制更合适,pacing rate 只需大致吻合或取定值。

统计复用系统中,统计度量比精确控制更具实际意义,我经常质疑 BBR 参数取值的精确数学推导,相反,我赞成取经验值更合适。

端到端拥塞控制像足球一样不确定,没有谁且没有什么技术能保证一场比赛可以百分百进几个球,不确定性是足球观赏性之根,但即使这样还是有公认的强队,赢的就是统计概率。

我有一个新方法应对实际而非理想场景,其它流量排队的场景,BBR 依然可收敛到最佳操作点,正所谓要顺势而为。

考虑以下左图多流场景下的 E/inflt 拉弗曲线,增加流数量维度,得到以下右图:
在这里插入图片描述
我用右下的两个小图解释了右上那个 “山脊” 的形状,山脊 “高度” 落差拟合双曲线,其投影在 “水平” 方向也拟合双曲线。

双曲线很容易理解,E = B/D,若 2 流共享带宽,全局最佳效能依然是不排队,E = 1/2B/D + 1/2B/D,若 3 流,每条流的 B 则为 1/3,以此类推,1/4,1/5,即 y = 1/N,为双曲线,同理,每条流达到最佳 E 的 inflt 亦为 1/N 的关系,为双曲线。

自然界很少见这形态的物件儿,我用拟合了一个曲面,随便看看:

z = − y ( x − 1 y ) 2 + 1 y z=−y(x−\dfrac{1}{y})2+\dfrac{1}{y} z=y(xy1)2+y1

在这里插入图片描述
换个角度:
在这里插入图片描述

BBR 的整个运行过程应是 “通过调整 x, 在 ‘等 y 线’ 上不断爬到山脊“:
在这里插入图片描述
于是,YaBBR 算法即:

  • 第 1 步,增加 cwnd,测量 E = B/D,直到由增到减的转变,找到 “顶点”。
  • E = B/D 减小,减小 cwnd,测量 E = B/D 直到开始增加,重复 1。
  • E = B/D 增大,重复 1。

至于公平性,与标准 BBR 无异,可通过类似 ProbeRTT 的主动排空过程收敛到公平,也可以 ProbeBW 中挤占吞吐与加速比的负相关关系收敛到公平。二者效果一致,一个排空,一个探测,方向不同而已。

BBR 直到 v2 仍是基于理想模型修补,很难适应现实场景。几乎不可能不产生队列,一旦产生队列,Startup 退出条件基本就是奢望,只要 buffer 不满,吞吐总是能挤兑出来,这非常不利于公平性,而一旦 buffer 溢出,一切又为时已晚。BBR 的最大带宽假设本就不成立,最小 RTT 也几乎很难算数。况且 10secs 的最小 RTT 保质期完全不能保证。总之,BBR 假设一个理想环境,且独享带宽,方可实现,其它的都是后来加进去的。因此,需要一个新的思路,寻找一个新的不动点作为 BBR 的操作点。本文简单描述一个思路,称为 YaBBR

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

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值