kn007的个人博客
♥ You are here: Home > 软件与网络 > VPS > CentOS 6安全快速启用TCP BBR拥塞控制算法

CentOS 6安全快速启用TCP BBR拥塞控制算法

by | 41 Comments

提醒:本文最后更新于 2777 天前,文中所描述的信息可能已发生改变,请仔细核实。

最近BBR(Bottleneck Bandwidth and RTT)算法很火,类似于锐速的单边加速工具,而且免费使用,不存在破解问题。

这是由谷歌程序员们开发的新的TCP拥塞控制算法,其目的就是要尽量跑满带宽,并且尽量不要有排队的情况。

目前Linux Kernel 4.9 RC已加入了该算法,所以我们只要升级内核,即可享用。

目前elrepo的mainline stable包,只到4.8.13,要想用4.9RC,就要用到developer地址了。

请确认你的CentOS 6版本是x64还是x86,本文暂以x64为例,说明如何更新的。

首先,先安装最新版本内核,也就是Kernel 4.9 RC8。

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -ivh http://elrepo.org/people/ajb/devel/kernel-ml/el6/x86_64/RPMS/kernel-ml-4.9.0-0.rc8.el6.elrepo.x86_64.rpm
sed -i 's:default=.*:default=0:g' /etc/grub.conf

接着查看/etc/sysctl.conf是否存在net.ipv4.tcp_congestion_controlnet.core.default_qdisc,存在就删除掉。

echo "net.ipv4.tcp_congestion_control = bbr" >> /etc/sysctl.conf
echo "net.core.default_qdisc = fq" >> /etc/sysctl.conf
sysctl -p
reboot

运行完,会自动重启,重启后执行sysctl net.ipv4.tcp_available_congestion_control,如果结果中有bbr,则证明你的内核已开启BBR。

执行lsmod|grep bbr,看到有tcp_bbr模块即说明BBR已启动。折腾有风险,祝你好运。

如果你是CentOS 6 x86版本,只要把内核下载地址换为下面这个即可。

http://elrepo.org/people/ajb/devel/kernel-ml/el6/x86_32/RPMS/kernel-ml-4.9.0-0.rc8.el6.elrepo.i686.rpm

至于使用elrepo的原因,就是容易roll back,或者持续更新。

启用BBR的效果据说并不会比锐速差多少,不过据我实测,也就下载大文件的时候,稍微快了一些,而且跟VPS运行时间等也有关系。

BBR内置了自主的调速机制,不受TCP拥塞控制状态机的控制,BBR算法是自闭的,完全基于反馈,它可以自己完成VJ的所有状态探测以及切换,无需外界干涉,且对外界的干涉视而不见。

怎么说呢,有总比没有好,没准越来越完善呢?最重要是免费。

转载请注明转自:kn007的个人博客的《CentOS 6安全快速启用TCP BBR拥塞控制算法

donate
有所帮助?

Comments

