甲骨云ARM服务器编译BBRv3内核
作为目前最强悍的拥塞控制算法,Google BBRv3 在低延迟+高吞吐之间找的平衡比 v1/v2 更稳。但主流发行版(哪怕 Oracle Linux UEK)都没把 BBRv3 合入,甲骨文 ARM 实例(Ampere A1,Neoverse N1)想吃到,只能自己编。
这篇的目标是:编出一个干净、轻量、带 BBRv3 + FQ/CAKE、并在 Neoverse N1 上走 ThinLTO + 架构指令的 Debian 包。
环境准备
1. 编译依赖
甲骨文 ARM 默认源里的包名和 x86 一致,但 clang/lld 要用上,因为后面要走 ThinLTO:
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💡 命令以 Debian/Ubuntu 系为准(甲骨文 Ubuntu 20.04/22.04/24.04 镜像最常见)。
2. 获取 BBRv3 源码
google/bbr 仓库的 v3 分支:
git clone -b v3 https://github.com/google/bbr.git --depth=1
cd bbr内核配置
1. 复用当前系统配置
cp /boot/config-$(uname -r) .config2. 清掉签名密钥(必做)
甲骨文官方镜像的 .config 里带了 CONFIG_SYSTEM_TRUSTED_KEYS,本地没私钥,不清下一步必炸:
scripts/config --set-str SYSTEM_TRUSTED_KEYS ""
scripts/config --set-str SYSTEM_REVOCATION_KEYS ""
scripts/config --disable CONFIG_MODULE_SIG
scripts/config --disable CONFIG_MODULE_SIG_ALL3. 开启 BBRv3 + FQ / CAKE
./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"4. 进阶内核优化
关闭调试,优化符号与体积
# 关 debug 符号,deb 包能从 ~800 MB 缩到 ~200 MB
./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调整预占模型与时钟频率
# 服务器高吞吐取向
./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开启性能导向编译与ThinLTO
# 性能编译 + ThinLTO(依赖上面装好的 clang/lld)
./scripts/config --enable CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE
./scripts/config --enable CONFIG_LTO_CLANG_THIN💡 CONFIG_LTO_CLANG_THIN 在 ARM 上收益比 x86 还明显——N1 是宽发射顺序核,LTO 后 ipv4/tcp 那些热路径函数内联和调度会更贴合。但首次编会慢 30–50%,心理准备。跨境链路 LFN 补丁
如果你链路是跨境 / 卫星 / 高 RTT 那种(RTT > 100 ms、丢包 3–7%),光 BBRv3 还不够——它默认在 2% 以上就会把 inflight 砍得很怂,下一篇 实战:编译集成 LFN 补丁的 BBRv3 内核 就是接着这个内核继续打补丁的。(原理篇见 为 BBRv3 打上 LFN 补丁:在高延迟跨境链路上突破 2% 丢包限制)
5. 自动补齐新配置项
make LLVM=1 olddefconfigolddefconfig 会把新出现的 Kconfig 项按默认值填好,避免你手点 menuconfig。
编译
两条路径,选一条就行(别编两次)
路径 A:GCC 默认(稳,慢一点,无 ThinLTO)
make -j$(nproc) bindeb-pkg路径 B:Clang + ThinLTO + Neoverse-N1 指令(推荐,这篇主打的就是这个)
make -j$(nproc) LLVM=1 LLVM_IAS=1 \ KCFLAGS="-mcpu=neoverse-n1 -O3" \ bindeb-pkg REBUILD_DEBUG=0
参数解释:
LLVM=1:用 clang 替代 gcc 当 cc。LLVM_IAS=1:用 clang 内置汇编器,省掉交叉汇编那套麻烦。-mcpu=neoverse-n1:把 N1 的 LSE、CRC、RDMA 这些指令打开,甲骨文 A1 就是这块 U。-O3:比内核默认的 -O2 更激进,TCP 路径上小函数基本全 inline。bindeb-pkg:直接出linux-image-*.deb+linux-headers-*.deb,甲骨文这种云机最方便,装完 grub 自动更新。REBUILD_DEBUG=0:deb 里不带 dbg 包,省空间。
☕ 甲骨文 ARM 4 核编 ThinLTO 大概 25–40 分钟,2 核的话翻倍,去喝杯咖啡。
安装与重启
cd ..
sudo dpkg -i linux-image-*.deb linux-headers-*.deb
sudo reboot甲骨文 A1 的 UEFI GRUB 一般会自动把新内核挂第 0 项,万一不是,进_serial console_ 选 Advanced → 旧内核兜底还在(这就是 deb 比 make install 稳的地方)。
验证 BBRv3 真的生效
重启后登录,别只看 uname -r,要三层都过才算:
# 1. 内核版本
uname -r
# 2. 拥塞控制
sysctl net.ipv4.tcp_congestion_control
# 应为 bbr
# 3. 模块是否在
lsmod | grep bbr
# 或者
modprobe tcp_bbr # 不报错的就算在
# 4. 实际连接看一眼(开个 ssh 另一个窗口)
ss -ti
# 最后一列应有 bbr 字样 + pacing_rate / cwnd 那些字段如果sysctl net.ipv4.tcp_congestion_control返回的还是 cubic,手动sudo sysctl -w net.ipv4.tcp_congestion_control=bbr写进/etc/sysctl.d/99-bbr.conf固化。
故障排查(甲骨云 ARM 容易踩的几处)
① 编译时报 signature/key 相关错误
→ 忘了清 SYSTEM_TRUSTED_KEYS,回去重跑那两步再 make olddefconfig。
② ThinLTO 编到一半 OOM kill
→ 甲骨文 2 核 12 GB 这种规格开 -j$(nproc) 容易炸,-j2 或加 swap:
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile && sudo swapon /swapfileAQM / 队列规则搭配建议
队列规则与 BBRv3 搭配备注fq✅ 最推荐pacing 原生,BBR 作者内建测的就是这个fq_codel✅ 可用有 CoDel 降延迟,但 pacing 让给 BBR 自己cake❌ 不推荐BBRv3 与 cake 的 pacing 叠加,吞吐下降pfifo_fast❌ 不推荐无 pacing,BBR 优势发挥不全甲骨文 ARM 单网口一般跑 fq 足够。
若需要更为详尽的信息,请参阅 AQM 搭配建议
总结
到这一步你手上有一个:
- ✅ BBRv3(不是老 v1)
- ✅ FQ / CAKE 可选
- ✅ Clang ThinLTO +
-mcpu=neoverse-n1 -O3 - ✅ 关调试、服务器抢占、250 Hz,走的是高吞吐取向
- ✅ deb 包,回滚
dpkg -r就能降
到这一步,你已经拥有一个在 Neoverse N1 上跑得飞起的 BBRv3 内核;如果你的链路并不干净,那么下一篇 实战:编译集成 LFN 补丁的 BBRv3 内核,才是真正拉开差距的地方。
Happy hacking 🚀