• 提高 bbr 的灵敏性


    bbr draft 给出了 MaxBwFilterLen 的定义:

    MaxBwFilterLen: The filter window length for BBR.MaxBwFilter = 2 (representing up to 2 ProbeBW cycles, the current cycle and the previous full cycle).

    从 v1 到 v3 版本,该值均只跟状态机而不跟实际,这导致 bbr 对带宽变化反应迟钝。

    bbr 可轻松越过短 burst 造成的抖动,但坚持而非适应的方式往往弊大于利。“坚持” 可能造成带宽过估,引发丢包或对共存流量的不公平侵占。为此,我来做个微创小手术:

    • 对适当大小 win 内的所有 (t, bw) 样本进行线性回归(比如简单的最小二乘法),设 x 为拟合斜率(的移动平均),y 为 x 的方差(的移动平均),算法对 x,y 的反应如下:
    x: 表示变化趋势,越平越倾向平均值,越陡越倾向瞬时值
    y: 表示变化趋势的持续性和程度
    i_bw: 即时带宽
    s_bw: 移动平均带宽
    
    f(x, y):
        x 越大,y 越小,MaxBwFilterLen 越大;
        x 越小,y 越小,MaxBwFilterLen 越小;
        ...
    
    g(x, y):
        可适当组合 s_bw 与 i_bw 的分量
    
    if x == 0:
        MaxBwFilterLen = 10
        bw = (1 - 1/y) * s_bw + (1/y) * i_bw
    else:
        MaxBwFilterLen = f(x, y) 
        bw = g(x, y)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    做了一个测试 case,修改 bbrv1,win = 20,1 <= MaxBwFilterLen <=10,采用最简单最小二乘法拟合样本,代码由 chatgpt 给出,kernel 无浮点运算造成一些误差,图示如下:
    在这里插入图片描述
    在细微处所有大开合场面都躲过去了,却还无碍于越过第一个波动,大轮子过坑稳,小轮子坡道强,就是这意思。

    这个微创的意义在于提高感知和适应带宽变化的能力,提高灵敏度的同时又能平滑波动。

    简评一下。

    所谓启发式,信息非常有限时,你能控制到什么程度,无非就是榨干这些信息,原值,导数,二阶导数,二阶导数的导数,说到底就是揭露隐藏的趋势,差不多就行了。

    能在开始抗噪,但噪声持续就不是噪声了,持续时间和反应窗口负相关就能快速反应,线性回归虽显粗糙,但就是这意思,越高阶,越精确,越麻烦,而原值本就有噪声,上限再怎么也无法突破,视必要而选择,这就是自适应。

    越多就越少,越少就越多,玩的就是负反馈。

    皮鞋没有蹬上,露着白袜子。

    浙江温州皮鞋湿,下雨进水不会胖。

  • 相关阅读:
    【OBS】Dropped Frames And General Connection Issues
    从标准输入流中读取并执行shell指定函数
    JPA 中 LazyInitializationException 解决方案
    php生成器
    打工人都觉得香的 Java 程序员 306 道面试秘笈
    基于粒子群优化算法、鲸鱼算法、改进的淘沙骆驼模型算法(PSO/SSA/tGSSA)的微电网优化调度(Matlab代码实现)
    实战0-1,Java开发者也能看懂的大模型应用开发实践!!!
    反射与枚举
    数字化时代,中小企业如何落地数字化转型
    Hexagon_V65_Programmers_Reference_Manual(17)
  • 原文地址:https://blog.csdn.net/dog250/article/details/134276015