Linode编译hybla htcp拥塞控制算法模块
目录
由于某些原因,中美线路有时掉包率会很高,想要尝试尝试优化vps网速,查找资料发现linux内核中存在拥塞控制算法模块(hybla htcp)据说在掉包率高时可以大幅提高访问速度,如果linux默认拥塞控制算法cubic只能流畅观看480p的视频,改为hybla或者htcp则可以流畅观看720p的视频,本人使用的Linode但是Linode提供的内核中并不包含此种算法(只有cubic Reno),无奈只能选择自己编译,编译流程为下:
1. 查看vps内核版本:
1 2 |
uname -r 3.11.6-x86_64-linode35 |
我Linode的内核为3.11.6-x86_64-linode35,下面的教程也以3.11.6内核为例,涉及到内核路径的自己修改替换即可。
2. 下载相同版本的内核源码
可以去https://www.kernel.org/pub/linux/kernel/v3.0/查找内核源码,找到后下载后缀为tar.gz的文件。
1 2 3 4 5 |
rm -rf linux-3.11.6.tar.gz mkdir kernel cd kernel wget https://www.kernel.org/pub/linux/kernel/v3.0/linux-3.11.6.tar.gz tar xzvf linux-3.11.6.tar.gz |
3、安装内核编译工具
编译内核需要下面这些编译工具,不然会编译失败。
1 2 3 4 5 |
CentOS and Fedora yum update && yum install -y ncurses-devel make gcc bc Ubuntu and Debian apt-get update && apt-get install -y build-essential libncurses5-dev |
4、配置内核编译文件
由于我们只是要为内核增加hybla htcp模块,不需要更改其他功能,直接导出官方的配置文件再修改即可。
1 2 |
cd linux-3.11.6 zcat /proc/config.gz > .config |
编辑.config文件,查找CONFIG_TCP_CONG_CUBIC=y,要编译hybla模块在下面一行增加 CONFIG_TCP_CONG_HYBLA=y,要编译htcp模块在下面一行增加CONFIG_TCP_CONG_HTCP=y,两个都要的话,都添加在下面。
编译模块。
1 |
make |
耐心等待编译内核完成,单核编译大约需15分钟。
5、准备编译模块
1 2 3 |
cd net/ipv4/ mv Makefile Makefile.old vi Makefile |
有的人可能不同时需要两个模块,这里分开写,不同时编译,自己需要哪个编译那个。
5.1、以下是hybla模块的Makefle内容,注意要把KDIR修改为你自己的源码路径,其他则照抄就可以了。
1 2 3 4 5 6 |
# Makefile for tcp_hybla.ko obj-m := tcp_hybla.o KDIR := /root/kernel/linux-3.11.6 PWD := $(shell pwd) default: $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules |
6、开始编译模块
进入源码根目录,编译模块。
1 2 |
cd /root/kernel/linux-3.11.6/ make modules |
7、测试模块
这里以hybla模块为例,htcp模块的话自己替换一下名称即可。
1 2 3 |
cd /root/kernel/linux-3.11.6/net/ipv4 insmod ./tcp_hybla.ko sysctl net.ipv4.tcp_available_congestion_control |
如果成功加载的话会显示下面
1 |
net.ipv4.tcp_available_congestion_control = cubic reno hybla |
自此为止可以说已经成功了。
8、设置开机自动加载模块
这里以hybla模块为例,htcp模块的话自己替换一下名称即可。
如果需要开机自动加载我们需要把模块复制到/lib/modules/3.11.6-x86_64-linode35/kernel/net/ipv4
1 2 3 4 5 |
mkdir -p /lib/modules/3.11.6-x86_64-linode35/kernel/net/ipv4 cd /lib/modules/3.11.6-x86_64-linode35/kernel/net/ipv4 cp -a /root/kernel/linux-3.11.6/net/ipv4/tcp_hybla.ko /lib/modules/3.11.6-x86_64-linode35/kernel/net/ipv4/ cd /lib/modules/3.11.6-x86_64-linode35 depmod -a |
9、设置hybal为优先加载
这里以hybla模块为例,htcp模块的话自己替换一下名称即可。
编辑/etc/sysctl.conf在最后添加下面这行即可
1 |
net.ipv4.tcp_congestion_control = hybla |
自此大功告成收工,实现了动态加载hybla htcp模块,并且实现了开机自动加载。
近期评论