在 Linode 上编译 hybla 模块

在 Linode 上编译 hybla 模块

执行到这一步时运行出错

Google 一番后发现是缺少 tcp_hybla 模块,需要自己手动编译。引用一下 https://plus.google.com/+BoluoKING/posts/dLyYhBf3mwp 的科普

中美之间的线路质量不是很好,rtt较长且时常丢包。TCP的设计目的是解决不可靠线路上可靠传输的问题,即为了解决丢包,但丢包却使TCP传输速度大幅下降。HTTP协议在传输层使用的是TCP协议,所以网页下载的速度就取决于TCP单线程下载的速度(因为网页就是单线程下载的)。丢包使得TCP传输速度大幅下降的主要原因是丢包重传机制,控制这一机制的就是TCP拥塞控制算法。
Linux内核中提供了若干套TCP拥塞控制算法,这些算法各自适用于不同的环境。

1)reno是最基本的拥塞控制算法,也是TCP协议的实验原型。
2)bic适用于rtt较高但丢包极为罕见的情况,比如北美和欧洲之间的线路,这是2.6.8到2.6.18之间的Linux内核的默认算法。
3)cubic是修改版的bic,适用环境比bic广泛一点,它是2.6.19之后的linux内核的默认算法。
4)hybla适用于高延时、高丢包率的网络,比如卫星链路——同样适用于中美之间的链路。
我们需要做的工作就是将TCP拥塞控制算法改为hybla算法,并且优化TCP参数。

于是又开始找 hybla 模块的编译指南,参考了这两篇文章,并且修改了一下不太明确的地方,写个修改版的指南吧。

在这里下载 https://www.kernel.org/pub/linux/kernel/

我这里是 4.8.3,于是进入 v4.x 目录,向下翻即找到了,复制文件地址,在vps上 wget 下载下来

注意修改对应的下载地址和文件名

然后用你喜欢的编辑器编辑 .config 文件,查找 CONFIG_TCP_CONG_CUBIC=y,在这一行下面增加一行

CONFIG_TCP_CONG_HYBLA=y

然后编译

编译耗时约15~20分钟

以下是 hybla 所用的 Makefile

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

注意上面__第三行 KDIR := /root/kernel/linux-3.11.6 要修改成自己解压的目录__,并且最后一行必须以 __tab__ 开头,__不可以用空格,不可以用空格__。不懂Makefile的规则,我在这里踩了坑。

这里退回到 linux-4.8.3 目录,我是放在 /tmp/kernel 内的,后面目录相关的就不提示了

如果遇到command not found: insmod则需要手动安装

如果编译的时候如果出现如下错误

需要源安装libssl-dev就可以了

至此就装好了hybla 模块,后面继续按照 优化指南 优化去了


untagged

953 Words

2016-12-27 23:22 +0800

-