在 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 模块,后面继续按照 优化指南 优化去了
阅读量 -