前言

作为目前最强悍的网络拥塞控制算法,谷歌 BBRv3 带来低延迟与高吞吐。
但由于主流发行版并未原生集成,源码编译成了唯一的完美解法。

  • 最简单的方式编译干净、轻量化的 BBRv3 内核
  • 针对甲骨云的 ARM Neoverse N1 架构
    进行深度的内核级编译器优化(ThinLTO + 专属架构指令注入)。

安装编译依赖

1
2
sudo apt update
sudo apt install -y build-essential libncurses-dev bison flex libssl-dev libelf-dev bc rsync kmod cpio git clang lld llvm make

获取 BBRv3 源码

1
2
git clone -b v3 https://github.com/google/bbr.git --depth=1
cd bbr

复制当前系统配置

1
cp /boot/config-$(uname -r) .config

关闭证书密钥签名

⚠️ 官方发行版的配置文件中带有证书密钥签名,如果不清除,编译时会因为缺少本地私钥而报错失败。
1
2
scripts/config --set-str SYSTEM_TRUSTED_KEYS ""
scripts/config --set-str SYSTEM_REVOCATION_KEYS ""

开启 BBRv3 / FQ 调度器

1
2
3
4
5
./scripts/config --enable CONFIG_TCP_CONG_BBR
./scripts/config --set-str CONFIG_DEFAULT_TCP_CONG "bbr"
./scripts/config --enable CONFIG_NET_SCH_FQ
./scripts/config --enable CONFIG_NET_SCH_CAKE
./scripts/config --set-str CONFIG_DEFAULT_NET_SCH "fq"

自动补全配置并编译

到这里,你已经能编译出包含bbrv3和fq/cake的内核。
如果希望更完整的内核优化可参照下面的进阶内核优化
1
2
make olddefconfig
make -j$(nproc) bindeb-pkg

安装内核

1
sudo dpkg -i linux-image-*.deb linux-headers-*.deb

进阶内核优化

关闭调试符号与体积裁剪

1
2
3
4
./scripts/config --disable CONFIG_DEBUG_INFO
./scripts/config --disable CONFIG_DEBUG_INFO_MISC
./scripts/config --disable CONFIG_DEBUG_INFO_DWARF4
./scripts/config --disable CONFIG_DEBUG_INFO_DWARF5

关闭 LOCKDEP 与 PROVE_LOCKING

常见已默认关闭
1
2
./scripts/config --disable CONFIG_LOCKDEP
./scripts/config --disable CONFIG_PROVE_LOCKING

调整预占模型与时钟频率(服务器高吞吐模式)

1
2
3
4
5
./scripts/config --enable CONFIG_PREEMPT_NONE
./scripts/config --disable CONFIG_PREEMPT_VOLUNTARY
./scripts/config --disable CONFIG_PREEMPT
./scripts/config --disable CONFIG_HZ_1000
./scripts/config --enable CONFIG_HZ_250

开启性能导向编译

1
./scripts/config --enable CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE

开启 Clang ThinLTO 链接优化 (依赖 LLVM 编译环境)

1
./scripts/config --enable CONFIG_LTO_CLANG_THIN

注入 ARM Neoverse N1 架构优化参数

1
2
make LLVM=1 olddefconfig
make -j$(nproc) LLVM=1 LLVM_IAS=1 KCFLAGS="-mcpu=neoverse-n1 -O3" bindeb-pkg REBUILD_DEBUG=0