ubuntu 12.04 更新内核至3.18.11版本,并开启DCTCP,添加‘修改TCP_minRTO’功能

下载 3.18.11 Linux内核

$ wget https://cdn.kernel.org/pub/linux/kernel/v3.x/linux-3.18.11.tar.gz
$ tar zxvf linux-3.18.11.tar.gz

下载并安装补丁(主要添加修改TCP minRTO 功能)

这里的patch是港科大的Sing Lab提供的,下载地址:https://github.com/baiwei0427/Latency-Measurement.git。下载补丁后,打补丁的步骤如下:

  1. $ cp kernel_measurement3.patch linux-3.18.11
  2. $ cd linux-3.18.11
  3. $ patch -p1 < kernel_measurement3.patch

编译新内核前的准备工作

  1. 安装必要的依赖
    $ sudo apt-get install gcc make libncurses5-dev openssl libssl-dev install build-essential pkg-config libc6-dev bison flex libelf-dev

  2. 准备编译配置文件(.config)
    $ sudo cp -r linux-3.18.11 /usr/src/
    $ cd /usr/src/linux-3.18.11
    $ sudo cp /boot/config-$(uname -r) .config #这一步是使用原内核配置文件编译新内核

  3. 修改编译配置文件
    $ sudo vim .config #使用vim打开.config文件,在CONFIG_DEFAULT_CUBIC=y这行上添加一行:CONFIG_TCP_CONG_DCTCP=m,作用是编译新内核时,对net/ipv4/tcp_dctcp.c进行编译。ubuntu 12.04 更新内核至3.18.11版本,并开启DCTCP,添加‘修改TCP_minRTO’功能

    $ sudo make menuconfig
    ubuntu 12.04 更新内核至3.18.11版本,并开启DCTCP,添加‘修改TCP_minRTO’功能

    这一步会出现一个图形窗口,直接右键,跳转至"Exit",即所有都为默认选项。

开始编译新内核

  1. 编译内核
    $ sudo make
    $ sudo make modules_install
  2. 安装
    $ sudo make install
    $ sudo mkinitramfs -o /boot/initrd.img-3.18.11
    $ sudo update-initramfs -c -k 3.18.11
    $ sudo update-grub2
  3. 检验是否更新成功
    $ sudo shutdown -r now
    $ uname -r

ubuntu 12.04 更新内核至3.18.11版本,并开启DCTCP,添加‘修改TCP_minRTO’功能

为更新后的内核 启用 DCTCP

  1. 首先查看,新内核可用的TCP拥塞控制算法:
    $ sysctl net.ipv4.tcp_available_congestion_control
    然后终端应该会输出:
    net.ipv4.tcp_available_congestion_control = cubic reno

  2. 如果检验成功安装3.18.11版本内核,则可以为新内核装载 DCTCP 模块了,分别执行:
    $ sudo modprobe tcp_dctcp
    $ sudo echo “tcp_dctcp” | sudo tee -a /etc/modules

  3. 接下来我们再来查看系统支持的TCP拥塞算法,可以看到DCTCP已经在里面了:
    $ sysctl net.ipv4.tcp_available_congestion_control
    然后终端应该会输出:
    net.ipv4.tcp_available_congestion_control = cubic reno dctcp

ubuntu 12.04 更新内核至3.18.11版本,并开启DCTCP,添加‘修改TCP_minRTO’功能

  1. 接下来就正式启用DCTCP,把它设为系统的默认拥塞算法,分别执行:
    $ echo “net.ipv4.tcp_congestion_control=dctcp” | sudo tee -a /etc/sysctl.conf
    $ sudo sysctl -p

  2. 最后,再来验证一下是否设置成功,可以看到DCTCP已经是默认算法:
    $ sysctl net.ipv4.tcp_congestion_control
    然后终端应该会输出:
    net.ipv4.tcp_congestion_control = dctcp

ubuntu 12.04 更新内核至3.18.11版本,并开启DCTCP,添加‘修改TCP_minRTO’功能

  1. 还需配置RED队列和ECN功能,DCTCP需要配合RED和ECN使用:
    开启ECN:$ sysctl -w net.ipv4.tcp_ecn=1
    配置RED参考链接:http://manpages.ubuntu.com/manpages/xenial/man8/tc.8.html

调整TCP minRTO

  1. 如果您已应成功编译运行打过补丁的3.18.11版本内核,则可以通过如下命令调整TCP RTOmin(以毫秒为单位):
    $ sysctl -w net.ipv4.tcp_rto_min=10

参考链接

编译内核: link.
开启DCTCP: link.
minRTO 补丁: link.