ubuntu 12.04 更新内核至3.18.11版本,并开启DCTCP,添加‘修改TCP_minRTO’功能
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。下载补丁后,打补丁的步骤如下:
- $ cp kernel_measurement3.patch linux-3.18.11
- $ cd linux-3.18.11
- $ patch -p1 < kernel_measurement3.patch
编译新内核前的准备工作
-
安装必要的依赖
$ sudo apt-get install gcc make libncurses5-dev openssl libssl-dev install build-essential pkg-config libc6-dev bison flex libelf-dev -
准备编译配置文件(.config)
$ sudo cp -r linux-3.18.11 /usr/src/
$ cd /usr/src/linux-3.18.11
$ sudo cp /boot/config-$(uname -r) .config #这一步是使用原内核配置文件编译新内核 -
修改编译配置文件
$ sudo vim .config #使用vim打开.config文件,在CONFIG_DEFAULT_CUBIC=y这行上添加一行:CONFIG_TCP_CONG_DCTCP=m,作用是编译新内核时,对net/ipv4/tcp_dctcp.c进行编译。$ sudo make menuconfig
这一步会出现一个图形窗口,直接右键,跳转至"Exit",即所有都为默认选项。
开始编译新内核
- 编译内核
$ sudo make
$ sudo make modules_install - 安装
$ sudo make install
$ sudo mkinitramfs -o /boot/initrd.img-3.18.11
$ sudo update-initramfs -c -k 3.18.11
$ sudo update-grub2 - 检验是否更新成功
$ sudo shutdown -r now
$ uname -r
为更新后的内核 启用 DCTCP
-
首先查看,新内核可用的TCP拥塞控制算法:
$ sysctl net.ipv4.tcp_available_congestion_control
然后终端应该会输出:
net.ipv4.tcp_available_congestion_control = cubic reno -
如果检验成功安装3.18.11版本内核,则可以为新内核装载 DCTCP 模块了,分别执行:
$ sudo modprobe tcp_dctcp
$ sudo echo “tcp_dctcp” | sudo tee -a /etc/modules -
接下来我们再来查看系统支持的TCP拥塞算法,可以看到DCTCP已经在里面了:
$ sysctl net.ipv4.tcp_available_congestion_control
然后终端应该会输出:
net.ipv4.tcp_available_congestion_control = cubic reno dctcp
-
接下来就正式启用DCTCP,把它设为系统的默认拥塞算法,分别执行:
$ echo “net.ipv4.tcp_congestion_control=dctcp” | sudo tee -a /etc/sysctl.conf
$ sudo sysctl -p -
最后,再来验证一下是否设置成功,可以看到DCTCP已经是默认算法:
$ sysctl net.ipv4.tcp_congestion_control
然后终端应该会输出:
net.ipv4.tcp_congestion_control = dctcp
- 还需配置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
- 如果您已应成功编译运行打过补丁的3.18.11版本内核,则可以通过如下命令调整TCP RTOmin(以毫秒为单位):
$ sysctl -w net.ipv4.tcp_rto_min=10