最新的4.9内核合并了Google研发的BBR TCP阻塞算法,使用效果大概可以跟锐速相比。待4.9正式版发出前,CentOS并没有4.9的RPM包。那么我们可以手动编译内核,安装并启用。
注意:
内存小于512M的机器在编译内核bzImage的时候会出现错误。仅推荐1G内存以上的机器跑内核编译。
已编译好的RC内核:http://elrepo.org/people/ajb/devel/kernel-ml/el7/x86_64/RPMS/
以下是自己编译的步骤:
- 先从kernel.org下载内核:
wget -c https://cdn.kernel.org/pub/linux/kernel/v4.x/testing/linux-4.9-rc8.tar.xz
- 解压
xz -d linux-4.9-rc8.tar.xz tar xf linux-4.9-rc8.tar
- 安装必要的编译工具
sudo yum install "Development Tools" -y sudo yum install ncurses-devel openssl-devel elfutils-libelf-devel -y
- 进入linux-4.9-rc8目录,配置
.config
make menuconfig
选择Networking Support回车,找到Network options回车,找到TCP: Advanced congestion algorithm回车,移动到BBR按M,然后按右方向键找到Save回车两次,最后按右一直Exit退出到shell。
- 编译过程
首先要做编译准备
make prepare
再进行正式编译
make -j`nproc`
然后就是漫长的等待。
- 编译模块
虽然模块在上一步已经做好,但是为了以防万一还是检查下比较好。
make -j`nproc` modules
- 安装模块
sudo make modules_install
- 安装新内核
sudo make install
- 更改grub
(以下用root进行操作)
输入以下命令查看默认kernel:
awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
会出现类似的列表:
0 : CentOS Linux (4.9.0-0.rc8.el7.elrepo.x86_64) 7 (Core) 1 : CentOS Linux 7 Rescue f0e606d25a164f39aa306b052f38bc33 (3.10.0-327.36.3.el7.x86_64) 2 : CentOS Linux (3.10.0-327.36.3.el7.x86_64) 7 (Core) 3 : CentOS Linux (3.10.0-327.el7.x86_64) 7 (Core) 4 : CentOS Linux (0-rescue-9720ffe2dea246599e9e8048162adebf) 7 (Core)
输入以下命令更新缺省内核
grub2-set-default 0
- 重启
reboot
重启后确认内核为4.9:
uname -r
- 修改
/etc/sysctl.conf
开启BBR的TCP阻塞算法。
添加或者修改以下两行:
net.core.default_qdisc = fq_codel net.ipv4.tcp_congestion_control = bbr
即可。
注意:系统内的ipv6项并没有tcp_congestion_control一说,v4和v6用的是一样的(原文引用: IPv6 has no global variables such as tcp_*. tcp_* settings under ipv4/ also
apply to IPv6.)
删除编译的内核,参考此文:http://askubuntu.com/questions/594443/how-can-i-remove-compiled-kernel
请问你测了fq跟fq_codel在BBR上表现的区别了吗?
https://www.bufferbloat.net/projects/codel/wiki/
简单说在1GE网速以及以下的网卡情况下,VPS使用
fq_codel
比fq
好。fq
适用于独立主机,fq_codel
适用于路由器。那意味着ipv6是直接开启了吗?
设置ipv4后ipv6自动开启。
进入linux-4.9-rc8目录,配置.config是什么意思呢,make prepare似乎也没有这条语句
现在通过elrepo可以直接装新版本的kernel
elrepo安装的新版本只到kernel4.1.3呀