BBR

过去的这段时间内最有意思的东西,应该就是谷歌发布的新TCP拥塞控制算法了:BBR (Bottleneck Bandwidth and RTT)。

从使用VPS开始,对于任何可以优化的地方,都没有放过。OpenVZ主机上无法修改内核与TCP相关参数,只能依赖母机,因此搬瓦工的机子只能优化应用层和UDP,做过的优化包括升级到HTTP2,PHP7,使用CDN,Nginx采取数据压缩与缓存,VPN使用net_speeder双倍UDP发包,SS服务端也适用libev版本来降低资源占用......因为博客就在这里,需要保证稳定和安全。或许是因为母机的网络比较靠谱,从最开始使用搬瓦工到现在,除了大规模的网络波动时受影响,其他情况下,DO主机或Vultr主机都处于严重的延时和网络波动时,搬瓦工VPS上的SS还是稳如POI,不论是在北方,南方,还是在公司,家里,而连接VPN时,一般也不会被阻断,只是非移动网络的速度不是很理想,给人一种维持在低速而恒定的感觉。

由于长时间使用搬瓦工,让我有一种错觉......世界上只存在搬瓦工和搬瓦工以外的VPS服务商。DO和Vultr的机子一般都很挑运营商,对网络环境的变化也十分敏感,天知道它们走的是哪个线路,而且鬼知道运营商为你订制了一套什么样的拦截策略。电信常做的事情就是劫持HTTP请求,最糟糕的情况,就是拦截本地到VPS间的全部流量,长城宽带更胜一筹,对于一些HTTP请求,直接在它的服务器上做了缓存,我在公司更新Ubuntu的下的软件时,都会出现直接从长城宽带服务器下载数据的情况。结果就是用户很受伤,十分受伤。自己使用的Vultr主机是日本节点,在之前的公司网速十分稳定,YouTube的视频连接速率可以达到2000Kbps/s,但到了家里后,一般稳定在400Kbps/s,还经常断开,而另一个同事买的Vultr硅谷节点正好相反,在家中速度较快(连接速率约1000Kbps左右),而在公司基本连不上。如果购买VPS都要经过这样考察和测试,那实在太麻烦了。

对于一些程序员来说,没办法上外网基本是无法接受的,而喜欢折腾的程序员,会疯掉......所以BBR来拯救苍生了。(好吧,我乱说的)

关于BBR,可以直接查看它的提交信息,里面已经有详细的说明了

tcp_bbr: add BBR congestion control

BBR的长期效果还不太清晰,毕竟对TCP从未停止,但还没有一个算法能解决所有网络情况,谷歌已经在其内网,主站点和YouTube上部署了BBR,经过长期测试后才发布。部署BBR只需修改服务端,因此可以不用担心兼容性,BBR的部署也很简单,升级Linux内核至4.9正式版,然后启用BBR拥塞算法。

首先,给VPS拍摄快照,或者进行必要的数据备份!X3

同事的VPS升级4.9内核时跪了一次,而我的桌面主机升级时,图形驱动也跪了一次。升级内核这种重大操作,一定要注意备份数据,或者做好跪掉后修复的准备。

Ubuntu 17.04将采用Linux内核4.9版本,Canonical早就构建好内核了,使用Ubuntu的服务器可以不用自己编译内核(编译起来真的好慢),地址在这里:http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.9/

下载

linux-headers-4.9.0-040900-generic_4.9.0-040900.201612111631_amd64.deb

linux-image-4.9.0-040900-generic_4.9.0-040900.201612111631_amd64.deb

安装,执行update-grub命令确保更新了grub引导,然后重启。

然后修改sysctl.conf,修改拥塞算法为bbr,排队规则为fq,如果客户端也使用Linux,还可以开启tcp_fastopen,在服务端和客户端,以及SS配置文件里都需要开启。最后执行sysctl -p应用修改。

net.ipv4.tcp_congestion_control=bbr
net.core.default_qdisc=fq
net.ipv4.tcp_fastopen=3

Vultr日本节点在升级内核后,YouTube视频连接速率提升到了3000Kbps左右......1080p无压力,2k和4k的视频,在缓冲后也可以观看。在Vultr主机上,我也搭建了zmirror youtube pc镜像站点,可以明显感觉到加了缓存的zmirror配合HTTP2,BBR,连接速率比使用实时转发的SS更快,速率可以维持在3500Kbps左右,在夜间还可以冲到5000Kbps。同事的美国节点主机在升级后,速度也有所提升,在家里连接速度约2000Kbps。

与之前使用net_speeder加速VPN相比,BBR的优化显得更加稳定,不会出现像VPN一样,连接速率高,而缓存健康度和下载速度慢的。由于国内运营商对UDP的丢包更严重,而VPN的特征也十分明显,容易被干扰,所以说还是多搞定一些代理工具吧~

Update:

Ubuntu 16.04 LTS的内核已经更新到了4.10,可以删除掉launchpad的ppa,直接使用官方的稳定内核了,直接用apt命令安装即可。