CentOS 7安装bbr教程

未分类

Google 开源了其 TCP BBR 拥塞控制算法,并提交到了 Linux 内核,从 4.9 开始,Linux 内核已经用上了该算法。根据以往的传统,Google 总是先在自家的生产环境上线运用后,才会将代码开源,此次也不例外。
根据实地测试,在部署了最新版内核并开启了 TCP BBR 的机器上,网速甚至可以提升好几个数量级。

安装

CentOS 7.3

1、yum系统更新(更新到CentOS 7.3)

yum update

2、查看系统版本

cat /etc/redhat-release

输出如下(release数值大于7.3即可),则表示已升级到7.3

CentOS Linux release 7.3.1611 (Core)

3、安装elrepo并升级内核

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

正常情况下将输出如下信息:

Transaction Summary
================================================================================
Install  1 Package
Total download size: 39 M
Installed size: 169 M
Downloading packages:
kernel-ml-4.9.0-1.el7.elrepo.x86_64.rpm                    |  39 MB   00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Warning: RPMDB altered outside of yum.
  Installing : kernel-ml-4.9.0-1.el7.elrepo.x86_64                          1/1
  Verifying  : kernel-ml-4.9.0-1.el7.elrepo.x86_64                          1/1
Installed:
  kernel-ml.x86_64 0:4.9.0-1.el7.elrepo
Complete!

4、更新grub文件并重启(reboot后,ssh会断开,稍等一会儿重新连接)

egrep ^menuentry /etc/grub2.cfg | cut -f 2 -d '
grub2-set-default 0
reboot

5、开机后查看内核是否已更换为4.9

uname -r

输出如下内容则表示内核4.9已经启动了(数值大于4.9即可)

4.9.0-1.el7.elrepo.x86_64

CentOS 7.4

导入 elrepo 软件源的 GPG 公钥

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

导入 elrepo 软件源

说明:该地址可以自动下载该源的最新的软件列表,无需修改地址。

rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm

下载并安装新的内核

启用软件源并下载安装最新稳定版内核

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

设定 Grub 默认启动新内核

说明:如果手动修改过 Grub 的配置文件,以下命令可能无法执行成功。请自行修改 Grub 配置文件。

grub2-set-default 0

使用新的内核重启

reboot

检查设置 & 删除旧的内核

查看当前系统的内核版本号

uname -r

如果输出是 4.10 以上的版本,说明安装成功。

4.14.13-1.el7.elrepo.x86_64

删除旧内核

说明:删除旧内核的目的是为了防止 yum 更新旧版内核之后覆盖了 grub 默认启动项

yum -y remove kernel kernel-tools

开启bbr

vim /etc/sysctl.conf

添加如下内容

net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr

加载系统参数(正常情况下会输出我们之前加入的内容)

sysctl -p

验证bbr是否已经开启

a.若

sysctl net.ipv4.tcp_available_congestion_control

返回

net.ipv4.tcp_available_congestion_control = bbr cubic reno

则成功

b.若

lsmod | grep bbr

返回形如如下形式的信息即成功。

tcp_bbr                16384  1
tcp_bbr                20480  0

Debian/Ubuntu 更新内核开启 TCP BBR 拥塞控制算法

BBR (Bottleneck Bandwidth and RTT) 是 Google 提供的 TCP 拥塞控制算法,适用于复杂网络环境下的 TCP 加速。

首先需要准备的条件

  • Debian 8.x 或者 Debian 9.x 系统,当然也适合 Ubuntu 14.04 或 Ubuntu 16.04
  • 如果是虚拟机,那么得使用 KVM 或 Xen 等可以修改内核的平台
  • 如果不是新的机器,请事先做好备份,因为内核万一挂了机器启动不起来是一件及其麻烦的事情

升级内核

BBR 只支持 4.9.x 以上的内核,所以我们需要更新升级以下

如果你使用的是 Debian 9.x,那么这一步可以直接跳过,其他三个内核版本较旧的系统,我们可以使用 Ubuntu 打包好的内核安装包

首先,找到 4.9.x 以上版本的稳定内核,这里我们推荐使用 LTS 版本,目前最新的是 4.9.40 下载安装即可

mkdir kernel-tmp && cd kernel-tmp
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.9.40/linux-headers-4.9.40-040940_4.9.40-040940.201707271932_all.deb
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.9.40/linux-headers-4.9.40-040940-generic_4.9.40-040940.201707271932_amd64.deb
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.9.40/linux-image-4.9.40-040940-generic_4.9.40-040940.201707271932_amd64.deb
sudo dpkg -i *.deb

