Linode 服务器切换内核并启用TCP-BBR拥塞控制算法

Posted by zhang on

最近Linode开放了Tokyo 2数据中心,作为一个“伪技术宅”,立马买了一台VPS测试。另外最近一种类似Server Speeder的单边加速工具——BBR(Bottleneck Bandwidth and RTT)算法很火,就拿这台VPS来试试。(不用问我研究这玩意干啥,不能说。)

什么是TCP-BBR

TCB-BBR是谷歌最新提供的TCP拥塞控制算法,其目的就是要尽量跑满带宽,并且尽量不要有排队的情况。目前Linux kernel 4.9版本已经加入了该算法,所以只要升级内核,即可想用这个新算法。

Linode切换内核

既然上边说到TCP-BBR需要在Linux kernel 4.9+才能使用,那自然涉及到更换Linux内核的问题了。至于更换内核的方法,Linode 自己提供了一种快捷方式。在linode的Dashboard,点击Configuration Profiles中的Edit,去自定义配置。自己可以定义修改Linux的内核版本,默认的内核配置文件都是最新的,但是这些内核文件都经过了Linode的修改优化,大多数情况下可以满足用户的需求。

linode换内核

但是,如果这么简单,我怎么会写这些玩意。正因为是Linode修改优化过的,所以我们要启用某个特定功能的时候,默认配置很有可能无法满足我们,启用TCP-BBR这个功能,就是这样。

那么怎么跟改linode提供的默认内核呢?通过查询官方文档-Run a Distribution-Supplied Kernel on a KVM Linode,发现可以采用手动修改grub引导的方式来实现更换自定义内核。(以下操作基于ubuntu 16.04LTS 64位,其他系统请自行查找相关命令。)

有小朋友说不知道自己默认的版本是什么,有三种方法来确定。

  1. 在Dashboard后台通过kernel这个选项来确定。

  2. 可以在通过ssh登录后的欢迎信息中看到。如图:

    linode欢迎信息

  3. ssh登录后使用uname -a来显示目前的内核版本,会有类似显示

      Linux localhost 4.9.0-x86_64-linode79#1 SMP 5月21日11:01:47 EDT 2015 x86_64 x86_64 x86_64 GNU / Linux
    

废话少说,下边进入正题,自主更换linode内核。

安装最新版内核

  1. 更新下系统(这是我的个人习惯,不知道有没有啥用,但是每次做大操作的时候我都会把系统更新到最新。)

    apt-get update && apt-get upgrade
    
  2. 下载最新的内核文件(4.9+)

    wget -0 linux-image-4.9.0-amd64.deb http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.9/linux-image-4.9.0-040900-generic_4.9.0-040900.201612111631_arm64.deb
    

    注意:在使用的时候请注意下载内核的版本是否与你的操作系统相对应

  3. 安装内核

    dpkg -i linux-image-4.9.0-amd64.deb
    
  4. 查看内核文件安装情况并核实在/boot里的内核版本状态

    ls /boot/vmlinuz*
    

    会显示如下状态(举例子,你的可能和我的显示不完全一样)

    /boot/vmlinuz-4.9.0-x86_64-linode79
    /boot/vmlinuz-4.9.0-040900-generic
    

配置Grub文件

  1. 编辑/etc/default/grub文件,并把文件中的变量按下文进行添加或修改,其他变量不变:

    GRUB_TIMEOUT = 10
    GRUB_CMDLINE_LINUX =“console = ttyS0,19200n8”
    GRUB_DISABLE_LINUX_UUID = true
    GRUB_SERIAL_COMMAND =“serial --speed = 19200 --unit = 0 --word = 8 --parity = no --stop = 1”
    GRUB_TERMINAL = serial
    
  2. 更新Grub,使其重新加载引导程序

    update-grub
    

    注意:如果以后安装新内核,则需要再次更新Grub,默认情况下。列表内的第一个内核将别引导。

重启进入Grub2引导模式

  1. 在linode的Configuration Profiles中将Boot-settings中的kernel改成GRUB 2。

    修改Grub引导模式

  2. 在页面最底部点击Save Changes

  3. 重启服务器。

  4. 等待服务器重启完成再次登录之后,运行uname -a再次查看,确认下新内核。

    Linux localhost 4.9.0-040900-generic #201612111631 SMP Sun Dec 11 21:33:00 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
    

开启TCP-BBR

更新完系统内核之后,就可以开启TCP-BBR了。

  1. 编辑/etc/sysctl.conf,并保存

    #在文件最底部添加如下两行,如果之前已经有这些内容,请酌情删掉或修改
    net.core.default_qdisc=fq
    net.ipv4.tcp_congestion_control=bbr
    
  2. 执行sysctl -p使修改后的配置文件生效

    # vps提示
    root@linode:~# sysctl -p
    net.core.default_qdisc = fq
    net.ipv4.tcp_congestion_control = bbr
    
  3. 查看BBR是否开启

    首先,执行下边的命令来确定内核已经开启BBR(如果返回的结果中含有BBR则证明内核已经开启):

    sysctl net.ipv4.tcp_available_congestion_control
    

    然后,执行下边的命令,看到有tcp_bbr模块,则说明BBR已经启动:

    lsmod | grep bbr
    

最后说一句因为BBR是集成在Linux内核之中,所以无法卸载,只能关闭。

关闭方法为:

/etc/sysctl.conf删掉添加的那两行配置,并执行sysctl -p,然后重启服务器。重启后查看状态是否已经关闭。

本文参考了很多文章,包括但是不限于:

  1. linode官方文档:《Run a Distribution-Supplied Kernel on a KVM Linode》
  2. 逗比根据地的比锐速还强的 TCP拥塞控制技术 —— TCP-BBR 测试及开启教程