本文主要是介绍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=x⋅R−xi
这个简单的负反馈能让数据流收住 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=x⋅r−xi
r = ∑ x i C r=\dfrac{\sum x_i}{C} r=C∑xi
结果就如下了:
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<tmodT≤T−1
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=C⋅g(t)⋅x+g(t−ϕ)⋅yg(t)⋅x−x
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=C⋅g(t−ϕ)⋅y+g(t)⋅xg(t−ϕ)⋅y−y
d x i d t = x ⋅ R − x i \dfrac{dx_i}{dt}=x\cdot R-x_i dtdxi=x⋅R−xi
d y i d t = y ⋅ R − y i \dfrac{dy_i}{dt}=y\cdot R-y_i dtdyi=y⋅R−yi
r = x i + y i C r=\dfrac{x_i+y_i}{C} r=Cxi+yi
其中 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 守恒有以下特点:
- 没有锯齿,因此尽量避免了抖动;
- 收敛效率与相位无关;
- 不会比 bbr 收敛慢,周期 probe 版的 bbr 其实也慢,此前我的建模是连续版,所以才快;
- 和 bbr 试图清空所有 queue 不同,我用占据一点点 buffer 换来了更稳定解决 bufferbloat 的效果。
- 想起来再说…
…
从 2018 年开始,我寻找 bbr 的数学模型,从 neal cardwell 处获得很多,他几乎是有求必应。但我依然一度甚至认为 bbr 背后没有数学模型,起初我通过我擅长的笛卡尔几何建模,通过斜率和面积分析,直到最终用微分方程获得了 bbr 的整个描述,可比几何描述简洁优美多了,而且高尚。
但是不能指望经理(特别是那些小经理,小角色大 sb)有能力理解这些,无论是过程还是结果。
浙江温州皮鞋湿,下雨进水不会胖。
这篇关于bbr 微观建模与 inflight 守恒的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!