KCC 中的三元分解

—— 卡尔曼滤波如何分离传播、排队与噪声


摘要

KCC 拥塞控制算法的核心是一个一维标量卡尔曼滤波器,其设计目标是从被污染的 RTT 观测中提取真实的物理传播延迟TpropT_{\text{prop}}Tprop。与 BBR‑S 和 RBBR 等方案估计瓶颈容量不同,KCC 直接锁定三元分解RTT=Tprop+Tqueue+Tnoise\text{RTT} = T_{\text{prop}} + T_{\text{queue}} + T_{\text{noise}}RTT=Tprop+Tqueue+Tnoise中的物理锚点。滤波器通过方向性更新、自适应噪声协方差和 Q‑boost 等机制,将TqueueT_{\text{queue}}TqueueTnoiseT_{\text{noise}}Tnoise结构性地隔离在状态更新之外,实现了“只对物理规律负责,不对噪声和排队买单”的设计思想。本文从三元分解的视角,详述这一滤波器的数学模型与工程实现。


1. 问题定义

真实网络的端到端 RTT 由三个性质迥异的分量构成:

RTTobs=Tprop+Tqueue+Tnoise\text{RTT}_{\text{obs}} = T_{\text{prop}} + T_{\text{queue}} + T_{\text{noise}}RTTobs=Tprop+Tqueue+Tnoise

-TpropT_{\text{prop}}Tprop:物理传播延迟,近乎恒定,是唯一可信的物理基线。
-TqueueT_{\text{queue}}Tqueue:排队延迟,随拥塞程度连续变化,是唯一携带拥塞信息的信号。
-TnoiseT_{\text{noise}}Tnoise:噪声延迟,与队列状态无关,瞬时、非平稳,不代表物理瓶颈能力下降。

拥塞控制的核心难题,是从观测 RTT 中分离出TqueueT_{\text{queue}}Tqueue,并对TnoiseT_{\text{noise}}Tnoise保持结构性麻木。解决这一问题的前提,是准确估计TpropT_{\text{prop}}Tprop

BBR‑S 和 RBBR 选择绕开直接分解,而是估计瓶颈容量,通过速率匹配间接消除排队。KCC 则选择了更直接的路径:用卡尔曼滤波器显式估计TpropT_{\text{prop}}Tprop,然后从观测 RTT 中减去它,得到TqueueT_{\text{queue}}Tqueue的近似,而TnoiseT_{\text{noise}}Tnoise则被滤波器内部吸收和抑制。


2. 状态空间模型

KCC 将传播延迟建模为一个随机游走过程。

状态方程

xk=xk−1+wk,wk∼N(0,Q)x_k = x_{k-1} + w_k, \quad w_k \sim \mathcal{N}(0, Q)xk=xk1+wk,wkN(0,Q)

xkx_kxk是第kkk时刻的真实传播延迟。过程噪声wkw_kwk允许TpropT_{\text{prop}}Tprop发生缓慢的漂移,以应对路径切换等真实物理变化。

观测方程

zk=xk+vk,vk∼N(0,R)z_k = x_k + v_k, \quad v_k \sim \mathcal{N}(0, R)zk=xk+vk,vkN(0,R)

zkz_kzk是观测到的 RTT,经固定点缩放后进入滤波器。观测噪声vkv_kvk的方差RRR吸收了两部分:真实的排队延迟TqueueT_{\text{queue}}Tqueue和任意来源的噪声TnoiseT_{\text{noise}}Tnoise

这一模型看似简单,将TqueueT_{\text{queue}}TqueueTnoiseT_{\text{noise}}Tnoise一并归入观测噪声。但 KCC 通过下面描述的方向性更新机制,在更新策略上实现了三者的分离:TpropT_{\text{prop}}Tprop是唯一会被更新到状态中的分量。


3. 标量卡尔曼滤波递推

滤波器的核心是标准的预测-更新递推。

预测步

x^k∣k−1=x^k−1\hat{x}_{k|k-1} = \hat{x}_{k-1}x^kk1=x^k1

