Linode的BBR简单测试
概述:
TCP BBR 解决两个问题:
- 在有一定丢包率的网络链路上充分利用带宽。适合高延迟、高带宽的网络链路。
- 降低网络链路上的 buffer 占用率,从而降低延迟。适合慢速接入网络的用户。
记得2017年BBR刚合入Linux 4.9内核时,Google提出的这个拥塞控制算法在技术圈特别火。当时我在Linode上做跨国文件传输,丢包几乎是家常便饭,就想亲自测试一下效果。
测试目的: 这次测试主要是针对丢包率。更有说服力的测试请参考Lawrence Brakmo的BBR Report。 BBR的另一面
测试准备:
- ADDR01:aaa.aaa.aaa.aaa
| |
- ADDR02:bbb.bbb.bbb.bbb
| |
这两台Linode机器分别在不同的数据中心,一台在美西,一台在欧洲,模拟的就是跨国网络环境。当时CentOS 7默认还是4.4内核,而BBR需要Linux 4.9+,所以必须先升级内核才能开启BBR。
测试方式:
- 模拟丢包1%-30%的场景,分别测试不同内核开启BBR先后的情况。
Linux的流量控制工具tc可以通过netem模拟各种网络状况,包括丢包、延迟、抖动等,这是做网络测试的标准工具。选rsync作为测试工具是因为平时真实使用场景就是跨服务器文件同步,最贴近实际。
用到的tc指令:
| |
- 测试从ADDR02传数据到ADDR01,ADDR01的内核不变,ADDR02在每次测试都会调整内核重启。
测试过程:
- 步骤略,test.gz约160MB,是平时用来备份代码的压缩包,过程大致如下:
没有启用BBR的情况,从ADDR02传数据到ADDR01:
| |
传输过程感觉特别明显,没有BBR时速度时快时慢,3.27MB/s的速度能明显看到进度条在缓慢移动,等160MB传完感觉等了好久。
测试数据比对:
| 4.8.6-x86_64-linode78 | 4.9.15-x86_64-linode78 | 非linode的官方4.10内核(generic) | |
|---|---|---|---|
| 没有启动BBR正常情况 | 3.27MB/s | 3.36MB/s | 没有测试 |
| 启动BBR正常情况 | 没有测试 | 3.45MB/s | 2.31MB/s |
| 启动BBR丢包1% | 3.19MB/s | 没有测试 | 没有测试 |
| 启动BBR丢包10% | 没有测试 | 3.21MB/s | 2.81MB/s |
| 启动BBR丢包30% | 97.30kB/s(在20分钟内没有传输完成中断得到的最后结果) | 1.35MB/s | 1.15MB/s |
测试总结和当时情况(以上述结果来总结):
- linode自己编译的内核有明显针对性优化,效果比较明显。
- 启动bbr后在丢包30%的情况下还能完成传输,bbr的效果也比较明显;
- 4.10内核选择了generic没有选择lowlatency。
- 本来还打算测50%的丢包。但是50%设置后几乎无法远程操作ADDR01而放弃测试。50%丢包率已经严重到ssh连接都开始卡顿,远程操作基本不可能,这个测试只好作罢。
附录:
- centos7官方内核的升级方法:
这是当时CentOS 7升级到4.x内核的标准方法,通过elrepo仓库获取最新的ml(mainline)内核:
- 升级内核:
| |
- 更新启动
| |
- 开启BBR:
| |