安装完以后直接 reboot 重启,一切顺利的话请检查以下当前的内核版本

root@debian ~ # uname -r
4.9.0-3-amd64

写入配置文件

直接修改 /etc/sysctl.conf 文件即可

cat >> /etc/sysctl.conf << EOF
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
EOF

然后使用 sysctl -p 命令让内核配置生效,不出意外,应该会提示

root@debian ~ # sysctl -p
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr

此时可以使用 lsmod | grep bbr 命令检查 BBR 是否已正确开启

root@debian ~ # lsmod | grep bbr
tcp_bbr                16384  61

如果出现 tcp_bbr 字样则说明没有问题。

升级Ubuntu内核开启BBR加速

BBR是啥,有什么用我不知道,我只知道谷歌出品,必属精品;星宿老仙,法力无边。linux内核版本要高于4.9,才支持BBR,所以今天讲一讲Ubuntu内核版本的升级操作。

首先查看当前内核版本:

root@HuangQiDi:~# uname -r
4.4.0-83-generic

得到两个信息,版本号4.4明显不够,还有后面一个generic,下文要用到。顺便看一下系统位数:

root@HuangQiDi:~# arch
x86_64

升级Ubuntu内核

Ubuntu的最新内核可以在http://kernel.ubuntu.com/~kernel-ppa/mainline/ 找到,打开网页后,按End键,跳到最下面,找一个版本最大,不带rc字样的链接点击进去,

未分类

这里我们选择4.12.4,点击进去后,一大堆内核的链接,我们下载哪一个呢?文本开始,我们通过uname -r拿到一个generic,通过arch确定系统为64位,现在这两个东西就有用了,此时我们在浏览器窗口按下F3执行搜索,由于这个搜索框不支持正则,我们只能搜amd64字样,然后目测generic,这里顺便说一句,为什么64位架构要叫amd64呢,虽然现在amd被牙膏厂吊打,但世界上第一枚64位的处理器确是AMD发布的。

未分类

下载内核:

root@HuangQiDi:~# wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.12.4/linux-image-4.12.4-041204-generic_4.12.4-041204.201707271932_amd64.deb

安装内核:

root@HuangQiDi:~# dpkg -i linux-image-4.12.4-041204-generic_4.12.4-041204.201707271932_amd64.deb 

未分类

最后,执行命令update-grub,更新grub引导使用新的内核。

root@HuangQiDi:~# update-grub
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-4.12.4-041204-generic
Found initrd image: /boot/initrd.img-4.12.4-041204-generic
Found linux image: /boot/vmlinuz-4.4.0-83-generic
Found initrd image: /boot/initrd.img-4.4.0-83-generic
done

这里很多有洁癖的人喜欢删除旧内核,我特别不建议这么做,一个内核才多大啊,万一新内核无法正常启动,那不是自找麻烦吗。
重启系统后检查内核是否成功升级:

root@HuangQiDi:~# uname -r
4.12.4-041204-generic

启用BBR

root@HuangQiDi:~# echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
root@HuangQiDi:~# echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
root@HuangQiDi:~# sysctl -p
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr

net.core.default_qdisc的值真有意思fq,番茄番茄。
此时执行sysctl net.ipv4.tcp_available_congestion_control,若返回结果为“net.ipv4.tcp_available_congestion_control = bbr cubic reno”,表示BBR模块开启成功。

最后来稍微看下这个BBR模块

root@HuangQiDi:~# lsmod | sed -n '1p;/bbr/p'
Module                  Size  Used by
tcp_bbr                20480  0

Used by下面的0,表示该模块可以随时卸载。卸载命令为modprobe -r tcp_bbr

查看模块详细信息:

root@HuangQiDi:~# modinfo tcp_bbr
filename:       /lib/modules/4.12.4-041204-generic/kernel/net/ipv4/tcp_bbr.ko
description:    TCP BBR (Bottleneck Bandwidth and RTT)
license:        Dual BSD/GPL
author:         Soheil Hassas Yeganeh 
author:         Yuchung Cheng <[email protected]>
author:         Neal Cardwell 
author:         Van Jacobson 
srcversion:     3D237D080AC188DD9000A9A
depends:        
intree:         Y
vermagic:       4.12.4-041204-generic SMP mod_unload