• AgentNull

    Ubuntu 26.04 的 7.0 内核自带的 bbr 还是 v1。手上正好有一个打了 Google BBRv3 补丁的 7.0 内核,就把 CUBIC、BBRv1、BBRv3 放在一样的条件下跑了一遍,主要想看看丢包和缓冲小的时候差多少。

    结论先放前面,v3 的吞吐跟 v1 差不多,有一组低了 8% 左右,但重传少了很多。CUBIC 在有随机丢包的线路上基本跑不动。

    怎么测的

    在一台 KVM 虚拟机里,用网络命名空间搭了发送端、路由器、接收端三段,瓶颈放在中间的路由器上。数据方向用 netem 限速,需要丢包就再加上随机丢包,回程的 ACK 加上往返延迟。

    缓冲大小按带宽乘往返延迟来算,1 BDP 就是刚好能装下一个往返的数据量,0.2 BDP 只有它的五分之一,算是缓冲很小的线路。

    每次只跑一条连接,一组 20 秒,最后一组跑了 60 秒。吞吐按实际送达的数据算,后半段吞吐是去掉刚开始加速那段之后的速度,重传率是重发的数据占总发送量的比例。

    路由器上的设置大概是这样,这是 100M、往返 40ms、缓冲正常的那组:```

    发往接收端的方向:限速 100M,缓冲 331 个包(这组没加丢包)

    tc qdisc replace dev r-rcv root netem rate 100mbit limit 331

    回程方向:加上 40ms 往返延迟

    tc qdisc replace dev r-snd root netem delay 40ms limit 100000

    ```CUBIC 在两个内核上都跑了,结果几乎一样,下面只放自带内核那组。

    100M,往返 40ms,不丢包,缓冲正常

    算法 |
    吞吐 (Mbps) |
    后半段吞吐 (Mbps) |
    重传率 |
    平均 RTT (ms) |

    CUBIC |
    94.7 |
    95.6 |
    0.02% |
    73.0 |

    BBRv1 |
    93.4 |
    93.4 |
    0.45% |
    41.3 |

    BBRv3 |
    92.1 |
    92.6 |
    0.02% |
    40.6 |

    三个都能跑满,区别在延迟上。CUBIC 会把缓冲塞满,RTT 从 40 涨到了 73,两个 BBR 基本贴着 40 走。

    100M,往返 40ms,不丢包,缓冲只有五分之一

    算法 |
    吞吐 (Mbps) |
    后半段吞吐 (Mbps) |
    重传率 |
    平均 RTT (ms) |

    CUBIC |
    91.8 |
    92.1 |
    0.16% |
    40.8 |

    BBRv1 |
    92.0 |
    91.9 |
    2.19% |
    40.7 |

    BBRv3 |
    92.3 |
    93.3 |
    0.42% |
    47.6 |

    吞吐都差不多。v1 的重传到了 2.19%,缓冲一小它就容易自己把缓冲打爆,这是老问题了。v3 降到了 0.42%。

    100M,往返 100ms,随机丢包 1%

    算法 |
    吞吐 (Mbps) |
    后半段吞吐 (Mbps) |
    重传率 |
    平均 RTT (ms) |

    CUBIC |
    1.4 |
    1.4 |
    1.01% |
    103.7 |

    BBRv1 |
    78.4 |
    87.2 |
    3.38% |
    101.2 |

    BBRv3 |
    72.2 |
    75.2 |
    1.03% |
    103.7 |

    CUBIC 只有 1.4,基本没法用。v3 比 v1 慢一些,全程低 8% 左右,后半段差得更多。不过 v1 的重传有 3.38%,比线路本身 1% 的丢包高出一大截,多出来的部分是它自己挤爆缓冲造成的。v3 的 1.03% 基本就是线路本身的丢包。

    50M,往返 150ms,随机丢包 0.1%,跑 60 秒

    算法 |
    吞吐 (Mbps) |
    后半段吞吐 (Mbps) |
    重传率 |
    平均 RTT (ms) |

    CUBIC |
    5.7 |
    3.1 |
    0.12% |
    151.2 |

    BBRv1 |
    44.5 |
    45.4 |
    1.78% |
    151.1 |

    BBRv3 |
    44.1 |
    44.9 |
    0.14% |
    171.2 |

    延迟一高,就算只有千分之一的丢包,CUBIC 也只剩 5.7 了。两个 BBR 都接近 50M 的上限,v3 的重传只有 v1 的十分之一左右,代价是平均 RTT 多了 20ms 左右,会在缓冲里多排一点队。

    说几句

    线路干净、缓冲够大的时候,三个其实差不多,BBR 的好处主要是延迟低。一旦线路有丢包,BBR 比 CUBIC 强太多,这跟用 v1 还是 v3 关系不大。v1 和 v3 真正的差别在重传上,v3 更克制,不会自己把缓冲打爆,跟别人共用一条线路时更友好。如果线路丢包比较高,又只在乎单条连接能跑多快,v1 可能还会快一点。

    这次只测了单连接,没测多条连接抢带宽的情况,每组也只跑了一次,没看波动。毕竟是在虚拟机里用 netem 模拟的,只能看出相对的差别,不代表真实线路上能跑到这个速度。想自己试的可以照着上面的 tc 命令改改参数。

    主楼
  • TraderYao

    净折腾些没用的

    线路好的机器就算30M其体验丝滑流畅度也好于非优化的1000M

    另外一分钱一分货

    知道这两点就可以了

    #1
  • AgentNull

    ^-^

    #2
  • wilsonkor

    我只有两类机器,线路机和非线路机。

    线路机默认即可,非线路机直接hysteria

    #3
  • seamee

    重传越低越好,我现在已经不追求极限速度了

    #4
  • ciallo0721

    v3好就好在重传低,之前美西三网4837线路用v3把重传压低了用起来都很稳,重传高了就感觉偶尔卡卡的

    #5
  • godwen

    这本来就是BBRv3的特性,看来还是有一定效果哇,但是最重要的还是线路本身。

    好的用不上,差的可能体感也不明显。

    #6

发表回复

登录后回复