公司内部针对部分业务的下载场景,对TCP协议栈就行了参数,代码逻辑层的优化,以达到客户端访问的快速的体验。在研发过程中,Google发布了BBR,并把它集成到4.9内核中。测试时,最新的内核是4.15. 为了评估TCPA版本跟BBR的性能对比,我们使用了4.15版本的BBR和我们正式发布的TCPA来进行性能对比。本测试报告,主要是通过第三方的博睿来评估在不同文件大小下,TCPA和BBR之间的性能差异。
测试结果
测试任务 | 第一次测试 | 第二次测试 | 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% |
说明:
- 第一轮测试(详细数据见1)和第二轮测试(详细数据见5.2)的参数配置相同。因此取其平均值作为测试结果。
- “纵向性能对比”是指,BBR默认配置,TCPA启用后默认配置时,“2次测试平均值”中, TCPA相比TCP,TCPA相比BBR的测试结果。
测试结论:
1.BBR算法相比标准的TCP的cubic算法,性能提升明显。小文件差异不大;大文件的下载性能明显,约35%左右。
2.TCPA的启用,外加系统参数优化后, 大小文件均比标准的TCP提升40%以上。
3.TCPA的启用,外加系统参数优化后,小文件比BBR能提升40%以上,大文件比BBR能提升5%~10%。
TCPA简介
这个是TCPA,发送数据包和接收应答包后的处理逻辑图。一共包括9个模块。应用程序通过sendfile,write等发送的后,交由内核的数据包构建模块来处理,最终生成一个个SKB并放入发送队列中。平缓发送模块,根据拥塞控制模块所产生的发送速度/发送窗口值来平缓地将这些数据(无论是新数据,还是重传数据)发送到网络中,本身并不会决策发送的速率,只会按照给定的速度/发送窗口来执行。超时模块用来决策哪些数据包超时,并重传,最终会交给平缓发送模块来发送。Probe探测模块,是依据网络的特定需要,构造一些数据包来探测网络的质量情况。发送是交给平缓发送模块来发送,接收到的应答包,会将Probe应答包交给Probe模块来处理。收到应答包后,如果有SACK则单独处理SACK,SACK的处理逻辑比较复杂,需要知道哪些数据包被应答,哪些未被应答,需要对重传队列进行标记。并且也会根据sack中的应答来判断哪些报文丢包了,当前网络中的RTT值变化等。这里会给丢包检测模块,拥塞控制模块提供判断信息。
丢包检测模块,用来判断哪些数据包已经丢弃,比如快速重传,RACK等算法。这里只去标记丢弃的报文,具体的重传由重传包处理模块来执行。
拥塞控制算法,用来判断当前网络链接情况,并据此来决定当前发送的速度和发送窗口值。不同的拥塞算法所依赖的判断信息不同。 窗口的增减均由这里来判断。这里会依赖SACK模块,丢包检测模块,RTO超时模块,probe模块等给予关键信息。
重传数据包模块和新数据发送模块相对比较简单,将数据整理好后,交给平缓发送模块来发送。
所以,总的来说,TCPA的修改不仅仅是对拥塞算法的修改,也对收发包的整个逻辑进行了重构。对于系统已有的功能,我们额外还提供了可调整的参数接口,供使用。比如小表中列举了部分调整的参数:
net.core.wmem_max = 3276800
net.ipv4.tcp_fack = 0
net.ipv4.tcp_init_cwnd = 10
net.ipv4.tcp_loss_init_cwnd = 1
net.ipv4.tcp_mem = 379479 505972 758958
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 = 4096 16384 4194304
测试方案
使用第三方博睿进行测试。一共进行了2轮的测试,第一个测试周期:12.9的0点~12.11的0点,共两天。第二个测试周期12.12的0点到12.14的0点。
TCPA安装包安装后使用默认配置进行测试。最新内核BBR和标准内核均采用默认内核的配置进行测试。
3台服务器属于同一个机房,配置全国的电信(服务器属于电信运营商)测试任务进行测试。
详细的测试任务名和测试URL如下。
测试名称 | 具体任务 | 测试URL |
天津PC端-640K测试 | 天津TCPA-电信 | http://tcloud.qq.com/640K.png |
天津TCP-电信 | http://tcloud.qq.com/640K.png | |
天津BBR-电信 | http://tcloud.qq.com/640K.png | |
天津PC端-8M测试 | 天津TCPA-电信 | http://tcloud.qq.com/8M.apk |
天津TCP电信 | http://tcloud.qq.com/8M.apk | |
天津BBR-电信 | http://tcloud.qq.com/8M.apk | |
天津PC端-25M测试 | 天津TCPA-电信 | http://ping.cdn.qcloud.com/xf/dOsYWK1.apk |
天津TCP电信 | http://ping.cdn.qcloud.com/xf/dOsYWK1.apk | |
天津BBR-电信 | http://ping.cdn.qcloud.com/xf/dOsYWK1.apk |
测试详细结果
静态下载测试(第一轮)
测试周期:12.9的0点~12.11的0点,共两天。
测试任务 | 下载速度(Kb/s) | 可用性(%) | 性能提升 | 备注 | |
640KB任务 | TCPA-电信 | 2047.401 | 99.72 | ||
TCP-电信 | 1450.636 | 99.66 | 41.14% | ||
BBR-电信 | 1448.155 | 99.71 | 41.38% | ||
8MB任务 | TCPA-电信 | 2570.422 | 99.46 | ||
TCP电信 | 1768.458 | 99.43 | 45.35% | ||
BBR-电信 | 2295.64 | 99.43 | 11.97% | ||
25MB任务 | TCPA-电信 | 2769.412 | 99.02 | ||
TCP电信 | 1876.674 | 99.03 | 47.57% | ||
BBR-电信 | 2585.8 | 99.09 | 7.10% |
对于小文件(小于640KB)而言,BBR基本跟标准的TCP性能相当;而TCPA相比BBR提升了至少40%。
对于大文件(大于8MB)而言,BBR相对应标准的TCP性能提升明显,幅度在30%左右。而TCPA提升的性能更高,比BBR还有高7%~11%。
静态下载测试(第二轮)
测试周期:12.12的0点~12.14的0点,共两天。
测试任务 | 下载速度(Kb/s) | 可用性(%) | 性能提升 | 备注 | |
640KB任务 | TCPA-电信 | 2183.034 | 99.92 | ||
TCP-电信 | 1383.674 | 99.85 | 57.77% | ||
BBR-电信 | 1536.517 | 99.91 | 42.08% | ||
8MB任务 | TCPA-电信 | 2552.981 | 99.66 | ||
TCP电信 | 1626.909 | 99.63 | 56.92% | ||
BBR-电信 | 2358.646 | 99.66 | 8.24% | ||
25MB任务 | TCPA-电信 | 2713.632 | 99.5 | ||
TCP电信 | 1915.549 | 99.28 | 41.66% | ||
BBR-电信 | 2590.205 | 99.41 | 4.77% |
对于小文件(小于640KB)而言,BBR略微比标准的TCP性能好些,约10%左右。而TCPA相比BBR提升了至少40%。
对于大文件(大于8MB)而言,BBR相对应标准的TCP性能提升明显,幅度在30%左右。而TCPA提升的性能更高,比BBR还有高4%~8%。
附录
1.测试环境
服务器 | 测试对象 | 内核版本 | TCPA版本 | 备注 |
123.151.xx.xx | 标准TCP | 3.10.0-1-tlinux2_cdn_nosign-0001.tl2 | 无 | |
123.151.xx.xx | TCPA | 3.10.104-1-tlinux2-0041.tcpa01.tl2 | 2.6-LIVE | tcpa_packets_171206_0959.tar.bz2 |
123.151.xx.xx | BBR | 4.15.0-rc2-netnext-171208+ | 无 | 需要启用BBR |
(注:这三台服务器属于同一个IDC机房内)
2.bbr的环境配置
(1)添加配置cat /etc/sysctl.conf
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
(2)执行sysctl –p /etc/sysctl.conf