什么是BBR
TCP BBR(Bottleneck Bandwidth and Round-trip propagation time)是由Google设计,于2016年发布的拥塞算法。以往大部分拥塞算法是基于丢包来作为降低传输速率的信号,而BBR则基于模型主动探测。该算法使用网络最近出站数据分组当时的最大带宽和往返时间来创建网络的显式模型。数据包传输的每个累积或选择性确认用于生成记录在数据包传输过程和确认返回期间的时间内所传送数据量的采样率。该算法认为随着网络接口控制器逐渐进入千兆速度时,分组丢失不应该被认为是识别拥塞的主要决定因素,所以基于模型的拥塞控制算法能有更高的吞吐量和更低的延迟,可以用BBR来替代其他流行的拥塞算法,例如CUBIC。Google在YouTube上应用该算法,将全球平均的YouTube网络吞吐量提高了4%,在一些国家超过了14%。
BBR2 是 BBR 的新版本,当前为 alpha 版。
网上的一键脚本不支持CentOS,所自己只能自己编译了,编译至少需要预留10G硬盘空间,本教程已在Viramch、CentOS7测试成功。
一、编译BBR2
1、安装编译相关的工具
1
2
|
yum groups install development -y
yum install gcc bc ncurses-devel openssl-devel elfutils-libelf-devel -y
|
2、获取源代码
1
|
git clone -o google-bbr -b v2alpha https://github.com/google/bbr.git
|
3、进入源代码文件夹、打开编译选项菜单
1
|
cd bbr && make menuconfig
|
4、按 / (斜杠)键在搜索框输入 bbr2 回车
5、按 数字键 2 进入 TCP_CONG_BBR2 配置页面,(图中显示是50%,按键盘下键到100%按数字2键就显示了。)
6、按 空格键 启用 bbr2 内核模块,然后按 Save 保存到 .config 文件中(按Tab键切换)。
7、查看保存的配置文件中BBR配置项是否为m(CONFIG_TCP_CONG_BBR2=m)
1
|
grep -i bbr2 .config
|
8、禁用签名和调试
1
2
|
scripts/config --disable MODULE_SIG
scripts/config --disable DEBUG_INFO
|
PS:因编译时间较长,建议安装Screen,在Screen模式下编译。
1
2
|
yum -y install screen
screen -S bbr2
|
9、编译内核并打包成rpm安装包(漫长的等待………)
1
|
time make rpm-pkg
|
10、查看生成的rpm安装包,默认在root目录下
二、安装内核
1
|
rpm -Uvh kernel-5.4.0_rc6-1.x86_64.rpm
|
2、查看Grub2菜单
1
|
awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
|
3、选择默认引导项
1
|
grub2-set-default 0
|
4、启用BBR2,配置完成然后重启服务器。
1
2
3
4
5
6
7
8
9
|
sed -i '/net.core.default_qdisc/d' /etc/sysctl.conf
echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
sed -i '/net.ipv4.tcp_congestion_control/d' /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr2" >> /etc/sysctl.conf
#ECN 是 BBRv2 新引入的 TCP 标记,用来区分 随机丢包 或 重新排序 的拥塞信号
# 启用ECN(不想启用就不要执行这一个,启用之后会现不可预知的事情。)
sed -i '/net.ipv4.tcp_ecn/d' /etc/sysctl.conf
echo "net.ipv4.tcp_ecn=1" >> /etc/sysctl.conf
|
5、确认 BBRv2 是否启用
1
2
|
sysctl net.ipv4.tcp_available_congestion_control
sysctl net.ipv4.tcp_congestion_control
|
教程到此结束,以下是强迫症操作,删除多余启动项。
1、查询当前使用的系统
1
|
uname -a
|
2、查看内核系统中安装的内核
1
|
rpm -qa | grep kernel
|
yum remove 你要删除的内核 #把老版本的内核remove,千万不要把正在使用的内核删掉。
3、重新编译引导,然后重启。
1
|
grub2-mkconfig -o /boot/grub2/grub.cfg
|
本文部分内容来自:
1
|
http://blog.exsvc.cn/article/centos-bbr2-alpha-build-install.html
|