腾讯正式发布 TCP 单边拥塞控制算法 TCPA,比 Google BBR 速度提升 40% (附安装教程)

1,799 阅读5分钟
原文链接: mp.weixin.qq.com

(题图: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 模块来处理。

收到应答包后,如果有 SACK 则单独处理 SACK,SACK 的处理逻辑比较复杂,需要知道哪些数据包被应答,哪些未被应答,需要对重传队列进行标记。并且也会根据 SACK 中的应答来判断哪些报文丢包了,当前网络中的 RTT 值变化等。这里会给丢包检测模块,拥塞控制模块提供判断信息。丢包检测模块,用来判断哪些数据包已经丢弃,比如快速重传,RACK 等算法。这里只去标记丢弃的报文,具体的重传由重传包处理模块来执行。

拥塞控制算法,用来判断当前网络链接情况,并据此来决定当前发送的速度和发送窗口值。不同的拥塞算法所依赖的判断信息不同。 窗口的增减均由这里来判断。这里会依赖 SACK 模块,丢包检测模块,RTO 超时模块,Probe 模块等给予关键信息。重传数据包模块和新数据发送模块相对比较简单,将数据整理好后,交给平缓发送模块来发送。

总的来说,TCPA 的修改不仅仅是对拥塞算法的修改,也对收发包的整个逻辑进行了重构。对于系统已有的功能,我们额外还提供了可调整的参数接口,供使用。比如小表中列举了部分调整的参数:

net.core.wmem_max = 3276800net.ipv4.tcp_fack = 0net.ipv4.tcp_init_cwnd = 10net.ipv4.tcp_loss_init_cwnd = 1net.ipv4.tcp_mem = 379479      505972  758958net.ipv4.tcp_metrics_minrtt = 0net.ipv4.tcp_rto_max = 120net.ipv4.tcp_rto_min = 200net.ipv4.tcp_timestamps = 1net.ipv4.tcp_wmem = 4096       16384   4194304

官方 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 kernelSet 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_engine           224249  0

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.comhttp://t.cn/EMGiz64http://t.cn/EMM9ur8http://t.cn/EMIHaJnhttp://t.cn/EMIrT7Uhttp://t.cn/EMIga9D

今日思想

每个人的大脑都有两部分,他们分别是层次较高的逻辑部分与层次较低的情绪部分,我称之为两个你,他们会争夺对一个人的控制权。

—— 瑞·达利欧 《原则》

推荐阅读