操作环境
OS info:
master@ubuntu:~$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 18.04.4 LTS Release: 18.04 Codename: bionic
Google TCP BBR 协议说明
TCP BBR 拥塞控制协议是 Google 2016 年推出的一种网络拥塞控制算法,但这并不是 Google 的一款官方产品。相比于传统的设置拥塞窗口和慢启动等拥塞控制方式,BBR 拥塞控制算法可以在拥塞发生之后的恢复阶段通过主动探测的方式快速恢复对带宽资源的利用。在客户端到服务器之间的网络环境不佳时,开启 BBR 加速能够较明显地改善连接使用体验。据报道,Google 在 YouTube 上使用 BBR 协议后,YouTube 的全球的平均网络吞吐量提高了 4 %,在一些国家甚至超过了 14 %.
自 Linux 4.9 版本内核开始,Linux 内核已经内置了 BBR 协议,也就是说,在目前较新版本的 Linux 系统中都可以直接开启 BBR 协议,而不需要安装。
(Linux 4.9 版本内核正式发布于 2016 年 12 月 11 日)
开启 BBR 协议的过程
查看系统的内核版本,发现其内核版本为 “4.15”, 故已内置了 BBR 协议:
master@ubuntu:~$ uname -r 4.15.0-91-generic
查看当前可用的拥塞控制协议,发现只有 “reno” 和 “cubic” 两个协议可用:
master@ubuntu:~$ sysctl net.ipv4.tcp_available_congestion_control net.ipv4.tcp_available_congestion_control = reno cubic
查看当前已启用的拥塞控制协议,发现只有 “cubic” 协议:
master@ubuntu:~$ sysctl net.ipv4.tcp_congestion_control net.ipv4.tcp_congestion_control = cubic
接下来,我们要通过修改系统变量的方式开启 BBR 协议。不过,这里需要注意的是,如果当前使用的是普通用户身份,则首先要使用 su root
命令切换到 ROOT 用户。使用普通用户或者使用 sudo
提升权限的方式在执行下面的操作过程中都会被提示 “Permission denied”.
修改系统变量:
root@ubuntu:/home/master# echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf root@ubuntu:/home/master# echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
之后,让内核从上面被修改的配置文件中读取配置信息:
root@ubuntu:/home/master# sysctl -p net.core.default_qdisc = fq net.ipv4.tcp_congestion_control = bbr root@ubuntu:/var/www/html/wp/wp-includes# sysctl net.ipv4.tcp_available_congestion_control net.ipv4.tcp_available_congestion_control = reno cubic bbr
之后,再次检查,发现 BBR 协议已经可用:
root@ubuntu:/home/master# sysctl net.ipv4.tcp_available_congestion_control net.ipv4.tcp_available_congestion_control = reno cubic bbr root@ubuntu:/home/master# sysctl net.ipv4.tcp_congestion_control net.ipv4.tcp_congestion_control = bbr
使用 lsmod
命令过滤出已装载进内核的模块,发现 BBR 协议正在运行,其 Size 值为 20480:
root@ubuntu:/home/master# lsmod | grep bbr tcp_bbr 20480 1
References:
[1]. TCP congestion control – Wikipedia
https://en.wikipedia.org/wiki/TCP_congestion_control#TCP_BBR
[2]. google/bbr
https://github.com/google/bbr
EOF