CentOS 7 开启 TCP-BBR 的方式

谷歌推出的 TCP-BBR 开源算法, 起到单线程加速的作用 %&*(!$(&# (此处省略X字) 你要是问我具体什么理论和技术… 网络上有很多文章。我不懂我怎么说?

github.com/google/bbr
bbr-quick-start.md
BBR Development

系统 Centos7

开启 TCP-BBR 首先要升级 Linux 核心, 也就是升级到 4.9.0-1.el7.elrepo.x86_64 (目前是这个版本, 以后会有更高的更新)

OpenVZ 架构的 VPS 没办法使用。

部分服务商首先要去后台改一下内核设置, 例如 Digital Ocean 和 Linode

如何更新 Digital Ocean 服务器 linux 核心?

我的 VPS 服务商是 Digital Ocean , 首先要在服务商的网页后台, Kernel 选择为 GrubLoader , 远程命令 poweroff VPS 关机 (为了避免数据损坏使用命令关机而不是网页后台), 后台进入 Power , 选择 Power On VPS 开机, 如果没问题应该可以开始更换内核了。

这里我出现了些问题, 因为选择几次 GrubLoader, 我已经安装配置好内核, 但是内核没有改变, 我当时是傻掉的。

原因是 DO 在国内属于被墙一半的情况, 这几天网络掉包严重, 后台选择后没有生效…

Linode 服务商 Kernel 选择 GRUB 2 启动 (大概这样?! 我没有使用过 Linode )
img

首先确认目前使用内核

uname -r

ELRepo Project

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
yum --enablerepo=elrepo-kernel install kernel-ml -y

下载指定版本内核更新, 到目前位置最新内核版本为 5.5.6 这个内核在甲骨文上不支持. 5.3.0 测试可用
因 elrepo 源都是最新版本, 4.19 找不到了
kernel rpm 历史归档版本

# wget http://mirror.rc.usf.edu/compute_lock/elrepo/kernel/el7/x86_64/RPMS/kernel-ml-devel-5.3.0-1.el7.elrepo.x86_64.rpm
# wget http://mirror.rc.usf.edu/compute_lock/elrepo/kernel/el7/x86_64/RPMS/kernel-ml-headers-5.3.0-1.el7.elrepo.x86_64.rpm
wget http://mirror.rc.usf.edu/compute_lock/elrepo/kernel/el7/x86_64/RPMS/kernel-ml-5.3.0-1.el7.elrepo.x86_64.rpm

rpm -ivh kernel-ml-5.3.0-1.el7.elrepo.x86_64.rpm

删除旧内核

uname -a
rpm -qa | grep kernel

[root@localhost ~]# rpm -qa | grep kernel
kernel-3.10.0-327.22.2.el7.x86_64
kernel-devel-3.10.0-327.22.2.el7.x86_64
kernel-headers-3.10.0-327.28.2.el7.x86_64
kernel-3.10.0-327.28.2.el7.x86_64
kernel-tools-3.10.0-327.28.2.el7.x86_64
kernel-devel-3.10.0-327.28.2.el7.x86_64

yum remove kernel-3.10.0-327.22.2.el7.x86_64

查看内核列表, 第一个的编号是 0

# 一般位置
egrep ^menuentry /etc/grub2.cfg | cut -f 2 -d \'

# 甲骨文 Oracle Cloud
egrep ^menuentry /boot/efi/EFI/centos/grub.cfg  | cut -f 2 -d \'

返回信息, 可以看见刚刚安装的内核 4.9 处于第 1 位, 编号 0

CentOS Linux (4.9.0-1.el7.elrepo.x86_64) 7 (Core)
CentOS Linux (3.10.0-327.13.1.el7.x86_64) 7 (Core)
CentOS Linux (3.10.0-327.10.1.el7.x86_64) 7 (Core)
CentOS Linux (3.10.0-229.20.1.el7.x86_64) 7 (Core)
CentOS Linux (0-rescue-fd8cf26e06e411e4a9d004010897bd01) 7 (Core)

设置处于编号 0 的 4.9 内核默认运行

grub2-set-default 0

重启 linux, SSD 存储器的服务器重启速度还是快的, 1分钟就可以重新远程控制了

reboot

查看内核是否在使用 4.9

uname -r

返回信息

[root@set-fire ~]# uname -r 
4.9.0-1.el7.elrepo.x86_64

写入参数到 sysctl.conf

echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
sysctl -p

检测设置是否生效

sysctl net.ipv4.tcp_available_congestion_control

返回信息, 可以看见 bbr 已经启用

[root@set-fire ~]# sysctl net.ipv4.tcp_available_congestion_control 
net.ipv4.tcp_available_congestion_control = bbr cubic reno

查看 bbr 是否在运行

lsmod | grep bbr

返回信息

[root@set-fire ~]# lsmod | grep bbr
tcp_bbr                16384  29 

这样应该安装完成了, 可以测试一下有没有传输速度上的提升。

我认为传输速度提升是有的, 只是效果的差别, 有些服务器作用明显, 有些服务器因为网路传输原因而作用微小… 并且中国大陆有神奇的网路 (丢包)。


原文

Debian8/Centos7 开启 TCP-BBR 的方式

最后更新于 2020-02-28
使用 Hugo 构建
主题 StackJimmy 设计