BBR 是 Google 提出的一种新型拥塞控制算法,可以使 Linux 服务器显著地提高吞吐量和减少 TCP 连接的延迟。
BBR解决了两个问题:
再有一定丢包率的网络链路上充分利用带宽。非常适合高延迟,高带宽的网络链路。
降低网络链路上的buffer占用率,从而降低延迟。非常适合慢速接入网络的用户。
项目地址:https://github.com/google/bbr
开启 BBR 要求 4.10 以上版本 Linux 内核
升级内核:
uname -r #如果低于4.10,则进行以下步骤
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 #安装源
sudo yum --enablerepo=elrepo-kernel install kernel-ml -y #启用内核yum源的同时安装内核
rpm -qa | grep kernel #看一下是内核版本是否比之前的内核版本更新,内核版本更新,符合大于4.10,则说明内核升级成功
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 #安装源
sudo yum --enablerepo=elrepo-kernel install kernel-ml -y #启用内核yum源的同时安装内核
rpm -qa | grep kernel #看一下是内核版本是否比之前的内核版本更新,内核版本更新,符合大于4.10,则说明内核升级成功
配置系统默认启动内核版本
(1)普通方法:
sudo egrep ^menuentry /etc/grub2.cfg | cut -f 2 -d \'
#看一下类似kernel-ml-4.11.0-1.el7.elrepo.x86_64之类的内容在哪行,第一行为0,第二行为1,以此类推
sudo grub2-set-default 1 #1为上面内容所在的行数
#看一下类似kernel-ml-4.11.0-1.el7.elrepo.x86_64之类的内容在哪行,第一行为0,第二行为1,以此类推
sudo grub2-set-default 1 #1为上面内容所在的行数
(2)修改grub2 (针对没有grub2.cfg文件)
修改/etc/grub2-efi.cfg文件,将3.10内核部分注释,部分内容截图
###menuentry 'CentOS Linux (3.10.0-1062.18.1.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-1062.el7.x86_64-advanced-07f41014-2c86-4b18-96f7-5a9e50a0f13e' {
### load_video
### set gfxpayload=keep
### insmod gzio
### insmod part_gpt
### insmod xfs
### set root='hd1,gpt2'
### if [ x$feature_platform_search_hint = xy ]; then
### search --no-floppy --fs-uuid --set=root --hint-bios=hd1,gpt2 --hint-efi=hd1,gpt2 --hint-baremetal=ahci1,gpt2 463082c5-cd34-4a98-8683-69f3258937d0
### else
### search --no-floppy --fs-uuid --set=root 463082c5-cd34-4a98-8683-69f3258937d0
### fi
### linuxefi /vmlinuz-3.10.0-1062.18.1.el7.x86_64 root=/dev/mapper/centos-root ro rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet LANG=zh_CN.utf8
### initrdefi /initramfs-3.10.0-1062.18.1.el7.x86_64.img
###}
menuentry 'CentOS Linux (5.4.12-1.el7.elrepo.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-1062.el7.x86_64-advanced-07f41014-2c86-4b18-96f7-5a9e50a0f13e' {
load_video
set gfxpayload=keep
insmod gzio
insmod part_gpt
insmod xfs
set root='hd1,gpt2'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd1,gpt2 --hint-efi=hd1,gpt2 --hint-baremetal=ahci1,gpt2 463082c5-cd34-4a98-8683-69f3258937d0
else
search --no-floppy --fs-uuid --set=root 463082c5-cd34-4a98-8683-69f3258937d0
fi
linuxefi /vmlinuz-5.4.12-1.el7.elrepo.x86_64 root=/dev/mapper/centos-root ro rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet LANG=en_US.UTF-8
initrdefi /initramfs-5.4.12-1.el7.elrepo.x86_64.img
}
### load_video
### set gfxpayload=keep
### insmod gzio
### insmod part_gpt
### insmod xfs
### set root='hd1,gpt2'
### if [ x$feature_platform_search_hint = xy ]; then
### search --no-floppy --fs-uuid --set=root --hint-bios=hd1,gpt2 --hint-efi=hd1,gpt2 --hint-baremetal=ahci1,gpt2 463082c5-cd34-4a98-8683-69f3258937d0
### else
### search --no-floppy --fs-uuid --set=root 463082c5-cd34-4a98-8683-69f3258937d0
### fi
### linuxefi /vmlinuz-3.10.0-1062.18.1.el7.x86_64 root=/dev/mapper/centos-root ro rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet LANG=zh_CN.utf8
### initrdefi /initramfs-3.10.0-1062.18.1.el7.x86_64.img
###}
menuentry 'CentOS Linux (5.4.12-1.el7.elrepo.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-1062.el7.x86_64-advanced-07f41014-2c86-4b18-96f7-5a9e50a0f13e' {
load_video
set gfxpayload=keep
insmod gzio
insmod part_gpt
insmod xfs
set root='hd1,gpt2'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd1,gpt2 --hint-efi=hd1,gpt2 --hint-baremetal=ahci1,gpt2 463082c5-cd34-4a98-8683-69f3258937d0
else
search --no-floppy --fs-uuid --set=root 463082c5-cd34-4a98-8683-69f3258937d0
fi
linuxefi /vmlinuz-5.4.12-1.el7.elrepo.x86_64 root=/dev/mapper/centos-root ro rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet LANG=en_US.UTF-8
initrdefi /initramfs-5.4.12-1.el7.elrepo.x86_64.img
}
reboot #重启服务器,使用新内核
uname -r #显示4.10以上的版本正常
配置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
echo ‘net.ipv4.tcp_congestion_control=bbr’ | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
完成后,分别执行如下命令来检查 BBR 是否开启成功:
sudo sysctl net.ipv4.tcp_available_congestion_control
# 输出应为 net.ipv4.tcp_available_congestion_control = bbr cubic reno
sudo sysctl -n net.ipv4.tcp_congestion_control
# 输出应为 bbr
lsmod | grep bbr
# 输出应类似 tcp_bbr 16384 28
# 输出应为 net.ipv4.tcp_available_congestion_control = bbr cubic reno
sudo sysctl -n net.ipv4.tcp_congestion_control
# 输出应为 bbr
lsmod | grep bbr
# 输出应类似 tcp_bbr 16384 28