编译 Linux 内核启用 TCP BBR3

By | 2023年10月2日

TCP BBR 是 Google 于2016年所发布网络拥塞控制算法,用于尽可能提高带宽利用率。随着时间的推移 TCP BBR 已经来到了 v3 版本,但因为尚处于测试阶段所以目前相关代码并没有汇入主线内核中。现阶段如果需要提前体验 BBR v3 的话手动编译内核是免不了的。不过好在编译并不复杂,在此便做个记录以供参考。

本文所使用的编译环境为 Debian 11,编译时应确保磁盘空间剩余 30G 及以上。请注意当前 BBRv3 仍处于测试阶段,可能存在 BUG 。

1.安装依赖

首先安装一些编译必须用到的软件包,一路确认即可。

sudo apt-get update
sudo apt-get build-dep linux
sudo apt install git screen
sudo apt-get upgrade

2.拉取源码

从 Google 拉取完整的包含 TCP BBR v3 的内核源码,视网络情况这一步可能需要较长时间。

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 打开。

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 并保存即可,最终退出到终端界面。

由于我们不需要对内核进行任何调试或测试,执行以下命令关闭内核调试

scripts/config --disable MODULE_SIG
scripts/config --disable DEBUG_INFO

5.编译内核

准备工作做完后编译内核反而是最简单的一步,执行以下命令并耐心等待即可。

make -j4 deb-pkg
#可按照编译机 CPU 线程数设置编译线程

编译完成后在上层文件夹中会生成我们所需要的包含 BBRv3 模块的内核文件:linux-image-6.4.0-xxxx.deb 。在任意机器上安装此内核即可启用 BBRv3 :

dpkg -i linux-image-6.4.0-xxxx.deb
# 文件名以实际为准

如何确认当前已启用的 BBR 版本:

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 ,设计用途为数据中心内部流量的传输拥塞控制算法,这个一般人应该用不上。

One thought on “编译 Linux 内核启用 TCP BBR3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

滑动到最右以进行验证 *