昨天整理了一篇 bbr 的微分方程組建模(參見 bbr 建模),算是 bbr 算法終極意義上的一個總結,最后也順帶了對 aimd 的描述,算是我最近比較滿意的一篇分享了。那么接下來的問題,脫離出具體算法,上升到宏觀層面,擁塞控制的本質是什么。
擁塞控制的本質就是對有效資源的自適應,這里的有效資源包括帶寬但不包括 buffer。這個自適應分為兩個層面,在局部意義上,要對時延負反饋做適應,在全局意義上,要做公平收斂,要說本質,就是以上這些。
用微分方程描述擁塞控制非常直觀,因為它本身就是描述變化的,而擁塞控制就是要對變化做響應,變化主要指全局流量的波動,有流量加入,就出讓一些資源,有流量退出,就搶占一些資源,出讓多少,搶占多少,不光看能力,還要看全局,所有這一切都非常容易用微分方程描述。擁塞控制更多的意義在于適應多流,單流還不容易嗎,傳統 slow start or bbr startup 就夠了。
我們看迄今為止具有代表性的 3 類擁塞控制算法,基于丟包的 reno/cubic,基于時延的 vegas,基于 bdp 模型的 bbr,它們無外乎都在描述 cwnd/pacing rate 的變化。
雖然 reno/cubic 的 aimd 依賴外部事件(丟包)而顯得不連續,但它依然可以用連續的方程描述,只需要把丟包事件等價到丟包率即可:
d W d t = ( 1 ? p ) ? a W ? p ? b ? W \dfrac{dW}{dt}=(1-p)*\dfrac{a}{W}-p*b*W dtdW?=(1?p)?Wa??p?b?W
而對于 vegas,只需要盯緊時延變化,下面是我給出的一個模型,簡陋,但能說明問題。設 x(t) 為發送速率,y(t) 為期望 rtt,z(t) 為實際測量 rtt,w(t) 為 cwnd,則 vegas 的行為可由下列一組方程描述:
z ( t ) = 實際實時采樣 z(t)=實際實時采樣 z(t)=實際實時采樣
d x d t = k 1 ( z ? y ) \dfrac{dx}{dt}=k_1(z-y) dtdx?=k1?(z?y)
d y d t = k 2 ( y ? z ) \dfrac{dy}{dt}=k_2(y-z) dtdy?=k2?(y?z) 【實則移動指數平均】
d w d t = x ? z \dfrac{dw}{dt}=x\cdot z dtdw?=x?z
我用 sin 函數模擬采樣波動,數值解法代碼如下:
x = np.zeros_like(times)
y = np.zeros_like(times)
z = np.zeros_like(times)
w = np.zeros_like(times)x[0], y[0], z[0] = x0, y0, z0
t = np.arange(0.0, T, 0.1)
for n in range(1, len(times)):x[n] = x[n-1] + dt * (-k1*(z[n-1] - y[n-1]))y[n] = y[n-1] + dt * (-k3*(y[n-1] - z[n-1]))z[n] = 1 + 1*np.sin(2 * np.pi * t[n-1])w[n] = x[n]*z[n]
它長下面的樣子:
可觀察到這些量之間的關系,就是負反饋,阻止 rtt 變化,此消彼長。
資源限定場景,參與者多則收,參與者少則放,裝進一個瓶子,晃一段時間就不再擁擠,這就是擁塞控制。
很多人都有體驗,剛擠進一輛滿載公交車或綠皮火車,似乎每個人都被壓得喘不過氣,但車子顛簸一陣子后,奇跡般寬松了,另一例,醫院,景區,購物等不管排隊多長,似乎最終都會得到服務。
總有人會往寬松的地方主動挪,有人挪就有人讓,總有人覺得沒希望而離開,但很少有人主動擠,這就是擁塞控制。端到端擁塞控制與此類似,都是沒有全局上帝視角的自發自組織博弈。
自 1986 年第一次肉眼可見的大范圍網絡擁塞后,范雅各布森(Van Jacobson,任何 cc 都應引用他)引入擁塞控制機制后迄今誕生了越來越多的擁塞控制算法,但具有部署意義的依舊是 reno/cubic,vegas,bbr 這 3 類,其它的諸多算法大多數都上不了臺面。
近幾年各類 cc 如寒武紀大爆發(各頂會一年 n 多論文,n 多 cc,基本都是瞎 jb 扯淡),但多數上不了臺面,主流 cc 還是老 3 樣,實際部署的就是 cubic vs. bbr,vegas 都不行,別的都只能自己玩玩,內卷罷了。強調端到端卻又沒什么好招數獲得更加詳細的信息,上限到了,信息量已達極限,還折騰個啥。至于 dcn,只呵呵。
大多數都是為了升職加薪,包括 G 家。rack 早在 1994 年 vegas 論文中就展現了,然而無人問津,直到 bbr 前夕… 其實業內早就采用了。業內一般不管你實際效果,而在乎總結性只言片語,曾有位自詡資深的經理說 “擁塞控制的本質就是端到端的 qos”,這就純扯犢子了。
端到端信息量極限的根因在于 “測不準”。測不準又怎樣,大數定律,中心極限定理上場啊,任何事物在足夠符合它自己尺度的那個度量精度,一定有規律,這就是統計學兩大定律的前提,而分組交換互聯網本身就是統計復用網絡,它遵循統計律。
但大多數程序員看不上統計律。可統計律才是有效的擁塞控制的核心基礎,不然呢?你試試看。
艸,本來不卷,求別卷!雞屎,經理。
浙江溫州皮鞋濕,下雨進水不會胖。