欢迎,来自IP地址为:3.141.30.162 的朋友


如果说目前比较火的网络技术,那么Google的BBR算法可能算的上其中之一了。BBR(Bottleneck Bandwidth and RTT)就是瓶颈带宽和往返时延的缩写,是一种新型的TCP传输拥塞控制算法。具体算法的实现细节我也说不明白,不过可以理解为有了该算法,就将TCP的可靠传输和拥塞控制分离,使TCP数据包传输过程中采用BBR拥塞控制算法,来更加有效的利用网络带宽,提高传输效率以及降低网络时延。

由于Google将此算法免费贡献给git.kernel.org,于是在linux的4.09内核后都采用了此算法。对于不同的Linux发行版本,可以根据实际情况更新内核以启用BBR功能。以下以CentOS为例,讲解如何更新linux系统内核和启用BBR。

更新内核的方法很多,当然用yum是最简单也是最安全的方法。不同的linux发行版本对于内核更新的发布可能存在差异,而yum源也可能并没有提供最新版内核的更新。此处介绍一个Red Hat Enterprise Linux(RHEL)系统发行版的非官方yum源,可以方便的进行内核更新。

  # uname -r        //查看当前内核版本
  2.6.32-642.15.1.el6.x86_64
  # rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org                         //安装elrepo源的签名
  # rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm  //安装RHEL7或CentOS7的elrepo源
  # rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm     //安装RHEL6或CentOS6的elrepo源(二选一即可)
  # yum yum-plugin-fastestmirror                                                                                    //如果出错则需要安装yum-plugin-fastestmirror
  # yum --enablerepo=elrepo-kernel install kernel-ml                                                //安装elrepo源的内核
  # ls -l /boot                                                                                                                        //显示机器已经安装的内核
  -rw-r--r--. 1 root root  2518236 Nov 22  2013 System.map-2.6.32-431.el6.x86_64
  -rw-r--r--. 1 root root  2546171 Jul 15  2015 System.map-2.6.32-504.30.3.el6.x86_64
  -rw-r--r--  1 root root  2618532 Nov 19 03:30 System.map-2.6.32-642.11.1.el6.x86_64
  -rw-r--r--  1 root root  2618532 Jan 12 05:02 System.map-2.6.32-642.13.1.el6.x86_64
  -rw-r--r--  1 root root  2618573 Feb 24 22:37 System.map-2.6.32-642.15.1.el6.x86_64
  -rw-------  1 root root  3417289 Apr  9 03:34 System.map-4.10.9-1.el6.elrepo.x86_64
  -rw-r--r--. 1 root root   105195 Nov 22  2013 config-2.6.32-431.el6.x86_64
  -rw-r--r--. 1 root root   106371 Jul 15  2015 config-2.6.32-504.30.3.el6.x86_64
  -rw-r--r--  1 root root   108108 Nov 19 03:30 config-2.6.32-642.11.1.el6.x86_64
  -rw-r--r--  1 root root   108108 Jan 12 05:02 config-2.6.32-642.13.1.el6.x86_64
  -rw-r--r--  1 root root   108108 Feb 24 22:37 config-2.6.32-642.15.1.el6.x86_64
  -rw-r--r--  1 root root   182745 Apr  9 03:34 config-4.10.9-1.el6.elrepo.x86_64
  drwxr-xr-x. 3 root root     4096 Dec 25  2014 efi
  drwxr-xr-x. 2 root root     4096 Apr  9 18:25 grub
  -rw-------. 1 root root 15035637 Dec 25  2014 initramfs-2.6.32-431.el6.x86_64.img
  -rw-------. 1 root root 16260682 Mar  3  2016 initramfs-2.6.32-504.30.3.el6.x86_64.img
  -rw-------  1 root root 20537087 Nov 26 21:27 initramfs-2.6.32-642.11.1.el6.x86_64.img
  -rw-------  1 root root 20533823 Jan 24 00:15 initramfs-2.6.32-642.13.1.el6.x86_64.img
  -rw-------  1 root root 20535274 Feb 27 14:30 initramfs-2.6.32-642.15.1.el6.x86_64.img
  -rw-------  1 root root 23884820 Apr  9 18:24 initramfs-4.10.9-1.el6.elrepo.x86_64.img
  -rw-------  1 root root  4072920 Mar  3  2016 initrd-2.6.32-504.30.3.el6.x86_64kdump.img
  -rw-r--r--. 1 root root   193758 Nov 22  2013 symvers-2.6.32-431.el6.x86_64.gz
  -rw-r--r--. 1 root root   200246 Jul 15  2015 symvers-2.6.32-504.30.3.el6.x86_64.gz
  -rw-r--r--  1 root root   215530 Nov 19 03:30 symvers-2.6.32-642.11.1.el6.x86_64.gz
  -rw-r--r--  1 root root   215528 Jan 12 05:02 symvers-2.6.32-642.13.1.el6.x86_64.gz
  -rw-r--r--  1 root root   215528 Feb 24 22:37 symvers-2.6.32-642.15.1.el6.x86_64.gz
  -rw-r--r--  1 root root   341907 Apr  9 03:36 symvers-4.10.9-1.el6.elrepo.x86_64.gz
  -rwxr-xr-x. 1 root root  4128368 Nov 22  2013 vmlinuz-2.6.32-431.el6.x86_64
  -rwxr-xr-x. 1 root root  4150896 Jul 15  2015 vmlinuz-2.6.32-504.30.3.el6.x86_64
  -rwxr-xr-x  1 root root  4269936 Nov 19 03:30 vmlinuz-2.6.32-642.11.1.el6.x86_64
  -rwxr-xr-x  1 root root  4269968 Jan 12 05:02 vmlinuz-2.6.32-642.13.1.el6.x86_64
  -rwxr-xr-x  1 root root  4270000 Feb 24 22:37 vmlinuz-2.6.32-642.15.1.el6.x86_64
  -rwxr-xr-x  1 root root  6257024 Apr  9 03:34 vmlinuz-4.10.9-1.el6.elrepo.x86_64

