测试 TCP BBR 对网络丢包的改善效果
TCP BBR 出来已经有挺长一段时间了,都说它可以减少 TCP 连接的延迟、改善存在丢包的网络环境速度,虽然我自己一直在用,但由于从来没有测试过,所以对它具体能发挥多大的作用还是存疑的。
正好最近了解到了一个命令 tc
,可以模拟网络延迟和丢包,于是决定来亲自测试一下 BBR 对网络丢包的改善效果。
TCP BBR 开启和关闭的教程可以查看之前的文章:内核版本 4.9 以上的 Linux 系统开启/关闭 BBR 的方法
测试环境
为了获得充足的网速以便能够看到明显效果,同时排除其他环境因素的影响,本次测试在本地回环地址 127.0.0.1
上进行。输入 ifconfig
可以查看网卡情况,我这里绑定地址 127.0.0.1
的网卡名为 lo
。
在本地起一个监听 127.0.0.1
的 http 服务(我这里是用 caddy 实现的),然后在其中放一个比较大的文件(我这里是一个 600 多兆的系统镜像),后续将通过 wget 下载该文件来测试网络速度。
为了避免硬盘本身写入速度的限制,这里直接将文件 wget 到内存当中去(使用内存设备文件 /dev/shm
)
模拟丢包网络环境
这里使用 tc
命令来模拟所需要的网络环境,该命令的具体用法不再多说,自己输入 man tc
查看即可。
执行以下命令可以在网卡 lo
上模拟 10% 的丢包:
1 | tc qdisc add dev lo root netem loss 10% |
要恢复正常情况的话执行以下命令即可:
1 | tc qdisc del root dev lo |
测试过程及结果
先进入内存设备文件:
1 | cd /dev/shm |
使用以下命令从回环地址 127.0.0.1
的 http 服务中下载文件进行测速:
1 | wget http://127.0.0.1:8080/debian-10.3.0-amd64-xfce-CD-1.iso |
不开启 BBR 的结果
不开启 BBR ,在正常(无丢包)网络环境下的测试结果如下图,640M 的文件下载花了 0.7s ,还是很快的。
不开启 BBR ,在 1% 丢包网络环境下的测试结果如下图,640M 的文件花了 5.5s 下完,相比正常情况下的网络速度有一定程度降低。
不开启 BBR ,在 10% 丢包网络环境下的测试结果如下图,可以看到同样 640M 的文件下载花了 50s ,相比正常情况下网络速度发生了大幅度降低。
开启 BBR 的结果
开启 BBR ,在正常(无丢包)网络环境下的测试结果如下图,640M 的文件同样花了 0.7s 下完,跟不开启 BBR 时的速度没有差别。
开启 BBR ,在 1% 丢包网络环境下的测试结果如下图,640M 的文件还是花了 0.7s 下完,跟正常网络环境下的速度几乎一样,这相比同样 1% 丢包网络环境但不开启 BBR 时的 5.5s 有很大的提升。
开启 BBR ,在 10% 丢包网络环境下的测试结果如下图,可以看到同样 640M 的文件下载花了 7.5s ,这虽然没有前面跟正常网络环境下速度几乎一样那么恐怖,但相比同样 10% 丢包网络环境不开启 BBR 时的 50s 还是有很大程度提升的。
结果总结
上面的测试通过一个简单的场景来验证了 TCP BBR 对于丢包情况下网络速度的优化。从结果中可以看到 TCP BBR 对于网络丢包的改善效果十分显著,在少量丢包的情况下甚至可以做到与正常网络环境速度无异,虽然在大量丢包时速度仍会下降,但跟不开启 BBR 的情况相比还是有很大的提升(比不开启 BBR 的情况速度降得更少)。
所以,如果你的机器、网络环境存在丢包导致跑不满带宽的话,不妨开启 BBR 试一下吧!