什么是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友的话说:国际出口网络就像一块小蛋糕,各种方式就像刀叉,总量在那里,刀叉再好最多只能多抢一点别人的份额。