编译 Linode 内核模块小白教程,以 tcp_hybla 为例

国情原因,中美线路有时掉包率会很高,导致网站访问速度慢,Linux 机器缺省的TCP协议发包算法是cubic,如果改为hybla,在掉包率高时可以大幅提高访问速度;如果cubic只能流畅观看480p的视频,改为hybla则可以流畅观看720p的视频,效果提升是明显的,但很多朋友不会编译内核模块,写个小白教程供大家参考,照以下几步操作一遍,你会发现编译内核模块原来相当简单。

本文以Archlinux 以及Debain为例进行内核编译
1. 查看你的机器内核版本:

uname -a
Linux bihell.com 4.0.1-x86_64-linode55 #3 SMP Wed Apr 29 11:10:11 EDT 2015 x86_64 GNU/Linux

2. 去 https://www.kernel.org/pub/linux/kernel/v4.x/下载相同版本的源码到任意目录,解压

mkdir /root/mykernel
cd /root/mykernel
wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.0.4.tar.gz
tar xzvf linux-4.0.4.tar.gz

3. 安装内核编译工具
Debian 环境

apt-get update && apt-get install -y build-essential libncurses5-dev

Archlinux 环境

pacman -S make gcc abs bc

4. 复制Linode原来的内核编译配置文件到源码根目录,在CONFIG_TCP_CONG_CUBIC=y下面增加一行 CONFIG_TCP_CONG_HYBLA=y,再生成编译模块需要的内核

cd linux-4.0.4
zcat /proc/config.gz > .config
vim .config

查找CONFIG_TCP_CONG_CUBIC=y ,在下面增加一行 CONFIG_TCP_CONG_HYBLA=y,保存,开始编译

Debain 系统

make

耐心等待编译内核完成,单核编译大约需15分钟,完成后,进入模块所在的目录,编写Makefile

cd net/ipv4/
mv Makefile Makefile.old
vi Makefile

以下是Makefle的内容,注意要把KDIR修改为你自己的源码路径,其他则照抄就可以了

# Makefile for tcp_hybla.ko
obj-m := tcp_hybla.o
KDIR := /root/mykernel/linux-4.0.1
PWD := $(shell pwd)
default:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules

cd /root/mykernel/linux-4.0.4
make modules

Archlinux 系统

不会单独编译只能在配置文件里面选了,有知道的小伙伴请指教 ;)

make menuconfig

选则Hybla模块

Networking options –>TCP: advanced congestion control–> TCP-Hybla congestion control algorithm

编译

make

7.进入到模块所在目录,复制生成的 tcp_hybla.ko 到加载目录,测试加载模块

cd /root/mykernel/linux-4.0.4/net/ipv4/
cp tcp_hybla.ko /root/mykernel/
cd /root/mykernel/

加载前

sysctl net.ipv4.tcp_available_congestion_control

结果

net.ipv4.tcp_available_congestion_control = cubic reno

加载后

insmod tcp_hybla.ko
sysctl net.ipv4.tcp_available_congestion_control

结果

net.ipv4.tcp_available_congestion_control = cubic reno hybla

设置hybal为优先

sysctl net.ipv4.tcp_congestion_control=hybla

8.设置开机自动加载模块,把tcp_hybla.ko 复制到 cd /lib/modules/4.0.4-x86_64-linode57/kernel/net/ipv4

cd /lib/modules/4.0.4-x86_64-linode57/
mkdir -p kernel/net/ipv4
cd kernel/net/ipv4
cp /root/mykernel/tcp_hybla.ko ./
cd /lib/modules/4.0.4-x86_64-linode57/
depmod -a

如果上面depmod这步报错先建立两个空文件

touch modules.order
touch modules.builtin

9.修改/etc/sysctl.conf 开机自动设置hybal为优先

vim /etc/sysctl.conf

内容如下

net.ipv4.tcp_congestion_control = hybla

用这9步就可以了,只是动态加载模块,不用更换内核,不用停机重启,不影响网站正常运营,相当方便,值得尝试,参考这个方法可以为 Linode 动态加载任何需要的内核模块,如fastopen,htcp,highspeed 等。

本文参考以下文档并进行了修改

http://www.fslk.net/?p=822

打赏支持:支付宝/微信,感谢赏口饭吃