Pk∣k−1=Pk−1+QP_{k|k-1} = P_{k-1} + QPkk1=Pk1+Q

更新步

innovation=zk−x^k∣k−1\text{innovation} = z_k - \hat{x}_{k|k-1}innovation=zkx^kk1

Kk=Pk∣k−1Pk∣k−1+RK_k = \frac{P_{k|k-1}}{P_{k|k-1} + R}Kk=Pkk1+RPkk1

x^k=x^k∣k−1+Kk⋅innovation\hat{x}_k = \hat{x}_{k|k-1} + K_k \cdot \text{innovation}x^k=x^kk1+Kkinnovation

Pk=(1−Kk)⋅Pk∣k−1P_k = (1 - K_k) \cdot P_{k|k-1}Pk=(1Kk)Pkk1

卡尔曼增益KkK_kKk由预测误差协方差Pk∣k−1P_{k|k-1}Pkk1和观测噪声RRR的比值决定。当RRR较大(链路抖动剧烈)时,KkK_kKk自动减小,滤波器更信任模型预测,观测中的波动被有效抑制。

如果完全遵照此更新公式,排队造成的 RTT 上升也会部分被吸收进状态估计,导致TpropT_{\text{prop}}Tprop被高估。这正是 KCC 引入方向性更新的动机。


4. 三元分离的工程实现

4.1 方向性更新:隔离TqueueT_{\text{queue}}Tqueue

KCC 对标准卡尔曼滤波做了关键修改:

  • innovation<0\text{innovation} < 0innovation<0(RTT 低于当前估计),正常更新状态。RTT 下降意味着当前估计可能偏高,真实传播延迟可能更小,滤波器应当跟随下修。
  • innovation>0\text{innovation} > 0innovation>0(RTT 高于当前估计),则跳过状态更新,仅更新误差协方差PPP

这个非对称处理直接对应三元分解的逻辑:

  • RTT 的下降通常来源于排队队列被清空,是TqueueT_{\text{queue}}Tqueue的减少,对TpropT_{\text{prop}}Tprop估计向下修正有益。
  • RTT 的上升绝大多数由TqueueT_{\text{queue}}Tqueue的累积或TnoiseT_{\text{noise}}Tnoise的瞬时尖峰引起,物理传播延迟不会突然增加。因此,正新息不能用于抬升TpropT_{\text{prop}}Tprop

方向性更新在滤波器内部构建了一道屏障:TqueueT_{\text{queue}}TqueueTnoiseT_{\text{noise}}Tnoise被挡在状态更新之外,TpropT_{\text{prop}}Tprop仅被下降样本驱动。这是 KCC 实现三元分离最核心的工程手段。

4.2 自适应协方差:动态抑制TnoiseT_{\text{noise}}Tnoise

固定的QQQRRR无法适应真实网络的多样性。KCC 根据运行时的 RTT 统计动态调整这两个参数。

过程噪声QQQ的自适应

Qadapt=Qbase⋅max⁡(factormin⁡, min_rtt_us1000)Q_{\text{adapt}} = Q_{\text{base}} \cdot \max\left(\text{factor}_{\min},\ \frac{\text{min\_rtt\_us}}{1000}\right)Qadapt=Qbasemax(factormin, 1000min_rtt_us)

以观测到的最小 RTT 为基准缩放,允许大延迟路径拥有更大的过程噪声,以适应传播延迟可能存在的更宽变化范围。

观测噪声RRR的自适应

Radapt=Rbase+min⁡((jitter−thresh)⋅Rbasescale, Rbase⋅max_boost)R_{\text{adapt}} = R_{\text{base}} + \min\left(\frac{(\text{jitter} - \text{thresh}) \cdot R_{\text{base}}}{\text{scale}},\ R_{\text{base}} \cdot \text{max\_boost}\right)Radapt=Rbase+min(scale(jitterthresh)Rbase, Rbasemax_boost)

其中jitter\text{jitter}jitter∣innovation∣|\text{innovation}|innovation的 EWMA 平滑值。当抖动增大时,RRR线性上升,迫使卡尔曼增益降低,滤波器对当前观测更加“麻木”,从而在噪声剧烈时保护TpropT_{\text{prop}}Tprop估计不被污染。

