Debian/Ubuntu TCP BBR 改进版/增强版/魔改版

  • 背景:
  • 原版的BBR对于我们来说,速度不太稳定.
    通过修改BBR源码,调整参数,使其更强劲.


    更新:
    [2017.07.25]
    修复一个由检测gcc版本引起的不可预料的错误.
    [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,或使用-f参数.可参考本篇中的准备步骤.
    如遇报错:Error! Install makeError! Install gcc.
    首先尝试apt-get update,再次执行此脚本.
    如果未解决想办法自行安装gcc(>=4.9),或切换系统后再试.
    本脚本在Debian8,Debian9,Ubuntu16.04上通过测试.


  • 引用评论中提供的在Ubuntu安装gcc-4.9的方法:

  1. n7then说道:

    :smile: 多谢楼主啦~ 有了点动手能力之前一直在loc折腾好了,不过这很方便在其他小鸡上部署.

  2. 冻猫说道:

    已经用上了,感谢大佬。方便太多了。

  3. 自行安装gcc-4.9说道:

    sudo add-apt-repository ppa:ubuntu-toolchain-r/test
    sudo apt-get update
    sudo apt-get install g++-4.9

  4. 搬瓦工说道:

    稍后再搬瓦工VPS上试试。

  5. 意外多惊喜少说道:

    内核及headers都已升级到4.11.7。遇报错:Error! Header not be matched by Linux Kernel。

    1. Vicer说道:

      用我博客给的BBR脚本,开启原版之后再试

  6. 意外多惊喜少说道:

    是的,先按照BBR脚本开启原版,再运行BBR_POWERED脚本可成功安装。速度和稳定性都明显提升。
    请问,如果此时再升级内核到4.11.07,BBR_POWERED是不会失效呢?

    1. Vicer说道:

      这个可以自行测试,4.11.07是目前最新的吗?
      我的匹配方法可能存在一些问题.
      ------------------------------
      目前已经修改为默认获取最新的了.
      你可以把两个SHELL再跑一遍,就是默认最新的4.11.07内核.

  7. linhua说道:

    感谢,已将此集成到LKL上.

    1. xiaoxuan说道:

      求个lkl 魔改bbr教程

    2. Tbag说道:

      dalao啥时候发布魔改lkl造福我等p民 :smile:

    3. 红领巾说道:

      请放出你的lkl一键包 :redface:

  8. jevin说道:

    感谢大佬,一键包专业户,造福我等小白! :arrow:

    1. Vicer说道:

      谢谢支持

  9. caaol说道:

    没有centos的吗?

    1. Vicer说道:

      没有,CentOS的系统特征(BUG)那么多,不愿碰.

  10. Tbag说道:

    感谢大佬 :smile:

  11. 墙出新境界说道:

    运行脚本提示Error! Install make.

    1. Vicer说道:

      尝试使用:
      apt-get update

    2. 墙出新境界说道:

      换了乌班图系统后,先执行第一个开启BBR命令, 然后执行BBR修改版命令可以了。谢谢VICER大佬。

  12. 悲伤的蜗牛说道:

    最新的内核是4.12了,好像开了bbr很慢,只有20k/s。换成4.11.8就正常了

    1. Vicer说道:

      我加个指定版本安装的参数

  13. zvv说道:

    大佬,执行lsmod |grep 'bbr_powered'结果是空怎么办。。

    1. Vicer说道:

      魔改版BBR模块没编译成功?

    2. zvv说道:

      解决了。。是因为Kimsufi的服务器内核更新不了的缘故,重装系统选择自定义安装的时候选上发行版内核就可以开启了。 :lol:

  14. YYwudi说道:

    Debian 9 无法安装gcc-4.9 必须这个版本么?

    1. Vicer说道:

      gcc版本大于4.9就行了.

    2. YYwudi说道:

      希望可以更新一下支持Debian 9 ,Debian 9 gcc版本是6.3.0,脚本里面则是限死了gcc-4.9,可以区别处理一下几个 which gcc-4.9

    3. Vicer说道:

      没问题

  15. yywudi说道:

    现在的版本能指定安装4.11的kernel么,看上面的兄弟说4.12的很慢?

    1. Vicer说道:

      默认是选择官方提供的最新版本的内核.
      正在添加安装指定内核版本的功能,请更新后再试.

    2. Vicer说道:

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

  16. 123456说道:

    内核使用4.11.9就安装不了,你提供的bbr安装版本只能4.12,而4.12非常难用

    1. Vicer说道:

      默认是选择官方提供的最新版本的内核.
      正在添加安装指定内核版本的功能,请更新后再试.

    2. Vicer说道:

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

  17. cjtkfan说道:

    gcc-4.9 还是限定了,无法绕过4.9,希望能判定下,大于4.9则跳过这个安装

    1. Vicer说道:

      该问题已经修复.

  18. shuori说道:

    博主你好,想问下你的优化思路是什么?我看了下你的代码,不太理解你改的地方,是经过大量测试得到的参数?还是博主个人对BBR的理解?

    1. Vicer说道:

      一些经验和理解

  19. amore-mss说道:

    新的4.12.2的内核,好像不能开启魔改版,Ubuntu14.04 的

    1. Vicer说道:

      可以用 -f 参数指定要安装的内核版本

  20. index说道:

    21号的4.12.3 bbr好像开不了 试了好几次 4.12.2倒是正常 debian 9支持了没

    1. Vicer说道:

      我的脚本一直都支持Debian 9啊。
      使用前先 apt-get update 一下就行了。
      -f 参数可指定想要安装的内核版本号。
      如果不加参数,则默认选择安装最新的非rc版.

    2. index说道:

      :surprised: 等会换9试试 前几天没成功 :lol:

    3. Vicer说道:

      刚刚测试的。
      在脚本后面加-f v4.12.2,就是安装4.12.2的内核.
      原版BBR和增强的都需要这个参数,而且参数要一致.

  21. htmla说道:

    “BBR_POWERED.sh: line 41: [: : integer expression expected
    The gcc version require gcc-4.9 or higher.
    You can try apt-get install -y gcc-4.9 or apt-get install -y gcc-6
    Please upgrade it manually! ”
    Ubuntu14.4,已经安装GCC6,很奇怪。。。

    1. Vicer说道:

      运行下readlink which gcc
      看看显示的是什么版本。
      如果没有高于4.9,需要手动安装高版本的。
      然后创建文件链接至/usr/bin/gcc.
      例如:
      本机安装的是gcc-4.9.
      则运行这条命令创建文件链接:
      ln -sf which gcc-4.9 /usr/bin/gcc

  22. 2alchemist说道:

    装好了之后用.$.$上不了外网了qaq

    1. Vicer说道:

      是不是自己配置的问题?

  23. Hao说道:

    我这边测试貌似多个vps都出现了4.12及以上内核的bbr魔改速度对于某些线路很差劲的情况,反正4.11.x内核都挺稳当的

    1. Vicer说道:

      该脚本可以使用-f参数随意指定版本号。
      可以选择最稳定的使用,没必要使用最新的内核。
      我一般都不开BBR,比较习惯使用锐速。

  24. mvooer说道:

    add-apt-repository ppa:ubuntu-toolchain-r/test
    #如果上一条命令错误需要安装其他包
    apt-get install software-properties-common
    apt-get update -y && apt-get upgrade -y
    apt-get install g++-4.9

    1. Vicer说道:

      谢谢给予反馈,稍后补充到文章中,供更多人参考

  25. hh说道:

    头像好评,最爱灰原哀

  26. YUX说道:

    请问开启魔改之后需要卸载原版么?

    1. Vicer说道:

      不需要

  27. cokebar说道:

    首先非常感谢作者您的一键脚本
    不过如果脚本能加入清理的功能就好了 目前会留下deb包和tmp目录

    1. Vicer说道:

      脚本本着公开的原则写的。
      我会尝试把目录写到 /tmp 。
      该目录重启后会自动清空,这样会好一点.
      谢谢你的建议

  28. 1075说道:

    新装的debian 9 会提示Header not be matched by Linux Kernel.
    内核是debian9默认的 Linux debian 4.9.0-3-amd64 #1 SMP Debian 4.9.30-2+deb9u2 (2017-06-26) x86_64 GNU/Linux
    请问怎么解决?

    1. Vicer说道:

      用脚本开一下原版就可以了

  29. 麦子说道:

    2017年8月26日,gcc版本检测的问题依旧,已经装了gcc4.9和gcc6了,还是提示没装,没办法只好把你的代码中检测gcc后的exit 1去掉了,然后就可以安装了

    1. Vicer说道:

      仔细看下脚本,你就会发现.
      其实是以which gcc所得到的路径判定gcc的版本.
      所以只需要把现有的新版本的gcc,软连接到which gcc的路径,就没有问题了.

  30. 2048说道:

    已經不能用了 下載tcp_bbr_powered.c.deb變成網頁 是不是不想再給別人玩了?

    1. Vicer说道:

      不存在的,一直都是可以使用的
      如果你下载的是个网页,就说明你并非从脚本安装使用

  31. lastfreedom说道:

    大佬 你好 请问一下 我的鸡用的是linode的 内核版本号是 4.9.36 请问为什么一直提示Error! Header not be matched by Linux Kernel.

    1. Vicer说道:

      header 与当前前 kernel 的版本不匹配,请尝试更换内核或指定版本安装

  32. hodis说道:

    Download BBR POWERED Source code
    /root/tmp/tcp_bbr_powered.c:67:20: error: field ‘cycle_mstamp’ has incomplete type
    struct skb_mstamp cycle_mstamp; /* time of this cycle phase start */
    ^
    /root/tmp/tcp_bbr_powered.c: In function ‘bbr_is_next_cycle_phase’:
    /root/tmp/tcp_bbr_powered.c:387:3: error: implicit declaration of function ‘skb_mstamp_us_delta’ [-Werror=implicit-function-declaration]
    skb_mstamp_us_delta(&tp->delivered_mstamp, &bbr->cycle_mstamp) >
    ^
    /root/tmp/tcp_bbr_powered.c: In function ‘bbr_reset_lt_bw_sampling_interval’:
    /root/tmp/tcp_bbr_powered.c:473:43: error: request for member ‘stamp_jiffies’ in something not a structure or union
    bbr->lt_last_stamp = tp->delivered_mstamp.stamp_jiffies;
    ^
    /root/tmp/tcp_bbr_powered.c: In function ‘bbr_lt_bw_sampling’:
    /root/tmp/tcp_bbr_powered.c:579:32: error: request for member ‘stamp_jiffies’ in something not a structure or union
    t = (s32)(tp->delivered_mstamp.stamp_jiffies - bbr->lt_last_stamp);
    ^
    In file included from /root/tmp/tcp_bbr_powered.c:31:0:
    /root/tmp/tcp_bbr_powered.c: In function ‘bbr_update_min_rtt’:
    /root/tmp/tcp_bbr_powered.c:707:25: warning: passing argument 2 of ‘before’ makes integer from pointer without a cast
    filter_expired = after(tcp_time_stamp,
    ^
    ./include/net/tcp.h:303:41: note: in definition of macro ‘after’
    #define after(seq2, seq1) before(seq1, seq2)
    ^
    ./include/net/tcp.h:299:20: note: expected ‘__u32’ but argument is of type ‘u32 (*)(const struct tcp_sock *)’
    static inline bool before(__u32 seq1, __u32 seq2)
    ^
    /root/tmp/tcp_bbr_powered.c:712:22: warning: assignment makes integer from pointer without a cast
    bbr->min_rtt_stamp = tcp_time_stamp;
    ^
    /root/tmp/tcp_bbr_powered.c:737:30: warning: assignment makes integer from pointer without a cast
    bbr->probe_rtt_done_stamp = tcp_time_stamp +
    ^
    In file included from /root/tmp/tcp_bbr_powered.c:31:0:
    /root/tmp/tcp_bbr_powered.c:745:14: warning: passing argument 2 of ‘before’ makes integer from pointer without a cast
    after(tcp_time_stamp, bbr->probe_rtt_done_stamp)) {
    ^
    ./include/net/tcp.h:303:41: note: in definition of macro ‘after’
    #define after(seq2, seq1) before(seq1, seq2)
    ^
    ./include/net/tcp.h:299:20: note: expected ‘__u32’ but argument is of type ‘u32 (*)(const struct tcp_sock *)’
    static inline bool before(__u32 seq1, __u32 seq2)
    ^
    /root/tmp/tcp_bbr_powered.c:746:24: warning: assignment makes integer from pointer without a cast
    bbr->min_rtt_stamp = tcp_time_stamp;
    ^
    /root/tmp/tcp_bbr_powered.c: In function ‘bbr_init’:
    /root/tmp/tcp_bbr_powered.c:793:21: warning: assignment makes integer from pointer without a cast
    bbr->min_rtt_stamp = tcp_time_stamp;
    ^
    cc1: some warnings being treated as errors
    scripts/Makefile.build:308: recipe for target '/root/tmp/tcp_bbr_powered.o' failed
    make[1]: *** [/root/tmp/tcp_bbr_powered.o] Error 1
    Makefile:1512: recipe for target '_module_/root/tmp' failed
    make: *** [_module_/root/tmp] Error 2
    Loading TCP BBR POWERED...
    modprobe: FATAL: Module tcp_bbr_powered not found.
    Error, Loading BBR POWERED.

    1. Vicer说道:

      LINUX HEADER 不对?

    2. 坚定说道:

      之前安装都没问题,今天阿里云 安装这个脚本也遇到同样都问题了。
      请问你弄好了吗?

    3. Vicer说道:

      请使用 -f v4.13 参数.

    4. Chasing说道:

      遇到了和你一模一样的问题

  33. hodis说道:

    不知道呢 以前都没有问题

    1. Vicer说道:

      很长一段时间都没有改过了,如果改过会在更新里面写的.

  34. hodis说道:

    应该是 linux-image-4.13.0-041300-generic_4.13.0-041300.201709031731_amd64.deb 的事

  35. hodis说道:

    linux-image-4.13.0-041300-generic_4.13.0-041300.201709031731_amd64.deb
    是不是比 4.12 调整了东西

    1. Vicer说道:

      那就不清楚了,这玩意不是哪个稳定用哪个?

  36. truthrer说道:

    -f v4.13.0
    使用-f参数执行4.13.0版本失败,新开的vps,debian7,系统默认是4.13.0内核的。
    楼主能否支持一下?谢谢!

    1. Vicer说道:

      刚刚看了一下,请使用 -f v4.13 参数.
      版本号可从这里查看
      http://kernel.ubuntu.com/~kernel-ppa/mainline/

  37. dae说道:

    Debian 7 64 位 OpenVZ架构 运行脚本 出现Not found grub. 博主怎么解决哦? :cry: :cry: :cry:

    1. Vicer说道:

      OpenVZ构架的请尝试UML版或者LKL版.此脚本只适用于非OpenVZ的机器

  38. LeoChien说道:

    对于版本号的判断可能有些问题,主要是像4.11,4.12,4.13这种,目录是4.11,4.12,4.13,实际头和内核都是4.11.0,4.12.0,4.13.0

    1. Vicer说道:

      这点小问题,就不去改脚本了

  39. dae说道:

    博主,请问怎么查到得 BBR正常运行了

    1. Vicer说道:

      文章中有说明

  40. Yxl说道:

    报错modprobe: FATAL: Module tcp_bbr_powered not found.

    1. Vicer说道:

      脚本没跑全,或者换内核失败

  41. nideii说道:

    求同,linux 4.13并不能正常编译。linux 4.14是LTS,希望po主更新下。

    1. Vicer说道:

      好的,谢谢反馈

  42. eddieby说道:

    大兄弟 安装脚本有问题啊
    Download BBR POWERED Source code
    /root/tmp/tcp_bbr_powered.c:67:20: error: field ‘cycle_mstamp’ has incomplete type
    struct skb_mstamp cycle_mstamp; /* time of this cycle phase start */
    ^
    /root/tmp/tcp_bbr_powered.c: In function ‘bbr_is_next_cycle_phase’:
    /root/tmp/tcp_bbr_powered.c:387:3: error: implicit declaration of function ‘skb_mstamp_us_delta’ [-Werror=implicit-function-declaration]
    skb_mstamp_us_delta(&tp->delivered_mstamp, &bbr->cycle_mstamp) >
    ^
    /root/tmp/tcp_bbr_powered.c: In function ‘bbr_reset_lt_bw_sampling_interval’:
    /root/tmp/tcp_bbr_powered.c:473:43: error: request for member ‘stamp_jiffies’ in something not a structure or union
    bbr->lt_last_stamp = tp->delivered_mstamp.stamp_jiffies;
    ^
    /root/tmp/tcp_bbr_powered.c: In function ‘bbr_lt_bw_sampling’:
    /root/tmp/tcp_bbr_powered.c:579:32: error: request for member ‘stamp_jiffies’ in something not a structure or union
    t = (s32)(tp->delivered_mstamp.stamp_jiffies - bbr->lt_last_stamp);
    ^
    In file included from /root/tmp/tcp_bbr_powered.c:31:0:
    /root/tmp/tcp_bbr_powered.c: In function ‘bbr_update_min_rtt’:
    /root/tmp/tcp_bbr_powered.c:707:25: warning: passing argument 2 of ‘before’ makes integer from pointer without a cast [-Wint-conversion]
    filter_expired = after(tcp_time_stamp,
    ^
    ./include/net/tcp.h:303:41: note: in definition of macro ‘after’
    #define after(seq2, seq1) before(seq1, seq2)
    ^
    ./include/net/tcp.h:299:20: note: expected ‘__u32 {aka unsigned int}’ but argument is of type ‘u32 (*)(const struct tcp_sock *) {aka unsigned int (*)(const struct tcp_sock *)}’
    static inline bool before(__u32 seq1, __u32 seq2)
    ^
    /root/tmp/tcp_bbr_powered.c:712:22: warning: assignment makes integer from pointer without a cast [-Wint-conversion]
    bbr->min_rtt_stamp = tcp_time_stamp;
    ^
    /root/tmp/tcp_bbr_powered.c:737:30: warning: assignment makes integer from pointer without a cast [-Wint-conversion]
    bbr->probe_rtt_done_stamp = tcp_time_stamp +
    ^
    In file included from /root/tmp/tcp_bbr_powered.c:31:0:
    /root/tmp/tcp_bbr_powered.c:745:14: warning: passing argument 2 of ‘before’ makes integer from pointer without a cast [-Wint-conversion]
    after(tcp_time_stamp, bbr->probe_rtt_done_stamp)) {
    ^
    ./include/net/tcp.h:303:41: note: in definition of macro ‘after’
    #define after(seq2, seq1) before(seq1, seq2)
    ^
    ./include/net/tcp.h:299:20: note: expected ‘__u32 {aka unsigned int}’ but argument is of type ‘u32 (*)(const struct tcp_sock *) {aka unsigned int (*)(const struct tcp_sock *)}’
    static inline bool before(__u32 seq1, __u32 seq2)
    ^
    /root/tmp/tcp_bbr_powered.c:746:24: warning: assignment makes integer from pointer without a cast [-Wint-conversion]
    bbr->min_rtt_stamp = tcp_time_stamp;
    ^
    /root/tmp/tcp_bbr_powered.c: In function ‘bbr_init’:
    /root/tmp/tcp_bbr_powered.c:793:21: warning: assignment makes integer from pointer without a cast [-Wint-conversion]
    bbr->min_rtt_stamp = tcp_time_stamp;
    ^
    cc1: some warnings being treated as errors
    scripts/Makefile.build:308: recipe for target '/root/tmp/tcp_bbr_powered.o' failed
    make[1]: *** [/root/tmp/tcp_bbr_powered.o] Error 1
    Makefile:1512: recipe for target '_module_/root/tmp' failed
    make: *** [_module_/root/tmp] Error 2
    Loading TCP BBR POWERED...
    modprobe: FATAL: Module tcp_bbr_powered not found in directory /lib/modules/4.13.0-041300-generic
    Error, Loading BBR POWERED.

    1. Vicer说道:

      请暂时使用 4.12.x 版本
      使用方法,在shell脚本后加 -f 4.12.x ,x为一个数字.

  43. Yxl说道:

    多谢 已解决 :smile:

  44. Potato说道:

    這個是什麼錯誤? make file 發生
    arch/x86/Makefile:136: CONFIG_X86_X32 enabled but no binutils support

    1. Vicer说道:

      适用一下低版本的内核

  45. yorkchou说道:

    似乎失效了?
    Download Kernel Headers for All
    linux-headers-4.13.2-041302_4.13.2-041302.201709132057_all.deb
    Install Kernel Headers for All
    linux-headers-4.13.2-041302_4.13.2-041302.201709132057_all.deb
    Download Kernel Headers
    linux-headers-4.13.2-041302-generic_4.13.2-041302.201709132057_amd64.deb
    Install Kernel Headers
    linux-headers-4.13.2-041302-generic_4.13.2-041302.201709132057_amd64.deb
    Download BBR POWERED Source code
    /root/tmp/tcp_bbr_powered.c:67:20: error: field ‘cycle_mstamp’ has incomplete type
    struct skb_mstamp cycle_mstamp; /* time of this cycle phase start */
    ^
    /root/tmp/tcp_bbr_powered.c: In function ‘bbr_is_next_cycle_phase’:
    /root/tmp/tcp_bbr_powered.c:387:3: error: implicit declaration of function ‘skb_mstamp_us_delta’ [-Werror=implicit-function-declaration]
    skb_mstamp_us_delta(&tp->delivered_mstamp, &bbr->cycle_mstamp) >
    ^
    /root/tmp/tcp_bbr_powered.c: In function ‘bbr_reset_lt_bw_sampling_interval’:
    /root/tmp/tcp_bbr_powered.c:473:43: error: request for member ‘stamp_jiffies’ in something not a structure or union
    bbr->lt_last_stamp = tp->delivered_mstamp.stamp_jiffies;
    ^
    /root/tmp/tcp_bbr_powered.c: In function ‘bbr_lt_bw_sampling’:
    /root/tmp/tcp_bbr_powered.c:579:32: error: request for member ‘stamp_jiffies’ in something not a structure or union
    t = (s32)(tp->delivered_mstamp.stamp_jiffies - bbr->lt_last_stamp);
    ^
    In file included from /root/tmp/tcp_bbr_powered.c:31:0:
    /root/tmp/tcp_bbr_powered.c: In function ‘bbr_update_min_rtt’:
    /root/tmp/tcp_bbr_powered.c:707:25: warning: passing argument 2 of ‘before’ makes integer from pointer without a cast
    filter_expired = after(tcp_time_stamp,
    ^
    ./include/net/tcp.h:303:41: note: in definition of macro ‘after’
    #define after(seq2, seq1) before(seq1, seq2)
    ^
    ./include/net/tcp.h:299:20: note: expected ‘__u32’ but argument is of type ‘u32 (*)(const struct tcp_sock *)’
    static inline bool before(__u32 seq1, __u32 seq2)
    ^
    /root/tmp/tcp_bbr_powered.c:712:22: warning: assignment makes integer from pointer without a cast
    bbr->min_rtt_stamp = tcp_time_stamp;
    ^
    /root/tmp/tcp_bbr_powered.c:737:30: warning: assignment makes integer from pointer without a cast
    bbr->probe_rtt_done_stamp = tcp_time_stamp +
    ^
    In file included from /root/tmp/tcp_bbr_powered.c:31:0:
    /root/tmp/tcp_bbr_powered.c:745:14: warning: passing argument 2 of ‘before’ makes integer from pointer without a cast
    after(tcp_time_stamp, bbr->probe_rtt_done_stamp)) {
    ^
    ./include/net/tcp.h:303:41: note: in definition of macro ‘after’
    #define after(seq2, seq1) before(seq1, seq2)
    ^
    ./include/net/tcp.h:299:20: note: expected ‘__u32’ but argument is of type ‘u32 (*)(const struct tcp_sock *)’
    static inline bool before(__u32 seq1, __u32 seq2)
    ^
    /root/tmp/tcp_bbr_powered.c:746:24: warning: assignment makes integer from pointer without a cast
    bbr->min_rtt_stamp = tcp_time_stamp;
    ^
    /root/tmp/tcp_bbr_powered.c: In function ‘bbr_init’:
    /root/tmp/tcp_bbr_powered.c:793:21: warning: assignment makes integer from pointer without a cast
    bbr->min_rtt_stamp = tcp_time_stamp;
    ^
    cc1: some warnings being treated as errors
    scripts/Makefile.build:308: recipe for target '/root/tmp/tcp_bbr_powered.o' failed
    make[1]: *** [/root/tmp/tcp_bbr_powered.o] Error 1
    Makefile:1512: recipe for target '_module_/root/tmp' failed
    make: *** [_module_/root/tmp] Error 2
    Loading TCP BBR POWERED...
    modprobe: FATAL: Module tcp_bbr_powered not found.
    Error, Loading BBR POWERED.

    1. Vicer说道:

      你好,目前不支持4.13

  46. 阿斯蒂芬说道:

    大佬现在4.13.1能支持不,我安装都是出错

    1. Vicer说道:

      不好意思,不支持

  47. maple说道:

    博主,我用Google cloud compute engine 中的VM instance 执行完 wget --no-check-certificate -qO 'BBR.sh' 'https://moeclub.org/attachment/LinuxShell/BBR.sh' && chmod a+x BBR.sh && bash BBR.sh -f
    重启之后重开putty 进行SSH连接一直失败,原先可以。后来直接去谷歌网页自带的SSH连接也是失败。
    “Connection Failed
    We are unable to connect to the VM on port 22. Learn more about possible causes of this issue.” 搜了下发现无从下手。 :lol:

  48. 马克和刘明说道:

    cc1: some warnings being treated as errors
    scripts/Makefile.build:308: recipe for target '/usr/src/tmp/tcp_bbr_powered.o' failed
    make[1]: *** [/usr/src/tmp/tcp_bbr_powered.o] Error 1
    Makefile:1512: recipe for target '_module_/usr/src/tmp' failed
    make: *** [_module_/usr/src/tmp] Error 2
    Loading TCP BBR POWERED...
    modprobe: FATAL: Module tcp_bbr_powered not found in directory /lib/modules/4.13.2-041302-generic
    Error, Loading BBR POWERED.

  49. 乌拉龟说道:

    默认的bbr开启下载的内核直接定死在4.11.9就行了,现在更新的版本太高,跟楼上一样编译不过了。
    又要重新安装内核

    1. Vicer说道:

      谢谢反馈

  50. 乌拉龟说道:

    更新到4.11.9测试了下,发现稳稳在2M样子,速度上不去。。。我用默认的bbr,看8K 200M能跑满,虽然并不是很稳定

  51. robing1234说道:

    :razz: 多谢楼主,真是大神级别

  52. wchqybs说道:

    请问魔改BBR对IPV6不起作用吗

    1. Vicer说道:

      内核级别的,可以

  53. wchqybs说道:

    tcp_bbr_powered 和 tcp_bbr两个进程同时存在正常么

  54. 小白兔说道:

    不行,内核是4.13的用的你脚本指定降级,重启后还是4.13,还是安装不了,头不匹配. 怎么办?

  55. 小白兔说道:

    安装在linux-headers-4.12.14-041214-generic_4.12.14-041214.201709200843_amd64
    成功, 但是我安装的openvpn 使用udp连接没效果,然后改为tcp tun,ipv4却连接失败,ipv6可以连接成功. tap 模式都失败. 这是什么原因? 怎么配合openvpn最有效?

  56. lee说道:

    我两个安装都是带着 -f v4.11.9
    然而还是 Error! Header not be matched by Linux Kernel.

  57. Lipi说道:

    最新的内核已经去到4.14.x了,脚本貌似最高仅支持到4.12.9。cp_bbr_powered.c.deb大佬什么时候更新下?

    1. Vicer说道:

      有空就更新,最近在忙别的.

  58. qtwrk说道:

    有没有办法在centos7最新的4.14.x内核上安装呢?

  59. tghoul说道:

    用了博主的脚本为什么,安装其他东西总是报下面的错误
    Reading package lists... Done
    Building dependency tree
    Reading state information... Done
    You might want to run 'apt --fix-broken install' to correct these.
    The following packages have unmet dependencies:
    linux-headers-4.9.0-040900-generic : Depends: libssl1.0.0 (>= 1.0.0) but it is not installable
    E: Unmet dependencies. Try 'apt --fix-broken install' with no packages (or specify a solution).
    root@debian:~/oneinstack# aptitude dist-upgrade
    -bash: aptitude: command not found

    1. Vicer说道:

      apt --fix-broken install
      尝试这个

  60. vr说道:

    lsmod | grep bbr查出以下2个进程同时存在正常么???
    tcp_bbr_powered 和 tcp_bbr

    1. Vicer说道:

      重启一下试试?

  61. rock说道:

    root@v-1:~# wget --no-check-certificate -qO 'BBR_POWERED.sh' 'https://moeclub.org/attachment/LinuxShell/BBR_POWERED.sh' && chmod a+x BBR_POWERED.sh && bash BBR_POWERED.sh
    Install gcc...
    Error! Install gcc.
    Please 'apt-get update' and try again!
    root@v-1:~#

    怎么搞??

  62. ubuntu说道:

    安装增强版后,以后还可以切回原版吗。

  63. 昨天说道:

    安装了增强版后还能切换到原版吗

  64. kimsufi说道:

    求大佬升级一下,希望支持4.14.12内核,现在好像为了补intel漏洞,ks新装系统默认为4.14的内核,而且不知道为什么用楼主脚本,内核不能降级了,之前安装一直没有问题。
    十分感谢。

  65. XBB说道:

    我修改了一下4.14的BBR 只是依葫芦画瓢 博主可以看看

    sudo apt-get install software-properties-common
    sudo add-apt-repository ppa:ubuntu-toolchain-r/test
    sudo apt-get update
    sudo apt-get install g++-4.9
    sudo apt-get install libelf-dev
    ln -sf which gcc-4.9 /usr/bin/gcc ---only if you upgraded gcc manually------
    wget -qO 'BBR_POWERED.sh' 'https://xbb.hk/bbr/BBR_POWERED.sh' && chmod a+x BBR_POWERED.sh && bash BBR_POWERED.sh -f v4.14.12

  66. bbr说道:

    请问使用这个相比于原版的bbr会增加流量的消耗吗?

  67. 影乐说道:

    支持debian9么。。。

  68. re_keto_uma说道:

    希望博主能更新4.14内核的版本,4.14已经标记为LTS了 而且最近meltdown事件之后会有不少人换到4.14

  69. lxyz说道:

    大佬你好,我在debian9上使用你的脚本遇到一个问题,安装完成后,我运行apt安装软件会提示我
    You might want to run 'apt --fix-broken install' to correct these.
    The following packages have unmet dependencies:
    linux-headers-4.12.9-041209-generic : Depends: libssl1.0.0 (>= 1.0.0) but it is not installable
    E: Unmet dependencies. Try 'apt --fix-broken install' with no packages (or specify a solution).
    我运行后,会卸载linux-headers-4.12.9-041209-generic (4.12.9-041209.201708242344)
    请问这样有影响吗?

    1. Vicer说道:

      那是编译时候用的.

  70. Janver说道:

    大佬,问下,这脚本可以顺便提供卸载删除的方法吗?

  71. 果冻说道:

    你好Vicer 大大,看评论是说要先执行原版BBR脚本然后再执行魔改BBR脚本对吧?然后我输入 lsmod | grep bbr后提示两个模块这样到底是使用魔改的还是原版的呢?谢谢

    root@kimsufi:~# uname -a
    Linux kimsufi 4.12.9-041209-generic #201708242344 SMP Fri Aug 25 03:47:24 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
    root@kimsufi:~# sysctl net.ipv4.tcp_available_congestion_control
    net.ipv4.tcp_available_congestion_control = bbr_powered bbr cubic reno
    root@kimsufi:~# sysctl net.ipv4.tcp_congestion_control
    net.ipv4.tcp_congestion_control = bbr_powered
    root@kimsufi:~# sysctl net.core.default_qdisc
    net.core.default_qdisc = fq
    root@kimsufi:~# lsmod | grep bbr
    tcp_bbr_powered 20480 0
    tcp_bbr 20480 8
    root@kimsufi:~#

发表评论

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