前言

BBR 具体的原理可以参照 知乎上的文章 。对于技术工种的人们来讲,梯子这种日常使用频率极高的工具,自然是一分快十分好,果断要升级一下!

选择 kernel

官方的 apt 包提供的内核以稳定为主,必然不会是最新的。要升级到 4.9 的 Kernel,需要手动操作。

首先是挑选需要的版本,官方 upstream kernel 列表:http://kernel.ubuntu.com/~kernel-ppa/mainline/ , 拉到下面就可以看到 4.9 了,点进去。

我的是 64 位系统,对应就要下载这个节点的文件:

1
2
3
4
5
6
Build for amd64 succeeded (see BUILD.LOG.amd64):
 linux-headers-4.9.0-040900_4.9.0-040900.201612111631_all.deb
 linux-headers-4.9.0-040900-generic_4.9.0-040900.201612111631_amd64.deb
 linux-headers-4.9.0-040900-lowlatency_4.9.0-040900.201612111631_amd64.deb
 linux-image-4.9.0-040900-generic_4.9.0-040900.201612111631_amd64.deb
 linux-image-4.9.0-040900-lowlatency_4.9.0-040900.201612111631_amd64.deb

内核一般由 2 部份组成,linux-headers 是内核的头文件,当你编译的程序需要引用内核时就靠它了; linux-image 开头的文件就是内核编译后的镜像,是实际可运行的部分。genericlowlatency 则是针对不同的使用场景进行调优的版本。

稍微查了一下 lowlatency 的信息。它比较适用实时性要求较高的场景,比如说录音之类的使用场景,所谓有得必说失,代价可能是稳定性和吞吐量(这个就跟 BBR 的原理差不多,牺牲带宽换取速度,当然这里的吞吐量会不会也影响到网络就不知道咯)。我这边由于网络出口本身也就不怎么样,估计就是有差别也很难测得出来。总之,若你不知道选哪个的话,就用 generic 版本的。

安装配置

上面有 3 个 headers 和 2 个 image ,其中 headers 中的 allgenericlowlatency 都需要的依赖。也就是一共要安装 3 个包。接下来,把 3 个文件都 wget 到本地:

1
2
3
4
wget \
  http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.9/linux-headers-4.9.0-040900_4.9.0-040900.201612111631_all.deb \
  http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.9/linux-headers-4.9.0-040900-generic_4.9.0-040900.201612111631_amd64.deb \
  http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.9/linux-image-4.9.0-040900-generic_4.9.0-040900.201612111631_amd64.deb

安装:

1
dpkg -i linux-*

配置使用新内核:

1
2
update-grub
reboot

正常启动,删除旧内核,通过以下的命令列出所有的 headersimage

1
2
dpkg -l | grep linux-headers | awk '{print $2}'
dpkg -l | grep linux-image | awk '{print $2}'

然后把旧的 headers 和 image 一个个删除掉就行了:

1
dpkg purge xxxx

开始配置 BBR

1
2
3
4
echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
sysctl -p
reboot

测试 BBR 是否是已经开启(若有输出即证明 ok 了)

1
lsmod | grep bbr

个人使用感受

看油管确实流畅许多。今天看 Primitive Technology 1080p 时,只在开头缓冲了一下,后面就很流畅了。