执子之手

与子偕老


  • 首页

  • 分类

  • 归档

  • 标签

  • 关于

  • 搜索
close

在Linode节点上开启BBR算法

时间: 2017-04-17   |   分类: 翻墙     |   阅读: 1197 字 ~3分钟   |   访问: 0

BBR是Google开源的TCP拥堵控制算法,与2016年9月开源。BBR的目的是要尽量跑满带宽, 并且尽量不要有排队的情况, 其使用效果并不比速锐差。

Linux kernel 4.9+ 已支持 tcp_bbr。我在Linode安装了4.10.10内核,可以开启BBR。但是Linode自带的4.9无法开启。

1. BBR简介

关于其具体原理及各种分析可以看知乎上的讨论贴,很有技术含量。这里只做简单介绍。BBR试图解决两个问题:

  1. 在有一定丢包率的网络链路上充分利用带宽。非常适合高延迟、高带宽的网络链路: 标准TCP算法在只要有万分之一的丢包率情况下,带宽就只剩 30%;千分之一丢包率时只剩 10%;有百分之一的丢包率时几乎就卡住了。而 TCP BBR 在丢包率 5% 以下几乎没有带宽损失,在丢包率 15% 的时候仍有 75% 带宽。

  2. 降低网络链路上的 buffer 占用率,从而降低延迟。非常适合慢速接入网络的用户 延迟越高的用户,采用 TCP BBR 后的延迟下降比例越高,原来需要 10 秒的现在只要 2 秒了。

2. 启用BBR

目前VPS供应商的默认内核应该还没有这么新。即使是Linode提供了4.9.15,但是应该没有编译tcp_bbr模块进去,所以照样无法开启BBR功能。因此启用BBR需要首先安装新内核,然后开启相关配置即可。

2.1 更新内核

启用BBR需要替换内核。我用的VPS是Linode的。而Linode提供了一个比较方便的方式来切换内核,大大降低了新手操作的风险。它可以在管理后台选择需要启动的内核。通常我们可以新安装一个内核,而不用删除原有内核,在管理后台选择GRUB2启动我们新安装的内核即可,方便又安全。这样就有机会切换回原有的内核,而不用重新安装整个系统。

我在Linode的节点使用的Ubuntu 16.04LTS。这个版本默认内核可以选择到4.9.15。但是依然不支持BBR。因此需要安装新内核。

安装方法比较简单:

1wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.10.10/linux-image-4.10.10-041010-generic_4.10.10-041010.201704120813_amd64.deb
2dpkg -i linux-image-4.10.10-041010-generic_4.10.10-041010.201704120813_amd64.deb

这样就安装了新版本的内核。

然后在Linode管理控制台里面选择Boot Settings中的Kernel选择GRUB 2即可。选择之后,重启机器即可。

2.2 启用BBR

重启之后首先查看内核是否正确:

1root@localhost:~# uname -a
2Linux localhost 4.10.10-041010-generic #201704120813 SMP Wed Apr 12 12:15:07 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

表明已经升级到了4.10.10版本的内核。

然后查看是否编译了tcp_bbr模块:

1root@localhost:~# lsmod | grep tcp_bbr
2tcp_bbr                 6015  13

如果没有启用bbr则上面没有输出或者报错。

上面条件都满足之后就可以开启BBR了。

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

然后执行以下命令查看是否启用成功:

1root@localhost:~# sysctl net.ipv4.tcp_available_congestion_control
2sysctl net.ipv4.tcp_congestion_controlnet.ipv4.tcp_available_congestion_control = bbr cubic reno
3root@localhost:~# sysctl net.ipv4.tcp_congestion_control
4net.ipv4.tcp_congestion_control = bbr

如果结果都有bbr, 则证明你的内核已开启BBR。

2.3 效果

在我的Linode fremon节点上,开启之后大概能带来几倍的差距。开启后可以看1440p,1080p很流畅。 BBR有点不足的地方是使用中总是要缓冲一段时间然后才能够达到慢速,不会一下子达到。可能是因为我这边网络延迟有点大,毕竟有250-300ms了。

附录A. 参考资料

  • Linux Kernel 4.9 中的 BBR 算法与之前的 TCP 拥塞控制相比有什么优势?
  • Google BBR on Github
  • Ubuntu kernel mainline
  • 4.10.10 Kernel
#Linode# #Shadowsocks# #BBR#
通过Zabbix监控业务数据
在VSCode中为Vue.js开发启用静态类型检查Flow
  • 文章目录
  • 站点概览
Orchidflower

Orchidflower

Do one thing at a time, and do well.

77 日志
6 分类
84 标签
GitHub 知乎 OSC 豆瓣
  • 1. BBR简介
  • 2. 启用BBR
    • 2.1 更新内核
    • 2.2 启用BBR
    • 2.3 效果
  • 附录A. 参考资料
© 2009 - 2024 执子之手
Powered by - Hugo v0.113.0
Theme by - NexT
ICP - 鲁ICP备17006463号-1
0%