使用 TCP BBR 拥塞控制提高 Linux 互联网速度
我最近读到,TCP BBR 显著提高了 Google 内部骨干网络和 google.com 及 YouTube Web 服务器的吞吐量,并降低了连接延迟,全球平均吞吐量提高了 4%,在某些国家甚至提高了 14% 以上。TCP BBR 补丁需要应用于 Linux 内核。BBR 的第一个公开版本于 2016 年 9 月发布。任何人都可以下载和安装该补丁。另一个选择是使用 Google Cloud Platform (GCP)。默认情况下,GCP 会启用一种名为 TCP BBR 的尖端新拥塞控制算法。本页介绍如何使用 TCP BBR 配置提高 Linux 服务器的 Internet 速度。这个简单的设置可以提高您的网络性能。
TCP BBR 对 Linux 服务器网速的要求
确保您的 Linux 内核具有以下选项,该选项已被编译为模块或内置于 Linux 内核中:
- 配置TCP_CONG_BBR
- 配置_NET_SCH_FQ
Linux TCP BBR拥塞控制
您必须使用 Linux 内核版本 4.9 或更高版本。在 Debian/Ubuntu Linux 上输入以下grep 命令/ egrep 命令:
$ grep 'CONFIG_TCP_CONG_BBR' /boot/config-$(uname -r)
$ grep 'CONFIG_NET_SCH_FQ' /boot/config-$(uname -r)
$ grep -E 'CONFIG_TCP_CONG_BBR|CONFIG_NET_SCH_FQ' /boot/config-$(uname -r)
图 01:确保您的 Linux 内核已设置 TCP BBR 选项
我在 Debian 上使用 Linux 内核版本 4.9.0-8-amd64,在 Ubuntu 服务器上使用 4.18.0-15-generic。如果未找到上述选项,则需要编译最新内核或使用apt-get 命令/ apt 命令安装最新版本的 Linux 内核。
在启用 TCP BBR 之前运行测试以提高网络速度
在 Linux 服务器上输入以下命令:
# iperf -s
在 Linux 客户端上执行以下操作:
$ iperf -c gcvm.backup -i 2 -t 30
如何在 Linux 上启用 TCP BBR 拥塞控制
编辑/etc/sysctl.conf 文件或在 /etc/sysctl.d/ 目录中创建一个新文件:
$ sudo vi /etc/sysctl.conf
或
$ sudo vi /etc/sysctl.d/10-custom-kernel-bbr.conf
添加以下两行:保存并关闭文件,即通过键入:x!退出 vim/vi 文本编辑器。接下来,您必须重新启动 Linux 系统或使用 sysctl 命令重新加载更改:
或
示例输出:
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
$ sudo reboot
$ sudo sysctl --system
* Applying /etc/sysctl.d/10-console-messages.conf ... kernel.printk = 4 4 1 7 * Applying /etc/sysctl.d/10-custom.conf ... net.core.default_qdisc = fq net.ipv4.tcp_congestion_control = bbr * Applying /etc/sysctl.d/10-ipv6-privacy.conf ... net.ipv6.conf.all.use_tempaddr = 2 net.ipv6.conf.default.use_tempaddr = 2 * Applying /etc/sysctl.d/10-kernel-hardening.conf ... kernel.kptr_restrict = 1 * Applying /etc/sysctl.d/10-link-restrictions.conf ... fs.protected_hardlinks = 1 fs.protected_symlinks = 1 * Applying /etc/sysctl.d/10-lxd-inotify.conf ... fs.inotify.max_user_instances = 1024 * Applying /etc/sysctl.d/10-magic-sysrq.conf ... kernel.sysrq = 176 * Applying /etc/sysctl.d/10-network-security.conf ... net.ipv4.conf.default.rp_filter = 1 net.ipv4.conf.all.rp_filter = 1 net.ipv4.tcp_syncookies = 1 * Applying /etc/sysctl.d/10-ptrace.conf ... kernel.yama.ptrace_scope = 1 * Applying /etc/sysctl.d/10-zeropage.conf ... vm.mmap_min_addr = 65536 * Applying /etc/sysctl.d/99-sysctl.conf ... * Applying /etc/sysctl.conf ...
您可以使用以下 sysctl 命令验证新设置。运行:
$ sysctl net.core.default_qdisc
net.core.default_qdisc = fq
$ sysctl net.ipv4.tcp_congestion_control
net.ipv4.tcp_congestion_control = bbr
在Linux上测试BBR拥塞控制
在我对两台连接到互联网的千兆端口的长距离 Linux 服务器进行测试时,我能够将 250 Mbit/s 提升到 800 Mbit/s。您可以使用wget 命令等工具来测量带宽速度:
$ wget https://your-server-ip/file.iso
我还注意到我能够将 OpenVPN 流量推至近 100 Mbit/s。以前我只能将流量推至 30-40 Mbit/s。总的来说,我对 Linux 机器的 TCP BBR 拥塞控制选项非常满意。使用df 命令检查磁盘空间大小或使用 du 命令检查目录大小,然后使用 wget 删除您下载的 ISO 文件。例如:
$ df -H
$ du -csh
$ rm command file.iso
使用 iperf 进行 Linux TCP BBR 测试
iperf 是常用的 TCP/UDP 数据流网络测试工具,用于测量网络的吞吐量。此工具可以验证 Linux TCP BBR 设置的重要性。
在启用 TCP BBR 拥塞控制的 Linux 服务器上输入命令
# iperf -s
示例输出:
------------------------------------------------------------ Server listening on TCP port 5001 TCP window size: 85.3 KByte (default) ------------------------------------------------------------ [ 4] local 10.128.0.2 port 5001 connected with AAA.BB.C.DDD port 46978 [ ID] Interval Transfer Bandwidth [ 4] 0.0-30.6 sec 127 MBytes 34.7 Mbits/sec
在 Linux/Unix 客户端上输入命令
$ iperf -c YOUR-Linux-Server-IP-HERE -i 2 -t 30
连接到 Linux 上启用 TCP BBR 拥塞时的示例输出:
------------------------------------------------------------ Client connecting to gcp-vm-nginx-www1, TCP port 5001 TCP window size: 45.0 KByte (default) ------------------------------------------------------------ [ 3] local 10.8.0.2 port 46978 connected with xx.yyy.zzz.tt port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0- 2.0 sec 4.00 MBytes 16.8 Mbits/sec [ 3] 2.0- 4.0 sec 8.50 MBytes 35.7 Mbits/sec [ 3] 4.0- 6.0 sec 10.9 MBytes 45.6 Mbits/sec [ 3] 6.0- 8.0 sec 16.2 MBytes 68.2 Mbits/sec [ 3] 8.0-10.0 sec 5.29 MBytes 22.2 Mbits/sec [ 3] 10.0-12.0 sec 9.38 MBytes 39.3 Mbits/sec [ 3] 12.0-14.0 sec 8.12 MBytes 34.1 Mbits/sec [ 3] 14.0-16.0 sec 8.12 MBytes 34.1 Mbits/sec [ 3] 16.0-18.0 sec 8.38 MBytes 35.1 Mbits/sec [ 3] 18.0-20.0 sec 6.75 MBytes 28.3 Mbits/sec [ 3] 20.0-22.0 sec 8.12 MBytes 34.1 Mbits/sec [ 3] 22.0-24.0 sec 8.12 MBytes 34.1 Mbits/sec [ 3] 24.0-26.0 sec 9.50 MBytes 39.8 Mbits/sec [ 3] 26.0-28.0 sec 7.00 MBytes 29.4 Mbits/sec [ 3] 28.0-30.0 sec 8.12 MBytes 34.1 Mbits/sec [ 3] 0.0-30.3 sec 127 MBytes 35.0 Mbits/sec
结论
使用 iperf 命令收集 30 秒的瓶颈带宽和 RTT(BBR)拥塞控制前后平均统计数据:
- PRE BBR:传输:27.5 MB。带宽:7.15 兆比特/秒
- POST BBR:传输:127 MB。带宽:35.0 兆比特/秒
在我看来,BBR 是近年来 Linux 网络堆栈最重要的改进之一。本页演示了如何在基于 Linux 的系统上启用和设置 BBR。有关更多信息,请参阅以下页面:
- 测量网络性能:使用 Iperf 查找带宽、抖动、数据报丢失
- 来自Google 的BBR 信息
- TCP BBR 拥塞控制已登陆 GCP。您的互联网速度变得更快
请使用 man 命令或 help 命令检查文档:
$ man sysctl
$ man iperf