不特指 TCP AIMD,而泛指控制范疇的所有 Additive Increase / Multiplicative Decrease 算法,繼 難以超越的 TCP AIMD 再敘。
“你永遠不能僅憑 BBR 的吞吐更高就說 BBR 比 CUBIC 更好” 這句話怎么總是沒人看,這句話是這一系列文章的前提論點,但卻總有人看了全文后用 “BBR 性能更高” 來表明自己見多識廣。
再次給出 AIMD 算法吞吐率 T 和丟包率 p 以及 RTT 關系的公式:
T=γRTT?p?0.5T=\dfrac{\gamma}{\text{RTT}}\cdot p^{-0.5}T=RTTγ??p?0.5
在三維坐標系里畫圖,結論就是:
- AIMD 算法受 RTT 影響巨大,RTT 越大,吞吐越低;
- AIMD 算法受丟包率 p 影響巨大,p 越大,吞吐越低;
如來自 IBM Aspera 的廣告圖描述上述正合適:
還有個推論:
- 端到端傳輸控制是 “and” 關系,丟包與路徑長度正相關,往往 RTT 越大,p 也越大;
這些即 “長肥管道中 TCP 窗口張開難的故有問題” 的量化描述,長肥管道問題歷經 30 年,終于在 2010 年代不能再無視,必須解決,原因在于 “依照 AIMD 公式,高速 TCP 需要控制 p 在某個值 Q 之下,而大多數傳輸介質的固有丟包率都在 Q 之上”,換句話說,介質由于固有丟包率太高而無法滿足高速 TCP 的要求。
如何解決長肥管道的問題,還得從本質入手。
這明明是介質不中用了,關 AIMD 公式什么事。引力距離超過洛希極限掌控不了了,就是牛頓錯了?介質不中用了就優化介質,介質電氣特性本身就有定義了傳輸吞吐極限的含義,比如所謂五類,超五類雙絞線,目前面對超高速 TCP 而言,只是沒有哪種介質對應 400Gbps 傳輸帶寬而已,而不是 AIMD 算法不好。
相反,綜合考慮成本,帶寬利用率,公平性等,AIMD 是綜合效能最好的算法,沒有之一,AIMD 恰如其分適應盡力而為的網絡。參考 難以超越的 TCP AIMD。
AIMD 公式的正則推導不難,我的總結看這里:
- AIMD 公式的一般推導(附幾何推導引用)
- TCP AIMD 公式的推導
更正式的論文參考 The Macroscopic Behavior of the TCP Congestion Avoidance Algorithm。
但這次我們用更加直觀的方式重新審視 AIMD 公式,-0.5 次冪值得注意,這意味著 p 和 W 的平方存在反比關系,這個平方如何理解。按照生滅守恒,MD 視作丟包懲罰,AI 視作獎勵,則:
(懲罰量)?(懲罰概率)∝(獎勵量)?(獎勵概率)(懲罰量)\cdot (懲罰概率) \propto (獎勵量)\cdot(獎勵概率)(懲罰量)?(懲罰概率)∝(獎勵量)?(獎勵概率)
AIMD 的懲罰量為 β·W,懲罰概率即丟包率 p,獎勵量為 1,獎勵概率即每個 RTT 一次,即 RWR=1W\dfrac{\frac{R}{W}}{R}=\dfrac{1}{W}RWR??=W1?,總體上就是:
β?W?p∝1?1W\beta\cdot W\cdot p \propto 1\cdot\dfrac{1}{W}β?W?p∝1?W1?
至于為什么如此,直觀上即可理解。
以吹氣球為例,氣球的破裂容量決定了兩個維度的度量,一個是氣球的最大容量,另一個是把氣球吹到最大容量的時間,而 AIMD 的過程非常像吹氣球,buffer 滿了丟包視為氣球吹爆,它決定了丟包時的最大窗口 W 以及到達最大窗口的時間 0.5·W·RTT,因此 W2∝1pW^2 \propto \frac{1}{p}W2∝p1?,剩下的就是待定系數了。
用吹氣球的過程套用生滅守恒,則氣球爆裂瞬間釋放 W 氣體,吹爆氣球的頻率為 p,按照 AIMD 將氣球吹起來需要 W 口氣,則吹氣頻率即 1W\dfrac{1}{W}W1?,那么 W?p=1?1WW\cdot p=1\cdot\dfrac{1}{W}W?p=1?W1?,還是一樣的結論。
考慮一個有 n +1 個氣孔的氣球,其中 1 個氣孔出氣,n 個氣孔進氣,如果我們要求氣球內部必須保留一定氣體從出氣孔持續放出,考慮 n 人一起從 n 個進氣孔吹同一個氣球的場景。如果 n = 1,為了照顧人有限的肺活量,氣球容量必須至少等于人的最大肺活量,且吹得太快容易爆裂,吹得太慢換氣時出氣孔沒氣體,但 n = 3 時,一個人換氣時,另外 2 人可能依然保持吹氣,就這樣讓 n 不斷增大。
隨 n 不斷增大,單個人的換氣行為導致的氣體波動被稀釋了。流越多,所需 buffer 越小,但帶寬利用率仍然很高,這就是網絡對 buffer 需求的平方反比律,參見 交換機 buffer 的平方反比律。
流越多,峰越容易被平滑到谷,總體方差越小,大數中心極限定理,整體越收斂,這就是統計的力量,勾勒出的是現實的美感。
因此 AIMD 算法對 buffer 的需求是向內斂的,不會膨脹,這意味著 AIMD 算法具有良好的擴展性。從這個論點再次看出,AIMD 只需要非常小的代價便可以保持網絡在整體上公平高效的可用性,且隨著流增多,buffer 需求卻不增反降,抖動也被平滑,時延亦具有擴展性。這一切竟然都是自動的,只要執行最簡潔的 AIMD。
維持互聯網公平高效可用的根基竟然就是多人吹氣球。
在這個和諧的場景,單獨侵入一條 BBR 流,然后說 BBR 可以獲得更大的吞吐,從而證明 BBR 比 AIMD 更優,這是當前絕大多數人的觀點,我早已拋棄了這個觀點,經歷了滿懷激情的無果優化,深入理解了 TCP/IP 盡力而為的本質后,我明白了 AIMD 少就是多。
現在開始考慮更加現實的情況。
網絡是一個開放系統而非封閉系統,這意味著網絡狀態時刻隨輸入,輸出,反饋而改變,正如股票,有人買它就會漲,有人賣它就會跌,讓你永遠捉摸不定它的下一步走勢,因為這個走勢直接由買賣者自己的行為決定。同樣, AIMD 公式需要修正,修正的重點在于,p 在 “多大程度” 上決定 AIMD 周期和最大窗口,這個程序是非線性的,因此需要重新建模:
T=γRTProp?p?αT=\dfrac{\gamma}{\text{RTProp}}\cdot p^{-\alpha}T=RTPropγ??p?α,其中 0<α≤10<\alpha\le 10<α≤1
以上更加實際的模型顯然無法通過理論推導計算出來參數,接下來就是在每一個特定場景用海量測量數據喂這個模型,求出該場景下最佳擬合結果的 α,β。區別就在于 “理論計算” 還是 “經驗總結”。
該模型可以精確預測一個開發中的系統最終的預期理論吞吐,比如用各種 p 得到的實際結果求出 α,β 后,就可以根據系統的結構蘊含的 p 求出 T。它比理論上的 -0.5 次冪以及各種不同 AIMD 算法理論上的 β 更具有實際意義。
以下是這件事和這場論述的緣起,我先給出我的一個擬合模型:
T=1.05?MSSRTT?p?0.75T=1.05\cdot\dfrac{\text{MSS}}{\text{RTT}}\cdot p^{-0.75}T=1.05?RTTMSS??p?0.75
我的 tun/tap 背靠背轉發程序里設置了 40MB buffer,在處理 RingBuffer 邊界回繞時沒處理好,意味著每 40MB 數據丟一個 MSS,測下來只有 490Mbps,fix bug 前需要一個期望,我的期望是跑滿千兆,依據就是以上公式。該模型的參數基于 cubic 精確擬合過,至于 40MB 還是 5MB,也可反算,最終得到最佳解。
將 p 視作通用損耗率,該模型幾乎適合任何系統求解最佳吞吐。
該總結一下了,形而上時間。
AIMD 公式雖簡潔,但與性能掛鉤就很不好看,吞吐隨 p 衰減太厲害。人們總覺得有 “巨大優化空間”,總想著去 “優化” 它,BBR 出來了,吞吐上來了,但付出了更大的公平性和測量的代價,代碼越搞越復雜。問題是如何定義 “更優”,值得編程者注意的是,網絡是一個開放非線性系統,而非線性系統的問題不僅僅關乎計算機技術,遺憾的是,BBR 出自計算機技術學科內線性的假設。
如果快速衰減就是不可違抗的自然律呢,而自然本就是典型的非線性系統,這種函數隨自變量非線性變化的自然律太正常了。觀測被編程者膜拜的無敵香農公式,設信號為 1,噪聲為 p,信道容量為
C=B?log?2(1+1p)C=B\cdot\log_2(1+\dfrac{1}{p})C=B?log2?(1+p1?)
與 AIMD 幾乎一致,二者均顯示非線性衰減特征:
噪聲增加一點點,信道容量下降很多。
類似的,材料疲勞壽命和應力波動,金融投資收益與風險,生態學種群增長與流行病,均描述了相似的非線性特征。
這并非意味著這些公式描述的衰減存在優化空間,恰恰相反,這說明這些公式描述的世界本質上就是這樣的,這是真實世界中真實的衰減,無法抗拒的衰減。而真實世界符合最小作用量,這意味著它們已經是最優解。
回到 AIMD,它是一種極其自然的作用力,自然作用力天然具有公平性特征,其不變量就是時間在共享 buffer 里的彈性,一條流的 buffer 排隊時間多了,該作用力會更強烈讓其排出更多。
為什么收斂行為這么簡潔和優雅?只因為它是自然的,多一點都是多。
更直觀的例子是非牛頓流體,不管形狀如何,只要質量相同,在重力的作用下,它們最終肯定占據相同的占地面積,因為重心高了,重力會拉低它,將高度補償給面積后,拉低的力度逐漸變弱,最終大家一致,就好像大家剛擠上一輛公交車時氣都喘不過來,車開了點播一段時間后,就逐漸寬松且公平了,RTT=InfltBW\text{RTT}=\dfrac{\text{Inflt}}{\text{BW}}RTT=BWInflt? 表達的也是一個意思。
浙江溫州皮鞋濕,下雨進水不會胖。