设 x 为 E = bw / delay 效能,y 为 flow 在瓶颈处的实际分配带宽,r 为时延,inflt 守恒模型的方程组如下:
I ( t ) = ∑ i = 0 n w i ( t ) I(t)=\displaystyle\sum_{i=0}^n w_i(t) I(t)=i=0∑nwi(t)
d x d t = y r − x \dfrac{dx}{dt}=\dfrac{y}{r}-x dtdx=ry−x
d y d t = C ⋅ y ⋅ r I ( t ) − y \dfrac{dy}{dt}=C\cdot\dfrac{y\cdot r}{I(t)}-y dtdy=C⋅I(t)y⋅r−y
r ( t ) = { I ( t ) C , I ( t ) > C ⋅ R R , I ( t ) ≤ C ⋅ R r(t)=\begin{cases} \dfrac{I(t)}{C} ,& I(t)>C\cdot R\\\\R,&I(t)\leq C\cdot R \end{cases} r(t)=⎩ ⎨ ⎧CI(t),R,I(t)>C⋅RI(t)≤C⋅R
r m i n = min i ∈ [ t , t + T r ] r ( i ) r_{min}=\displaystyle\min\limits_{i\in[t,t+T_r]}r(i) rmin=i∈[t,t+Tr]minr(i)
E b e s t = max i ∈ [ t , t + W i n ] x ( i ) E_{best}=\displaystyle\max\limits_{i\in[t,t+Win]}x(i) Ebest=i∈[t,t+Win]maxx(i)
w x = y ( E b e s t . t ) ⋅ r m i n + α ⋅ ( r m i n r ) γ − β ⋅ y ( E b e s t . t ) ⋅ r m i n w_x=y(E_{best}.t)\cdot r_{min}+\alpha\cdot (\dfrac{r_{min}}{r})^\gamma-\beta\cdot y(E_{best}.t)\cdot r_{min} wx=y(Ebest.t)⋅rmin+α⋅(rrmin)γ−β⋅y(Ebest.t)⋅rmin
抽丝剥茧,返璞归真,现在从 aimd 出发导出自然而然的 inflight 守恒算法。将它抽象一下,其实它可以通过经典 aimd 化简。先看经典 aimd,设 x 为带宽,w 为 cwnd,r 为 srtt:
d x d t = C ⋅ w ∑ w i − x \dfrac{dx}{dt}=C\cdot\dfrac{w}{\sum w_i}-x dtdx=C⋅∑wiw−x
w ( t ) = w ( t − 1 ) + I w(t)=w(t-1)+I w(t)=w(t−1)+I$ 或 $ d w d t = I \dfrac{dw}{dt}=I dtdw=I
r = ∑ w i C r=\dfrac{\sum w_i}{C} r=C∑wi
作图如下:
低效的原因在于计算 cwnd = w 时未使用 x,也未使用 r,也就没必要测量 R 了,如果将这些信息充分关联并利用:
d x d t = C ⋅ w ∑ w i − x \dfrac{dx}{dt}=C\cdot\dfrac{w}{\sum w_i}-x dtdx=C⋅∑wiw−x
w ( t ) = x ⋅ r m i n + I r e m a i n w(t)=x\cdot r_{min}+I_{remain} w(t)=x⋅rmin+Iremain$ 或微调版 $ d w d t = x ⋅ r m i n + I r e m a i n − w \dfrac{dw}{dt}=x\cdot r_{min}+I_{remain}-w dtdw=x⋅rmin+Iremain−w
r = ∑ w i C r=\dfrac{\sum w_i}{C} r=C∑wi
其实,r_{min} 就是 R,一个类似 probertt 的机制就能拿到。以上就是 inflt 守恒的要义,相当于对 aimd 打了个派池,效果就变了:
核心思想就是雅各布森的 inflight 守恒理论,控制 inflight 兑换比来控制拥塞。收敛是自然而然的,而 E_best 共识只是一个高效利用资源的优化,旨在不要为了更高的带宽而付出时延的代价。
浙江温州皮鞋湿,下雨进水不会胖。