4.3 Q‑boost:快速响应TpropT_{\text{prop}}Tprop的真实变化

当路径发生真实的物理切换(如基站切换导致TpropT_{\text{prop}}Tprop突然增加),RTT 会出现一个持久的正偏移。方向性更新会一直拒绝这个正新息,导致估计永远无法跟上真实变化。

Q‑boost 机制负责处理这种情况:

  • ∣innovation∣|\text{innovation}|innovation超过动态阈值,且滤波器已收敛(PPP很小),临时将误差协方差PPP重置为较大的初始值。
  • 下一时刻卡尔曼增益骤增,状态更新被重新允许,滤波器以较大的步长快速逼近新的TpropT_{\text{prop}}Tprop

Q‑boost 为TpropT_{\text{prop}}Tprop的突变提供了快速适应通道,避免了方向性更新在真实变化时的滞后。

4.4 离群值拒绝

即使有方向性更新和自适应RRR,极端异常值仍可能造成瞬时扰动。KCC 检查新息的绝对值是否超过基于基线或jitter\text{jitter}jitter的动态阈值,若超过且滤波器置信度较高,则完全丢弃该测量,不执行任何更新。


5. 三元分解视角下的 KCC

将上述机制放回三元分解框架,可以得到一个清晰的对应关系:

分量 KCC 的处理方式
TpropT_{\text{prop}}Tprop 卡尔曼滤波器的状态变量xkx_kxk。仅被下降样本和 Q‑boost 更新,维持物理基线的准确估计。
TqueueT_{\text{queue}}Tqueue 被方向性更新隔离在状态更新之外。RTT 的上升部分被归因于排队,不污染TpropT_{\text{prop}}Tprop。实际排队延迟可近似为RTT−T^prop\text{RTT} - \hat{T}_{\text{prop}}RTTT^prop
TnoiseT_{\text{noise}}Tnoise 被自适应RRR、离群值拒绝和卡尔曼增益的自动调节所抑制。方向性更新也阻止了正噪声尖峰进入状态。

KCC 并没有显式输出TqueueT_{\text{queue}}Tqueue的独立估计,而是通过 “锁定物理下限” 的策略,让发送端以T^prop\hat{T}_{\text{prop}}T^prop为基线,配合其他机制(如主动过冲、甜品启动)来探测和利用剩余带宽。TnoiseT_{\text{noise}}Tnoise则根本不被信任,结构性地排除在决策之外。


6. 与 BBR‑S 和 RBBR 的对比

方法 估计目标 三元分离方式 TqueueT_{\text{queue}}Tqueue的处理 TnoiseT_{\text{noise}}Tnoise的处理
BBR‑S 瓶颈容量CCC 间接:通过速率匹配消除排队 未显式估计 高斯假设,自适应RRR
RBBR 瓶颈容量CCC 间接:通过速率匹配消除排队 未显式估计 高斯假设,自适应RRR
KCC 传播延迟TpropT_{\text{prop}}Tprop 直接:显式分离物理基线 方向性更新隔离,可通过减法近似获得 方向性隔离 + 自适应RRR+ 离群值拒绝

BBR‑S 和 RBBR 都回避了直接分解 RTT,而是转向容量估计。KCC 则直面三元分解,将TpropT_{\text{prop}}Tprop作为状态变量,通过滤波器的非对称设计实现了物理延迟与排队/噪声的分离。这使得 KCC 在理论框架的完整性上更进一步。


7. 结语

KCC 的卡尔曼滤波器,以极简的一维标量形式,承载了精确的三元分离逻辑。它用方向性更新区分TqueueT_{\text{queue}}Tqueue,用自适应协方差和离群值拒绝压制TnoiseT_{\text{noise}}Tnoise,用 Q‑boost 保证对TpropT_{\text{prop}}Tprop真实变化的响应。

在三元分解框架下,KCC 是第一个将状态空间模型直接应用于传播延迟估计的拥塞控制实现。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