一个乱七八糟的博客~

Linode内核编译hybla htcp拥塞控制算法模块

由于某些原因,中美线路有时掉包率会很高,想要尝试尝试优化vps网速,查找资料发现linux内核中存在拥塞控制算法模块(hybla htcp)据说在掉包率高时可以大幅提高访问速度,如果linux默认拥塞控制算法cubic只能流畅观看480p的视频,改为hybla或者htcp则可以流畅观看720p的视频,本人使用的Linode但是Linode提供的内核中并不包含此种算法(只有cubic Reno),无奈只能选择自己编译,编译流程为下:

1. 查看vps内核版本:

uname -r
4.0.2-x86_64-linode56

我Linode的内核为4.0.2-x86_64-linode56,下面的教程也以4.0.2内核为例,涉及到内核路径的自己修改替换即可。

2. 下载相同版本的内核源码

可以去https://www.kernel.org/pub/linux/kernel/v4.x/查找内核源码,找到后下载后缀为tar.gz的文件。

rm -rf linux-4.0.2.tar.gz 
mkdir kernel
cd kernel
wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.0.2.tar.gz 
tar xzvf linux-4.0.2.tar.gz

3、安装内核编译工具

编译内核需要下面这些编译工具,不然会编译失败。

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模块,不需要更改其他功能,直接导出官方的配置文件再修改即可。

cd linux-4.0.2
zcat /proc/config.gz > .config
vi .config

编辑.config文件,查找CONFIG_TCP_CONG_CUBIC=y,要编译hybla模块在下面一行增加 CONFIG_TCP_CONG_HYBLA=y,要编译htcp模块在下面一行增加CONFIG_TCP_CONG_HTCP=y,两个都要的话,都添加在下面。
编译模块

make

耐心等待编译内核完成,单核编译大约需15分钟.

5、准备编译模块

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

有的人可能不同时需要两个模块,这里分开写,不同时编译,自己需要哪个编译那个。

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

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

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

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

6、开始编译模块

进入源码根目录,编译模块

cd /root/kernel/linux-4.0.2/
make modules

7、测试模块

这里以hybla模块为例,htcp模块的话自己替换一下名称即可。

cd /root/kernel/linux-4.0.2/net/ipv4
insmod ./tcp_hybla.ko
sysctl net.ipv4.tcp_available_congestion_control

如果成功加载的话会显示下面

net.ipv4.tcp_available_congestion_control = cubic reno hybla

自此为止可以说已经成功了。

8、设置开机自动加载模块

这里以hybla模块为例,htcp模块的话自己替换一下名称即可。
如果需要开机自动加载我们需要把模块复制到/lib/modules/4.0.2-x86_64-linode56/kernel/net/ipv4

mkdir -p /lib/modules/4.0.2-x86_64-linode56/kernel/net/ipv4
cd /lib/modules/4.0.2-x86_64-linode56/kernel/net/ipv4
cp -a /root/kernel/linux-4.0.2/net/ipv4/tcp_hybla.ko /lib/modules/4.0.2-x86_64-linode56/kernel/net/ipv4/
cd /lib/modules/4.0.2-x86_64-linode56
depmod -a

9、设置hybal为优先加载

这里以hybla模块为例,htcp模块的话自己替换一下名称即可。
编辑/etc/sysctl.conf在最后添加下面这行即可

net.ipv4.tcp_congestion_control = hybla

自此大功告成收工,实现了动态加载hybla htcp模块,并且实现了开机自动加载。


文章转载于:http://www.777s.me/linode-hybla-htcp.html

赞(2)
未经允许不得转载:狼魂 -Blog » Linode内核编译hybla htcp拥塞控制算法模块
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
%d 博主赞过: