bbr 微观建模与 inflight 守恒

bbr 解决 bufferbloat 的核心在于一个负反馈方程,设 x 为预估带宽,x_i 为 inflt,则:

d x i d t = x ⋅ R − x i \dfrac{dx_i}{dt}=x\cdot R-x_i dtdxi=xRxi

这个简单的负反馈能让数据流收住 buffer,显然,当其 inflt 大于 bdp 时,方程为负数,直到排空 buffer。如果没有这个方程,带宽该收敛还是会收敛,但 buffer 和 rtt 会发散。我们可以很容易看到这个事实。

将上述方程简单改一下,设 r 为实际 srtt:

d x i d t = x ⋅ r − x i \dfrac{dx_i}{dt}=x\cdot r-x_i dtdxi=xrxi

r = { ∑ x i C , ∑ x i > C ⋅ R   R , ∑ x i ≤ C ⋅ R r=\begin{cases} \dfrac{\sum x_i}{C} ,& \sum x_i>C\cdot R\\\ R,& \sum x_i\leq C\cdot R\end{cases} r= Cxi, R,xi>CRxiCR

结果就如下了:
在这里插入图片描述

bbr 解决了 bufferbloat 问题,但我为什么又提出 inflight 守恒呢,这似乎没有充分的理由。并且 inflight 守恒算法的bdp 余量参数非常难调,哦豁,我还嫌它收敛慢,若要收敛快,buffer 占用就大,参见这一篇: 传输算法的效率和公平

bbr 的问题才是 inflight 算法提出的理由。为更加细致观测 bbr 的微观层面,我对其微观细节进行了重新建模。

在标准 bbr 算法中,probebw 状态由若干 8-round 周期构成,因此 gain 是一个脉冲周期函数,而若干数据流 probebw 周期之间的相位关系决定了其公平收敛的效率,同时也影响了 rtt 抖动。以 2 条流共存为例,新模型如下:

g ( t ) = { 1.25 , t m o d    T = 1 1 , 1 < t m o d    T ≤ T − 1 g(t)=\begin{cases} 1.25 ,& t\mod T=1\\\\1,&1<t\mod T\leq T-1 \end{cases} g(t)= 1.25,1,tmodT=11<tmodTT1

d x d t = C ⋅ g ( t ) ⋅ x g ( t ) ⋅ x + g ( t − ϕ ) ⋅ y − x \dfrac{dx}{dt}=C\cdot \dfrac{g(t)\cdot x}{g(t)\cdot x+g(t-\phi)\cdot y}-x dtdx=Cg(t)x+g(tϕ)yg(t)xx

d y d t = C ⋅ g ( t − ϕ ) ⋅ y g ( t − ϕ ) ⋅ y + g ( t ) ⋅ x − y \dfrac{dy}{dt}=C\cdot \dfrac{g(t-\phi)\cdot y}{g(t-\phi)\cdot y+g(t)\cdot x}-y dtdy=Cg(tϕ)y+g(t)xg(tϕ)yy

d x i d t = x ⋅ R − x i \dfrac{dx_i}{dt}=x\cdot R-x_i dtdxi=xRxi

d y i d t = y ⋅ R − y i \dfrac{dy_i}{dt}=y\cdot R-y_i dtdyi=yRyi

r = { x i + y i C , x i + y i > C ⋅ R   R , x i + y i ≤ C ⋅ R r=\begin{cases} \dfrac{x_i+y_i}{C} ,& x_i+y_i>C\cdot R\\\ R,& x_i+y_i\leq C\cdot R\end{cases} r= Cxi+yi, R,xi+yi>CRxi+yiCR

其中 C,R,T 分别为瓶颈带宽,传播时延,probe 周期,phi 为相位差。

如下是在不同 phi 下的效果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
正如理论分析,相位差为 0 意味着这是一个同步 mimd(multiplicative increase multiplicative decrease) 系统,不会收敛,我就不画相图展示了(有点腻了),仿真也体现了出来这一点,而不同的相位差导致不同的收敛效率。

最极端情况,所有数据流一起 probe,结局是占据 0.25*bdp 的 buffer,可是为什么要有 0.25 这个常量呢?类似的,codel 的提出不也是为了消除 red 的配置压力么,所以,自适应才是选择。

看出问题了么?

人们对 “事件驱动” 情有独钟,好还是坏?和 aimd 相比,大锯齿换成了 bbr 小锯齿而已,我在十几年前就疑问,为什么非要有锯齿,这个问题的探究过程及其漫长,期间我学会了一个词,capacity-seeking,就着这个词,我提出一个没有锯齿的新算法,inflight 守恒。

和 bbr 相比,inflight 守恒有以下特点:

  • 没有锯齿,因此尽量避免了抖动(参见 inflight 守恒解析);
  • 无周期,将 probe 均匀平铺,收敛效率与相位无关;
  • 不会比 bbr 收敛慢,周期 probe 版的 bbr 其实也慢,此前我的建模是连续版,所以才快;
  • 和 bbr 试图清空所有 queue 不同,我用占据一点点 buffer 换来了更稳定解决 bufferbloat 的效果。
  • 想起来再说…

从 2018 年开始,我寻找 bbr 的数学模型,从 neal cardwell 处获得很多,他几乎是有求必应。但我依然一度甚至认为 bbr 背后没有数学模型,起初我通过我擅长的笛卡尔几何建模,通过斜率和面积分析(参见 bbr 的数学解释),直到最终用微分方程获得了 bbr 的整个描述,可比几何描述简洁优美多了,而且高尚。

但是不能指望经理(特别是那些小经理,小角色大 sb)有能力理解这些,无论是过程还是结果。

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

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值