天天看點

Google大殺器TCP Protective Load Balancing,支援linux 6.2

作者:Asterisk

剛剛,Google再次出手針對資料中心的傳輸協定進行了大幅優化,為linux TCP協定送出了更新檔和相關的子產品。在linux 6.2 開始支援基于TCP 預均衡負載機制PLB。關于資料中心的TCP傳輸,big TCP,homa等讨論很多。筆者前幾天發的一篇關于TCP是否被替代的新聞,homa作為資料中心的的傳輸協定的可選方案,已經做了很多的測試,結果也比較樂觀。今天,google的PLB不僅僅對Google的雲服務,也可能對很多其他雲服務商是一個福音。

Homa還是TCP-Web3.0時代資料中心部署中傳輸協定面臨的新挑戰簡單分享

我們知道,傳輸機制中的主要問題基本上都是集中于針對網絡擁塞的處理方面。無論是TCP或者Homa,都是考慮在發送方和接收方方面進行如何優化。但是,Google卻另辟蹊徑,釋出了一種更聰明的傳輸處理機制支援DCTCP(RFC8257)。具體的算法如下(RFC8257-3):

3.  DCTCP Algorithm 

   There are three components involved in the DCTCP algorithm:

   o  The switches (or other intermediate devices in the network) detect
      congestion and set the Congestion Encountered (CE) codepoint in
      the IP header.

   o  The receiver echoes the congestion information back to the sender,
      using the ECN-Echo (ECE) flag in the TCP header.

   o  The sender computes a congestion estimate and reacts by reducing
      the TCP congestion window (cwnd) accordingly.           

一般來說,均衡負載大部分都是基于應用層的負載處理,處理難度相對比較低,目前市場上也有非常多的成熟的産品和解決方案。另外,如果路由器或者其他網元傳輸裝置檢測到擁塞的話,路由器則可能将擁塞的資料直接丢棄,然後讓發送端再重新傳輸。現在,Google對TCP傳輸做了一個小手術,也算是非常底層的優化。對于Google的新算法,它是一種具有擁塞感覺的機制,使用了TCP的顯式擁塞通知 (ECN)。如果發送資料時發生資料傳輸的擁塞,PLB機制檢測到了擁塞,ECN傳回後。

一般情況下,如果我們獲知傳輸路徑有擁塞的話,我們不可能修改位址或者端口,因為那樣會導緻傳輸連接配接斷開。在PLB的機制中,PLB機制則會觸發了IPv6網絡的flow label field(流标簽)-RFC3697,flow label field會觸發switch支援的ECMP/WCMP路由來修改發送資料包路由路徑。這樣可以預測出傳輸路徑堵塞,然後檢測出堵塞以後,修改傳輸路徑,最終降低傳輸時的丢包,時延等問題,也就是所謂的TCP PLB處理方式。linux-6.2 核心預設不支援開啟tcp_plb_enabled。使用者可以使用sysctl 指令開啟。

Mubashir Adnan Qureshi 和其他研究人員發表了關于此技術的研究成果,建議大家閱讀大神的關于PLB的論文:

PLB: Congestion Signals are Simple and Effective
for Network Load Balancing           

Mubashir Adnan Qureshi 也同時送出了關于TCP PLB的更新檔檔案,linux-6.2 将已将此部分代碼合并。

Google大殺器TCP Protective Load Balancing,支援linux 6.2

根據此論文的研究成果,開啟PLB和關閉PLB的情況下,其丢包率和時延等名額參數都有一定的優化和提示。關于其他的傳輸名額的測試結果,建議讀者參考連結資源做進一步學習。

Google大殺器TCP Protective Load Balancing,支援linux 6.2
Google大殺器TCP Protective Load Balancing,支援linux 6.2

這一技術不僅僅對Google有用,也對其他的雲服務提供商有很大的幫助。目前僅支援IPv6, 還不支援IPv4。不過如果使用者要測試其功能的話,使用者可以使用Google 的雲平台或者自己搭建測試平台來驗證。雖然目前IPv6部署不是非常普及,可能将來使用IPv6普及以後,PLB在資料中心的TCP傳輸中的使用可能更加普遍。

參考資料:

https://www.rfc-editor.org/rfc/rfc3697

https://dl.acm.org/doi/pdf/10.1145/3544216.3544226

https://www.rfc-editor.org/rfc/rfc8257

https://www.tetcos.com/pdf/v13/Experiments/Understand-the-working-of-TCP-BIC.pdf

https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next.git/commit/?id=957ed5e7129f2ce85dd76e4cdce749388295467d

https://www.kernel.org/doc/html/latest/networking/dctcp.html

https://dl.acm.org/doi/10.1145/1851275.1851192

Mubashir Adnan Qureshi, Yuchung Cheng等:PLB: Congestion Signals are Simple and Effective for Network Load Balancing

繼續閱讀