以上操作是采用最简便的方法使用elrepo源的RHEL发行版内核,并进行内核安装。最后显示我的机器安装了2.6.32-431.el6.x86_64、2.6.32-504.30.3.el6.x86_64、2.6.32-642.11.1.el6.x86_64、2.6.32-642.13.1.el6.x86_64、2.6.32-642.15.1.el6.x86_64、4.10.9-1.el6.elrepo.x86_64这么多内核,并且4.10版的内核已经安装成功了。最后可以修改/boot/grub/menu.lst文件,将default=项目设置成为default=0,因为最新安装的内核一般排在最前面。如果是RHEL7.2或CentOS 7.2版,则需要使用命令修改grub的配置来实现启动内核的修改。

  # cat /boot/grub2/grub.cfg |grep menuentry        //显示当前启动项
  if [ x"${feature_menuentry_id}" = xy ]; then
    menuentry_id_option="--id"
    menuentry_id_option=""
  export menuentry_id_option
  menuentry 'Red Hat Enterprise Linux Server (4.10.9-1.el7.elrepo.x86_64) 7.3 (Maipo)'
  menuentry 'Red Hat Enterprise Linux Server (3.10.0-514.10.2.el7.x86_64) 7.3 (Maipo)'
  menuentry 'Red Hat Enterprise Linux Server (3.10.0-514.el7.x86_64) 7.3 (Maipo)'
  menuentry 'Red Hat Enterprise Linux Server (0-rescue-be7a44b4b98e404a8cdcd062c4733c10) 7.3 (Maipo)' 
  # grub2-set-default "Red Hat Enterprise Linux Server (4.10.9-1.el7.elrepo.x86_64) 7.3 (Maipo)"        //设置新内核为启动内核
  # grub2-editenv list                                                                                                                                                 //查看默认启动内核
  saved_entry=Red Hat Enterprise Linux Server (4.10.9-1.el7.elrepo.x86_64) 7.3 (Maipo)

通过以上的修改,就可完成启动内核的设置。重新启动一下系统,用uname -r命令看下启动的内核是否正确。

如果内核更新成功,那么启用BBR算法就相对简单,只要修改/etc/sysctl.conf文件内容即可:

  net.core.default_qdisc=fq
  net.ipv4.tcp_congestion_control=bbr

修改完成后,可以通过以下命令验证BBR是否启用

  # sysctl -p
  # sysctl net.ipv4.tcp_available_congestion_control
  net.ipv4.tcp_available_congestion_control = bbr cubic reno
  # lsmod | grep bbr
  tcp_bbr                16384  3

当看到出现tcp_bbr后,就表示该算法已经启用成功。BBR算法的好处是可以有效的利用带宽,对于视频流效果更加明显。对于那些购买了国外VPS并部署了shadowsocks或者v2ray的朋友来说,不启用BBR就有点OUT了。毕竟科学上网还是希望有个好点的使用感受的。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注