前言
作为目前最强悍的网络拥塞控制算法,谷歌 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 |