[转载整理]Linode编译hybla与htcp内核模块

转自:Linode 自己编译 hybla 与 htcp 内核模块 Linode 自己编译 hybla 与 htcp 内核模块 – 烂记性 赖笔头

1.查看vps内核版本

uname -r
3.19.1-x86_64-linode53

我们可以看到我的Linode的内核版本是3.19.1-x86_64-linode53, 所以这里我们以3.19.1内核为例来讲解.

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

我们去Kernel.org上去下载对应版本的源码, 找到后下载后缀为 tar.gz 文件

cd /usr/src
wget https://www.kernel.org/pub/linux/kernel/v3.0/linux-3.19.1.tar.gz
tar xvf linux-3.19.1.tar.gz

3.安装内核编译所需要的工具包

Ubuntu

apt-get update
apt-get install -y build-esstential libncurses5-dev

CentOS && Fedora

yum update
yum install ncurses-devel gcc make bc

4.配置内核编译文件

因为我们只是为内核添加模块 hybla htcp, 不需要更改其他的功能, 所以我们只需在现有配置的基础上修改配置文件即可.

cd linux-3.19.1
zcat /proc/config.gz > .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
cp Makefile Makefile.old    //把原文件备份,
  • 以下是 hybla 模块的 Makefile 内容, 请把其中 KDIR 替换为你自己的源码路径
vim Makefile

# Makefile for tcp_hybla.co
obj-m := tcp_hybla.o
KDIR := /usr/src/linux-3.19.1
PWD := $(shell pwd)
default:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
  • 以下是 htcp 模块的 Makefile 内容, 请把其中 KDIR 替换为你自己的源代码路径
# Makefiel for tcp_htcp.co
obj-m := tcp_htcp.o
KDIR := /usr/src/linux-3.19.1
PWD := $(shell pwd)
default:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules

6.开始编译模块

cd /usr/src/linux-3.19.1
make modules

7.测试模块

这里以 hybla 模块为例来讲解

cd ./net/ipv4
insmod ./tcp_hybla.ko
sysctl net.ipv4.tcp_available_congestion_control

如果成功加载的话, 会显示如下信息:

net.ipv4.tcp_available_congestion_control = cubic reno hybla

8.设置开机自动加载该模块

我们仍以 hybla 模块为例
首先我们将模块复制到 /libs/modules/3.19.1-x86_64-linode53

mkdir -p /lib/modules/3.19.1-x86_64-linode53/kernel/net/ipv4
cd /lib/modules/3.19.1-x86_64-linode53/kernel/net/ipv4
cp -a /usr/src/linux-3.19.1/net/ipv4/tcp_hybla.ko /lib/modules/3.19.1-x86_64-linode53/kernel/net/ipv4/
cd /lib/modules/3.19.1-x86_64-linode53
depmod -a

9.设置hybla为优先加载

编辑 /etc/sysctl.conf 文件, 在文件的末尾添加如下行:

net.ipv4.tcp_congestion_control = hybla

至此, 我们完成了编译、加载模块 hybla, 并且实现了开机自动加载。

 

10.编辑sysctl.conf优化TCP

vim /etc/sysctl.conf   //添加下面规则

kernel.shmall = 4294967296
fs.file-max=65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_fastopen = 3
net.ipv4.tcp_congestion_control = htcp
net.core.rmem_max = 67108864
net.core.wmem_max = 67108864
net.core.netdev_max_backlog = 250000

net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_fin_timeout = 30
net.ipv4.ip_local_port_range = 10000 65000
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864
net.ipv4.tcp_mtu_probing = 1

 

 

其他centos改变内核方法:

 

rpm ivh http://soft.91yun.org/ISO/Linux/CentOS/kernel/kernelfirmware2.6.32504.3.3.el6.noarch.rpm
rpm ivh http://soft.91yun.org/ISO/Linux/CentOS/kernel/kernel2.6.32504.3.3.el6.x86_64.rpm force
rpm qa | grep kernel  //查看是否存在我们刚刚安装的内核

 

如果你的vps自带算法模块可以通过:

/sbin/modprobe tcp_hybla

然后通过在配置文件选择hybla算法实现开机自动优先加载!
分享到:

评论已关闭。