TCP BBR 是 Google 于2016年所发布网络拥塞控制算法,用于尽可能提高带宽利用率。随着时间的推移 TCP BBR 已经来到了 v3 版本,但因为尚处于测试阶段所以目前相关代码并没有汇入主线内核中。现阶段如果需要提前体验 BBR v3 的话手动编译内核是免不了的。不过好在编译并不复杂,在此便做个记录以供参考。
本文所使用的编译环境为 Debian 11,编译时应确保磁盘空间剩余 30G 及以上。请注意当前 BBRv3 仍处于测试阶段,可能存在 BUG 。
1.安装依赖
首先安装一些编译必须用到的软件包,一路确认即可。
代码语言:javascript复制sudo apt-get update
sudo apt-get build-dep linux
sudo apt install git screen
sudo apt-get upgrade
2.拉取源码
从 Google 拉取完整的包含 TCP BBR v3 的内核源码,视网络情况这一步可能需要较长时间。
代码语言:javascript复制git clone -o google-bbr -b v3 https://github.com/google/bbr.git
cd bbr/
最终显示 100% done 且无报错即可。
3.拷贝配置
我们的最终目的是编译开启 TCP BBR v3,并不是内核参数调优,所以直接拷贝 Debian 的内核参数即可。下载 Debian 6.5 内核到本机并使用 7z 打开。
代码语言:javascript复制https://mirrors.edge.kernel.org/debian/pool/main/l/linux/linux-image-6.5.0-1-amd64-unsigned_6.5.3-1_amd64.deb
按照图示路径,将 config-6.5.0-1-amd64
解压至本机后上传至编译机的 BBR
目录中,最后重命名为 .config
。此处如有需要也可以自行替换为 cloud 内核对应的配置文件。
4.编译设置
为避免网络断开或其他意外情况导致编译中断,我们新创建一个 Screen
用于编译内核:
screen -S bbr
cd bbr/
make menuconfig
依序进入:Networking support - Networking options - TCP: advanced congestion control
,确保 BBR TCP 被标记为 <M> 。由于之前已经拷贝过默认配置,正常情况此处无需再额外修改。如确需修改可选中对应行后按空格切换编译选项即可。
另外此处不可再选择 BBRv1 TCP ,因 v3 为 v1 的替代方案,同时选择编译时会出错。
确认完毕后按 Tab 切换到底部菜单,一路选择 Exit 并保存即可,最终退出到终端界面。
由于我们不需要对内核进行任何调试或测试,执行以下命令关闭内核调试
代码语言:javascript复制scripts/config --disable MODULE_SIG
scripts/config --disable DEBUG_INFO
5.编译内核
准备工作做完后编译内核反而是最简单的一步,执行以下命令并耐心等待即可。
代码语言:javascript复制make -j4 deb-pkg
#可按照编译机 CPU 线程数设置编译线程
编译完成后在上层文件夹中会生成我们所需要的包含 BBRv3 模块的内核文件:linux-image-6.4.0-xxxx.deb
。在任意机器上安装此内核即可启用 BBRv3 :
dpkg -i linux-image-6.4.0-xxxx.deb
# 文件名以实际为准
如何确认当前已启用的 BBR 版本:
代码语言:javascript复制modinfo tcp_bbr
#以下为回显
filename: /lib/modules/6.4.0 /kernel/net/ipv4/tcp_bbr.ko
version: 3
description: TCP BBR (Bottleneck Bandwidth and RTT)
6.后记
按照 Google 自己的测试结果,BBRv3 相较于 v1 在带宽吞吐量上几乎相同但重传率和传输延迟均有所降低,且改善了 BBRv2 中部分情况下的带宽公平性问题。当前 BBRv3 已经设置为 google.com 上所有 TCP 流量的拥塞控制算法,并且在 youtube.com 上进行 A/B 测试。
此外 Google 还带来了 BBR.Swift ,设计用途为数据中心内部流量的传输拥塞控制算法,这个一般人应该用不上。