騰訊正式釋出 TCP 單邊擁塞控制演算法 TCPA,比 Google BBR 速度提升 40%
(題圖:Dubai Mall,迪拜,2019)
騰訊核心團隊近日釋出了內部使用的 TCPA 單邊擁塞控制演算法,站長、個人、企業均可以免費使用。對於使用者來說,在 TCP 單邊加速上除了 Google BBR、銳速,現在又多了一個選擇。
TCPA 由騰訊 TEG 作業系統組研發,基於 RHEL 7.4 原始碼。相對於 Google 的 BBR 演算法, TCPA 的 優勢在於小檔案的效能提升。小檔案比 BBR 能提升 40% 以上,大檔案比 BBR 能提升 5%~10% 。TCPA 也預設僅加速網站常用埠 80/443/8080,更適用於建站場景。
TCPA 簡介
上圖是 TCPA,傳送資料包和接收應答包後的處理邏輯圖。一共包括 9 個模組。應用程式通過 Sendfile,Write 等傳送的後,交由核心的資料包構建模組來處理,最終生成一個個 SKB 並放入傳送佇列中。平緩傳送模組,根據擁塞控制模組所產生的傳送速度/傳送視窗值來平緩地將這些資料(無論是新資料,還是重傳資料)傳送到網路中,本身並不會決策傳送的速率,只會按照給定的速度/傳送視窗來執行。
超時模組用來決策哪些資料包超時,並重傳,最終會交給平緩傳送模組來發送。Probe 探測模組,是依據網路的特定需要,構造一些資料包來探測網路的質量情況。傳送是交給平緩傳送模組來發送,接收到的應答包,會將 Probe 應答包交給 Probe 模組來處理。
丟包檢測模組,用來判斷哪些資料包已經丟棄,比如快速重傳,RACK 等演算法。這裡只去標記丟棄的報文,具體的重傳由重傳包處理模組來執行。
擁塞控制演算法,用來判斷當前網路連結情況,並據此來決定當前傳送的速度和傳送視窗值。不同的擁塞演算法所依賴的判斷資訊不同。 視窗的增減均由這裡來判斷。這裡會依賴 SACK 模組,丟包檢測模組,RTO 超時模組,Probe 模組等給予關鍵資訊。重傳資料包模組和新資料傳送模組相對比較簡單,將資料整理好後,交給平緩傳送模組來發送。
總的來說,TCPA 的修改不僅僅是對擁塞演算法的修改,也對收發包的整個邏輯進行了重構。對於系統已有的功能,我們額外還提供了可調整的引數介面,供使用。比如小表中列舉了部分調整的引數:
net.core.wmem_max = 3276800net.ipv4.tcp_fack = 0
net.ipv4.tcp_init_cwnd = 10
net.ipv4.tcp_loss_init_cwnd = 1
net.ipv4.tcp_mem = 379479505972758958
net.ipv4.tcp_metrics_minrtt = 0
net.ipv4.tcp_rto_max = 120
net.ipv4.tcp_rto_min = 200
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_wmem = 4096163844194304
官方 TCPA 和 Google BBR 測試對比報告
-
測試方案
使用第三方博睿進行測試。一共進行了 2 輪的測試,第一個測試周期:12.9 的 0 點~12.11 的 0 點,共兩天。第二個測試周期 12.12 的 0 點到 12.14 的 0 點。
TCPA 安裝包安裝後使用預設配置進行測試。最新核心 Google BBR 和標準核心均採用預設核心的配置進行測試。
3 臺伺服器屬於同一個機房,配置全國的電信(伺服器屬於電信運營商)測試任務進行測試。
-
測試結果
測試任務 | 第一次測試 | 第二次測試 | 2次測試平均值 | 縱向效能對比 |
640KB任務 | TCPA-電信 | 2047.401 | 2183.034 | 2115.218 |
TCP-電信 | 1450.636 | 1383.674 | 1417.155 | 49.26% |
BBR-電信 | 1448.155 | 1536.517 | 1492.336 | 41.74% |
8MB任務 | TCPA-電信 | 2570.422 | 2552.981 | 2561.702 |
TCP電信 | 1768.458 | 1626.909 | 1697.684 | 50.89% |
BBR-電信 | 2295.64 | 2358.646 | 2327.143 | 10.08% |
25MB任務 | TCPA-電信 | 2769.412 | 2713.632 | 2741.522 |
TCP電信 | 1876.674 | 1915.549 | 1896.112 | 44.59% |
BBR-電信 | 2585.8 | 2590.205 | 2588.003 | 5.93% |
說明: “縱向效能對比” 是指 BBR 預設配置,TCPA 啟用後預設配置時,“2次測試平均值” 中, TCPA 相比 TCP,TCPA 相比 BBR 的測試結果。
-
測試結論
1. Google BBR 演算法相比標準的 TCP 的 Cubic 演算法,效能提升明顯。小檔案差異不大;大檔案的下載效能明顯,約 35% 左右。
2. 啟用 TCPA 後並外加系統引數優化後, 大小檔案均比標準的 TCP 提升 40 %以上。
3. 啟用 TCPA 後並外加系統引數優化後,小檔案比 Google BBR 能提升 40% 以上,大檔案比 Google BBR 能提升 5%~10%。
更詳細測試報告可參考:https://linux.qq.com/?p=224
安裝 TCPA
-
環境要求
系統 CentOS 7 以上Boot 分割槽不小於 500M (太小可能導致安裝核心失敗)
-
手動安裝
1. 下載相關核心和安裝包
# 定製的核心連結:https://share.weiyun.com/5AeyuFg 密碼:d1swc1
# TCPA 安裝包
連結:https://share.weiyun.com/5RAyh7c 密碼:qeetzp
2. 安裝必要依賴
$ yum -y install net-tools bzip2
3. 安裝系統核心
$ rpm –ivh kernel-3.10.0-693.5.2.tcpa06.tl2.x86_64.rpmPreparing...################################# [100%]
Updating / installing...
1:kernel-3.10.0-693.5.2.tcpa06.tl2 ################################# [100%]
Install kernel
Set Grub default to "3.10.0-693.5.2.tcpa06.tl2" Done.
4. 重啟作業系統
$ reboot
5. 安裝 TCPA 模組
# 解壓 TCPA 安裝包$ tar jxvf tcpa_packets_180619_1151.tar.bz2
# 安裝 TCPA 模組,預設安裝到 /usr/local/storage/tcpav2 目錄
$ cd tcpa_packets
$ sh install.sh
# 啟用 TCPA模組
$ cd /usr/local/storage/tcpav2
$ sh start.sh
6. 啟用 TCPA 模組
$ cd /usr/local/storage/tcpav2$ sh start.sh
7. 驗證 TCPA 是否啟用成功
$ lsmod|grep tcpatcpa_engine2242490
8. 解除安裝 TCPA 模組
$ cd /usr/local/storage/tcpav2$ sh uninstall.sh
-
一鍵安裝指令碼
如果你覺得上面手動安裝的方法太過麻煩,可以使用下面的一鍵安裝指令碼。
$ wget http://down.08mb.com/tcp_opz/tcpa/tcpa.sh$ sh tcpa.sh
使用說明:一鍵安裝指令碼 無需人工干預, 會自動安裝依賴(僅 epel-release、net-tools)和核心並重啟,重啟後安裝自動完成。
-
其它技巧
TCPA 預設只加速 80,443,8080 這 3 個埠,如需新增其它加速埠可按如下格式增加自定義埠。
$BINDIR/$CTLAPP access add tip $ip tport 自定義埠
比如,要增加的埠為 8989。
$ vim /usr/local/storage/tcpav2/start.sh
# 在第46行後新增:
$BINDIR/$CTLAPP access add tip $ip tport 8989
參考文件
https://www.google.com
http://t.cn/EMGiz64
http://t.cn/EMM9ur8
http://t.cn/EMIHaJn
http://t.cn/EMIrT7U
http://t.cn/EMIga9D
今日思想
每個人的大腦都有兩部分,他們分別是層次較高的邏輯部分與層次較低的情緒部分,我稱之為兩個你,他們會爭奪對一個人的控制權。
—— 瑞·達利歐 《原則》
推薦閱讀