Centos开启bbr拥塞控制算法
什么是bbr
这几天bbr很火的样子,据了解这是google团队今年9月开源的一套拥塞控制算法,与之前我们了解的hybla、htcp一样是为了更好的利用网络资源而设计的。bbr与锐速之类的单边加速有异曲同工之妙,但是从根本上比锐速要靠谱得多,至少不会像锐速那样破坏包标识关系,导致iptables的关联表失败。bbr相关的具体分析例如分析1、分析2,感兴趣的可以参考一下。
简单来说,bbr最具创新性的部分在于其拥塞控制通过实际网络情况进行调度,而不是像其他拥塞控制那样单纯依靠算法模型,这就好比大数据人工智能与纯算法人工智能,无论目前的实际效果如何,个人认为这一方向长远上必然是良性发展的,所以必须要支持。
当然请辩证地对待bbr,尤其是生产环境要慎重,毕竟google也申明“This is not an official Google product.”
开启bbr拥塞控制算法
开启条件
目前在4.9的新kernel中都已经内置了bbr,Centos6/7(32位/64位)的内核现在均已有现成的包可用,所以实体机、可更换内核的VPS上使用相应版本的Centos都可以体验bbr,openvz的朋友看看就好,以下的内容别当真。(手工和直接源安装选一种方法即可)
手工安装内核包
ELREPO源中已经有现成的4.9kernel包,请根据版本下载相应的rpm包。
EL6(Centos6/RedHat6) : http://elrepo.org/people/ajb/devel/kernel-ml/el6/x86_64/RPMS/kernel-ml-4.9.0-0.rc8.el6.elrepo.x86_64.rpm
EL7(Centos7/RedHat7) : http://elrepo.org/people/ajb/devel/kernel-ml/el7/x86_64/RPMS/kernel-ml-4.9.0-0.rc8.el7.elrepo.x86_64.rpm
以centos6为例,使用root权限执行下列命令安装:
cd ~
wget http://elrepo.org/people/ajb/devel/kernel-ml/el6/x86_64/RPMS/kernel-ml-4.9.0-0.rc8.el6.elrepo.x86_64.rpm
rpm -ivh kernel-ml-4.9.0-0.rc8.el6.elrepo.x86_64.rpm
直接通过源安装(推荐)
以Centos6为例:
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm
yum --enablerepo=elrepo-kernel install kernel-ml -y
修改引导配置文件
以grub为例,内核包成功安装后,编辑/boot/grub/menu.lst文件,
vi /boot/grub/menu.lst
default参数改为0(默认新装的内核会在第一个,如果不是请修改为对应的顺序编号)
default=0
timeout=2
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
hiddenmenu
title CentOS (4.9.0-0.rc8.el6.elrepo.x86_64)
root (hd0,0)
kernel /boot/vmlinuz-4.9.0-0.rc8.el6.elrepo.x86_64 ro root=UUID=94e4e384-0ace-437f-bc96-057dd64f42ee rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM
initrd /boot/initramfs-4.9.0-0.rc8.el6.elrepo.x86_64.img
title CentOS (2.6.32-642.11.1.el6.x86_64)
root (hd0,0)
修改sysctl.conf
vi /etc/sysctl.conf
在末尾添加以下内容后重启。
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
检测状态
重启成功之后,通过sysctl检测得到net.ipv4.tcp_congestion_control = bbr即说明成功使用bbr拥塞控制算法。
sysctl net.ipv4.tcp_congestion_control
其他
如果更换内核后无法启动,则需要换回原内核重启,修改相应的grub参数,并使用以下命令删除内核包。
rpm -e kernel-ml-4.9.0-0.rc8.el6.elrepo.x86_64 --nodeps
如果是单纯为了科学上网,可能大部分情况下bbr的实际效果可能暂时还不如KCP。用V友的话说:国际出口网络就像一块小蛋糕,各种方式就像刀叉,总量在那里,刀叉再好最多只能多抢一点别人的份额。