Skip to content
  • centos7

TCP BBR是谷歌出品的TCP拥塞控制算法,BBR目的是要尽量跑满带宽,并且尽量不要有排队的情况。BBR可以起到单边加速TCP连接的效果。替代锐速再合适不过,毕竟免费。

Google提交到Linux主线并发表在ACM queue期刊上的TCP-BBR拥塞控制算法。继承了Google“先在生产环境上部署,再开源和发论文”的研究传统。TCP-BBR已经再YouTube服务器和Google跨数据中心的内部广域网(B4)上部署。由此可见出该算法的前途。

TCP-BBR的目标就是最大化利用网络上瓶颈链路的带宽。一条网络链路就像一条水管,要想最大化利用这条水管,最好的办法就是给这跟水管灌满水。

BBR解决了两个问题:

再有一定丢包率的网络链路上充分利用带宽。非常适合高延迟,高带宽的网络链路。 降低网络链路上的buffer占用率,从而降低延迟。非常适合慢速接入网络的用户。 项目地址:https://github.com/google/bbr

使用TCP BBR 拥塞控制算法,能够使Linux服务器更高效的利用带宽、增加吞吐量并减少连接的延迟

Linux kernel 4.9+ 已支持 tcp_bbr 下面简单讲述基于KVM架构VPS如何开启

附: OpenVZ 架构VPS开启BBR (容易导致判定滥用ban机,慎用!)

Debian/Ubuntu TCP BBR 魔改版 (不支持4.13.*及更新的内核)

升级内核

  • 查看当前的内核

uname -r

安装内核

sudo rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
sudo rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

#8
yum install https://www.elrepo.org/elrepo-release-8.0-2.el8.elrepo.noarch.rpm

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

#8
yum install https://www.elrepo.org/elrepo-release-8.0-2.el8.elrepo.noarch.rpm

sudo yum --enablerepo=elrepo-kernel install kernel-ml -y

查看已安装内核

[root@bj-caijing ~]# egrep ^menuentry /etc/grub2.cfg | cut -f 2 -d \'
CentOS Linux 7 Rescue 20a501f9e7ce45ab9b68c592f973c8a4 (5.3.7-1.el7.elrepo.x86_64)
CentOS Linux (5.3.7-1.el7.elrepo.x86_64) 7 (Core)
CentOS Linux (3.10.0-957.27.2.el7.x86_64) 7 (Core)
CentOS Linux (3.10.0-957.el7.x86_64) 7 (Core)
CentOS Linux (0-rescue-902773b02db54c6ba7c050c025573637) 7 (Core)
[root@bj-caijing ~]# egrep ^menuentry /etc/grub2.cfg | cut -f 2 -d \'
CentOS Linux 7 Rescue 20a501f9e7ce45ab9b68c592f973c8a4 (5.3.7-1.el7.elrepo.x86_64)
CentOS Linux (5.3.7-1.el7.elrepo.x86_64) 7 (Core)
CentOS Linux (3.10.0-957.27.2.el7.x86_64) 7 (Core)
CentOS Linux (3.10.0-957.el7.x86_64) 7 (Core)
CentOS Linux (0-rescue-902773b02db54c6ba7c050c025573637) 7 (Core)

设置默认的grub2引导项来启用5.3内核

由于行计数从0开始,5.3内核CentOS Linux (5.3.7-1.el7.elrepo.x86_64) 7 (Core)条目位于第二行,因此将默认启动项设置为1

grub2-set-default 0
grub2-mkconfig -o /boot/grub2/grub.cfg
grub2-set-default 0
grub2-mkconfig -o /boot/grub2/grub.cfg

重启系统

查看内核

[root@bj-caijing ~]# uname -r
5.3.7-1.el7.elrepo.x86_64


##  激活 BBR


echo 'net.core.default_qdisc=fq' | sudo tee -a /etc/sysctl.conf
echo 'net.ipv4.tcp_congestion_control=bbr' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p


## 查看启用tcp_bbr模块


[root@bj-caijing ~]# lsmod | grep tcp_bbr
tcp_bbr                20480  3


## 关闭bbr


$ sed -i '/net\.core\.default_qdisc=fq/d' /etc/sysctl.conf
$ sed -i '/net\.ipv4\.tcp_congestion_control=bbr/d' /etc/sysctl.conf
$ sysctl -p


# CentOS 8 开启 BBR/升级内核

## 1. CentOS 8 开启 BBR

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

然后重启一下系统

## 2. 检查 BBR 是否开启成功

sysctl -n net.ipv4.tcp_congestion_control
lsmod | grep bbr


## 3. CentOS 8 升级内核


rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh https://www.elrepo.org/elrepo-release-8.0-2.el8.elrepo.noarch.rpm


启用 ELRepo 源仓库


yum --disablerepo="*" --enablerepo="elrepo-kernel" list available


安装新内核


yum -y --enablerepo=elrepo-kernel install kernel-ml kernel-ml-devel


## 4. 修改 grub 配置使用新内核版本启动


dnf install grubby
grubby --default-kernel

当前最新版本 5.3.8,一般安装完就会以最新内核启动,

如不是,查看所有内核:

grubby --info=ALL

然后指定新内核启动


grubby --set-default /boot/vmlinuz-5.3.8-1.el8.elrepo.x86_64
[root@bj-caijing ~]# uname -r
5.3.7-1.el7.elrepo.x86_64


##  激活 BBR


echo 'net.core.default_qdisc=fq' | sudo tee -a /etc/sysctl.conf
echo 'net.ipv4.tcp_congestion_control=bbr' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p


## 查看启用tcp_bbr模块


[root@bj-caijing ~]# lsmod | grep tcp_bbr
tcp_bbr                20480  3


## 关闭bbr


$ sed -i '/net\.core\.default_qdisc=fq/d' /etc/sysctl.conf
$ sed -i '/net\.ipv4\.tcp_congestion_control=bbr/d' /etc/sysctl.conf
$ sysctl -p


# CentOS 8 开启 BBR/升级内核

## 1. CentOS 8 开启 BBR

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

然后重启一下系统

## 2. 检查 BBR 是否开启成功

sysctl -n net.ipv4.tcp_congestion_control
lsmod | grep bbr


## 3. CentOS 8 升级内核


rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh https://www.elrepo.org/elrepo-release-8.0-2.el8.elrepo.noarch.rpm


启用 ELRepo 源仓库


yum --disablerepo="*" --enablerepo="elrepo-kernel" list available


安装新内核


yum -y --enablerepo=elrepo-kernel install kernel-ml kernel-ml-devel


## 4. 修改 grub 配置使用新内核版本启动


dnf install grubby
grubby --default-kernel

当前最新版本 5.3.8,一般安装完就会以最新内核启动,

如不是,查看所有内核:

grubby --info=ALL

然后指定新内核启动


grubby --set-default /boot/vmlinuz-5.3.8-1.el8.elrepo.x86_64