Linode Xen上的Debian/Ubuntu升级Linux 4.9内核开启BBR算法
随着Linux 4.9内核的更新带来了一个新的TCP拥塞控制算法——BBR,该算法解决了几十年来基于丢包来估算带宽的一切算法所导致的在有错误导致丢包的网络环境中带宽降低问题,成为TCP拥塞控制算法的一个重要里程碑。就实际使用而言,在服务器上使用BBR拥塞控制算法可以提高TCP连接在有丢包的情况下所导致的速率严重降低的问题。对于蜂窝数据、不稳定的Wi-Fi、洲际网络连接都有诸多的好处。
BBR: Congestion-Based Congestion Control
然而Linode自己编译的内核却是一个十分精简的版本,并没有包含BBR算法。Linode早几年的机子使用的Xen虚拟化环境是直接从内核启动,在更换内核上有些许小小的麻烦,许多Linux初学者在网上搜索相关资料无果便放弃了。而我认为,作为开发者就应该有阅读官方英文文档的能力,恰好,Linode也提供了一个使用pv-grub更换内核的方式。https://www.linode.com/docs/tools-reference/custom-kernels-distros/run-a-distributionsupplied-kernel-with-pvgrub/
相信这个链接已经能解决大多数人遇到的问题了。
接下来介绍Debian/Ubuntu更换发行版内核的方式:
- 使用wget或curl下载内核的deb包(包括headers和image,纵然不安装headers也能正常使用,但将导致在编译软件包时出现异常),当然你也可以自己编译,这里以Linux 4.9.6 amd64为例:wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.9.6/linux-headers-4.9.6-040906_4.9.6-040906.201701260330_all.deb
- wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.9.6/linux-image-4.9.6-040906-generic_4.9.6-040906.201701260330_amd64.deb
- dpkg -i linux-headers-4.9.6-040906_4.9.6-040906.201701260330_all.deb
- dpkg -i linux-image-4.9.6-040906-generic_4.9.6-040906.201701260330_amd64.deb
- 卸载grub2和grub-pc:apt-get purge grub2 grub-pc
- 安装grub:apt-get install grub
- 按照官方教程,检查/boot/grub/menu.lst,看groot是否为(hd0),若为(hd0,0)需要修改,不用怀疑,修改的就是被注释掉的那部分。同样,kopt也改为kopt=root=/dev/xvda console=hvc0 ro quiet
- 执行update-grub
- 检查/etc/init/hvc0.conf是否为如下内容:
# hvc0 – getty
#
# This service maintains a getty on hvc0 from the point the system is
# started until it is shut down again.start on stopped rc RUNLEVEL=[2345]
stop on runlevel [!2345]respawn
exec /sbin/getty -8 38400 hvc0 - 到Linode的管理控制台将Kernel替换为pv-grub
- 在同一页面关闭Distro Helper,然后保存
- reboot,开始享受新内核。如果出现无法启动的情况可以使用Lish Console检查错误。如果自己解决不了在Linode管理控制台中将Kernel选项正常的内核然后重启即可。
- 在/etc/sysctl.conf中加入net.ipv4.tcp_congestion_control=bbr和net.core.default_qdisc=fq,然后执行sysctl -p
- Enjoy BBR!(CHL网络环境为福建厦门电信公众宽带,rainbow.tianhai.info是Linode Tokyo机房的服务器)
- 如此一来,国外服务器都可以当做一个视频云使用了,毕竟国内的流量费和带宽实在太贵太贵。这样可以给学生开发者剩下不少钱呢。
后记:
后来我也迫不及待在我的阿里云青岛服务器上升级了4.9内核启用了BBR算法,显然对于国内服务器几乎无丢包的情况是没有什么改变的,可能对于处在不稳定网络环境中访问我网站的用户会有体验上的提升。但是从我自己在阿里云用iperf实验结果来看,在这种几乎没有丢包的网络环境下,BBR在TCP丢包重传率上相比于cubic略微提高,而带宽并没有增加。但不可否认的是,BBR将是新一代TCP拥塞控制算法的开端。它的意义,不仅是实现了在不稳定的网络中提升带宽,更多的在于,它带给了我们一个对于TCP拥塞控制算法的新思考。我相信,未来会有更多的人站在Neal Cardwell, Yuchung Cheng, C. Stephen Gunn, Soheil Hassas Yeganeh, Van Jacobson这几位来自Google的巨人肩膀之上,以更低的网络负载让TCP传输性能变得更好。