Linux 内核网络调优:让 BBR 与大缓冲榨干带宽
·
1 分钟阅读
·
178 字
这台服务器的内核被我换成了 XanMod,配合 BBR 和调大的 UDP 缓冲,跨地域传输速度有质的飞跃。把调优参数记录一下,方便以后查阅。
TCP 拥塞控制:BBR
默认的 cubic 在高延迟、有丢包的链路上表现一般。BBR 由 Google 提出,基于带宽和延迟建模,能在不太理想的网络下跑满带宽。
1
2
3
4
5
6
7
| # 检查当前算法
sysctl net.ipv4.tcp_congestion_control
# 开启 BBR
echo "net.core.default_qdisc = fq" >> /etc/sysctl.d/99-turbo.conf
echo "net.ipv4.tcp_congestion_control = bbr" >> /etc/sysctl.d/99-turbo.conf
sysctl --system
|
注意:BBR 必须搭配 fq(fair queue)队列算法才能发挥最佳效果。
UDP 缓冲区:关键中的关键
跑 QUIC 这类基于 UDP 的协议时,默认的缓冲区大小会成为严重瓶颈。内核默认值通常只有 200KB 左右,高吞吐下会频繁丢包。
1
2
3
4
5
6
7
| # /etc/sysctl.d/99-turbo.conf
net.core.rmem_max = 67108864
net.core.wmem_max = 67108864
net.core.rmem_default = 1048576
net.core.wmem_default = 1048576
net.ipv4.udp_rmem_min = 8192
net.ipv4.udp_wmem_min = 8192
|
rmem_max 和 wmem_max 调到 64MB,足以应对千兆以上的吞吐。这个改动对 QUIC 协议的提升尤其明显。
其他有用的参数
1
2
3
4
5
6
7
8
9
10
11
12
| # TCP Fast Open
net.ipv4.tcp_fastopen = 3
# 禁用慢启动后的空闲重置
net.ipv4.tcp_slow_start_after_idle = 0
# 连接队列
net.core.somaxconn = 4096
net.ipv4.tcp_max_syn_backlog = 8192
# 文件描述符上限
fs.file-max = 1048576
|
别忘了 /etc/security/limits.d/ 里也要放开 nofile 限制,否则应用层面还是会被卡住。
内核选择
XanMod 内核相比官方内核更新更激进,包含了不少调度器和网络栈的优化补丁。Debian 上安装:
1
2
3
| echo "deb http://deb.xanmod.org releases main" | tee /etc/apt/sources.list.d/xanmod-release.list
wget -qO - https://dl.xanmod.org/archive.key | gpg --dearmor -o /usr/share/keyrings/xanmod-archive-keyring.gpg
apt update && apt install linux-xanmod-x64v3
|
验证效果
调优前后用 iperf3 对比一下:
| 指标 | 调优前 | 调优后 |
|---|
| 单连接吞吐 | ~200 Mbps | ~940 Mbps |
| 高延迟链路 | 频繁卡顿 | 平稳 |
参数不是越大越好,要结合实际机器配置和链路情况调整。建议改一项测一项,逐步逼近最优。