41 Comments立即评论
  1. error: "No such file or directory" setting key "net.ipv4.tcp_congestion_control"
    error: "net.core.default_qdisc" is an unknown key
    这个是什么原因

    1. MOD回复

      @大喇叭: 内核不支持。

    2. @kn007: 妈蛋。内核都换不掉。 :twisted: :twisted: :twisted:

    3. MOD回复

      @大喇叭: ovz换不了哦

    4. @kn007: 是kvm的,我试了好几种 都不好换。搞不懂了

    5. MOD回复

      @大喇叭: linode?linode貌似跟别人不一样,有专门用的内核。

    6. @kn007: 没有 一个小众的。搞不懂了。算了。省的折腾

  2. 回复

    作者你好!感谢你的教程。不过我内核一直没有更新成功,手动安装后发现问题在于
    将default= 设置为0了,重启后,依旧进入的是旧的内核(default = 3那个)。请问可能是什么原因呢?
    以下为 grub.conf配置文件。
    # grub.conf generated by anaconda
    #
    # Note that you do not have to rerun grub after making changes to this file
    # NOTICE: You do not have a /boot partition. This means that
    # all kernel and initrd paths are relative to /, eg.
    # root (hd0,0)
    # kernel /boot/vmlinuz-version ro root=/dev/vda1
    # initrd /boot/initrd-[generic-]version.img
    #boot=/dev/vda
    default=0
    timeout=5
    splashimage=(hd0,0)/boot/grub/splash.xpm.gz
    hiddenmenu
    title CentOS (4.10.2-1.el6.elrepo.x86_64)
    root (hd0,0)
    kernel /boot/vmlinuz-4.10.2-1.el6.elrepo.x86_64 ro root=UUID=a6416c5f-80c8-418f-8645-340a55fadf44 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 crashkernel=auto consoleblank=0 rd_NO_MD SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM
    initrd /boot/initramfs-4.10.2-1.el6.elrepo.x86_64.img
    title CentOS (3.10.105-1.el6.elrepo.x86_64)
    root (hd0,0)
    kernel /boot/vmlinuz-3.10.105-1.el6.elrepo.x86_64 ro root=UUID=a6416c5f-80c8-418f-8645-340a55fadf44 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 crashkernel=auto consoleblank=0 rd_NO_MD SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM
    initrd /boot/initramfs-3.10.105-1.el6.elrepo.x86_64.img
    title CentOS (4.11.0-0.rc2.el6.elrepo.x86_64)
    root (hd0,0)
    kernel /boot/vmlinuz-4.11.0-0.rc2.el6.elrepo.x86_64 ro root=UUID=a6416c5f-80c8-418f-8645-340a55fadf44 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 crashkernel=auto consoleblank=0 rd_NO_MD SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM
    initrd /boot/initramfs-4.11.0-0.rc2.el6.elrepo.x86_64.img
    title CentOS (2.6.32-642.15.1.el6.x86_64)
    root (hd0,0)
    kernel /boot/vmlinuz-2.6.32-642.15.1.el6.x86_64 ro root=UUID=a6416c5f-80c8-418f-8645-340a55fadf44 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 crashkernel=auto consoleblank=0 rd_NO_MD SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM
    initrd /boot/initramfs-2.6.32-642.15.1.el6.x86_64.img
    title CentOS 6 (2.6.32-642.el6.x86_64)
    root (hd0,0)
    kernel /boot/vmlinuz-2.6.32-642.el6.x86_64 ro root=UUID=a6416c5f-80c8-418f-8645-340a55fadf44 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 crashkernel=auto consoleblank=0 rd_NO_MD SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM
    initrd /boot/initramfs-2.6.32-642.el6.x86_64.img

    1. MOD回复

      @Alone: 你是vps还是毒妇?
      试试看开机自己选择启动项试试。
      查下引导是不是通过grub。。
      个别VPS主机商可以后台强制固定启动哪个版本kernel。

    2. 回复

      @kn007: vultr的服务器... 是用VNC吗?我好像不会用... 用秋水逸冰的一键bbr脚本安装完毕后,就卡在重启了。秋水逸冰的博客说卡重启是卡在grub引导上了。
      不懂啊= =。

      我应该怎么做... 之前我还用秋水那个脚本一键更新过的,不知道为什么现在不行了.

    3. MOD回复

      @Alone: 嗯,用vnc,在cp重启服务器,然后连接vnc,启动菜单那里选。

      vultr没用过,你可以看下后台设置,或者发个ticket。

    4. 回复

      @kn007: 也就是我需要先装一个VNC咯?好的哦,感谢。

icon_wink.gificon_neutral.gificon_mad.gificon_twisted.gificon_smile.gificon_eek.gificon_sad.gificon_rolleyes.gificon_razz.gificon_redface.gificon_surprised.gificon_mrgreen.gificon_lol.gificon_idea.gificon_biggrin.gificon_evil.gificon_cry.gificon_cool.gificon_arrow.gificon_confused.gificon_question.gificon_exclaim.gif