魔改BBR算法的尝试

众所周知,这年头的机器不做一番“优化”,带宽利用率根本竞争不过邻居;



于是机智的MJJ都用上了比默认的cubic/reno更aggressive的TCP拥塞控制,而当中又以BBR和锐速为代表。



作为g粉自然是要选择BBR的,毕竟有google和整个linux社区做后台,长远下去肯定要比闭源又停止支持的锐速走得更远。



那么问题来了:在大中华区特殊的国情下,更顾及公平性的BBR比起锐速带宽竞争力还是有些疲软的。能否通过一些小改动,让BBR变得更有侵略性呢?



能!



初版BBR:

https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git/plain/net/ipv4/tcp_bbr.c



魔改BBR:

https://gist.github.com/anonymous/ba338038e799eafbba173215153a7f3a/raw/55ff1e45c97b46f12261e07ca07633a9922ad55d/tcp_tsunami.c



编译时系统必须安装4.10以上版本的kernel及对应的linux-header,gcc版本应在4.9以上



以4.10.9为例,需先更换内核,再先后安装:

(http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.10.9/)

linux-headers-4.10.9-041009_4.10.9-041009.201704080516_all.deb

linux-headers-4.10.9-041009-generic_4.10.9-041009.201704080516_amd64.deb





以下步骤在debian 8及ubuntu 16上测试通过:


  1. apt-get install make gcc-4.9
  2. wget -O ./tcp_tsunami.c https://gist.github.com/anonymous/ba338038e799eafbba173215153a7f3a/raw/55ff1e45c97b46f12261e07ca07633a9922ad55d/tcp_tsunami.c
  3. echo “obj-m:=tcp_tsunami.o” > Makefile
  4. make -C /lib/modules/$(uname -r)/build M=`pwd` modules CC=/usr/bin/gcc-4.9
  5. install tcp_tsunami.ko /lib/modules/$(uname -r)/kernel
  6. depmod -a
  7. insmod tcp_tsunami.ko
  8. sysctl -w net.ipv4.tcp_congestion_control=tsunami

复制代码





关键参数:bbr_bw_rtts, bbr_min_rtt_win_sec, bbr_probe_rtt_mode_ms, bbr_cwnd_min_target, bbr_drain_gain



关键数组:bbr_pacing_gain



经过一个月的测试,魔改BBR比起正常版的BBR确实强上不少,最起码以前看y2b 4k断断续续的远东ss现在能流畅播放了



以上版本的BBR不保证普适性,建议自行修改参数测试





参考链接:

1. http://blog.csdn.net/dog250/article/details/52939004

2. http://blog.csdn.net/dog250/article/details/52879298

3. http://blog.csdn.net/dog250/article/details/52972502

4. https://patchwork.ozlabs.org/patch/671069/

 

 

附上萌咖制作的一键脚本

  • 背景:
  • 原版的BBR对于我们来说,速度不太稳定.

    通过修改BBR源码,调整参数,使其更强劲.


    更新:

    [2017.07.15]

    自动检测gcc版本,如果gcc版本大于4.9的将不会再安装gcc.

    [2017.07.12]

    支持用户自行指定内核版本(需要与 -f 命令同时使用).


  • 准备:
  • 使用前,请确认能够开启BBR.

    可参考: Debian/Ubuntu 开启 TCP BBR 拥塞算法

    或者直接执行此命令进行开启.

    注意:执行此命令会自动重启.


  • 一键地址:
  • 指定内核版本(以v4.11.9内核版本为例):

  • 说明:
    • 执行过程中会重新编译模块.
    • 模块默认为开机自动加载.
    • 模块名称:tcp_bbr_powered
    • 可用 modprobe tcp_bbr_powered 命令进行加载模块.
    • 可执行 lsmod |grep 'bbr_powered' 

      结果不为空,则加载模块成功
    • 可执行 sysctl -w net.ipv4.tcp_congestion_control=bbr_powered 使用此模块.
    • 以上只是说明,直接使用一键脚本即可.


  • 完整代码:

  • 注意事项:
  • 如遇报错:Error! Header not be matched by Linux Kernel.

    请用使用本博客提供的脚本重新开启BBR,可直接参考本篇中的准备步骤.

    如遇报错:Error! Install gcc-4.9.

    首先尝试apt-get update,再次执行此脚本.

    如果未解决想办法自行安装gcc-4.9,或切换系统后再试.

    本脚本在Debian8,Ubuntu16.04上通过测试.


 

发表评论

邮箱地址不会被公开。 必填项已用*标注