拥塞控制是一个耦合系统

拥塞控制系统一定要是一个紧耦合系统才不至于出现先污染后治理之境况,换句话说,算法要有能力持续感知其它参与者的行为。比方说,flow 1 增加了发送速率,其它 flow 要能感知到,即要使其它 flow 状态的发生改变。

bbr 是一个典型的耦合系统,以 2 流共存的双耦合举例,其带宽之比即 buffer 占有量之比,理论上只要一条流 probe,它总能挤出更多带宽,但实际上两次 probe 时的状态已不同了:

d x d t = C ⋅ g ⋅ x ⋅ R g ⋅ x ⋅ R + y ⋅ R − x \dfrac{dx}{dt}=C\cdot \dfrac{g\cdot x\cdot R}{g\cdot x\cdot R+y\cdot R}-x dtdx=CgxR+yRgxRx

若存在一个非耦合系统,它的样子应该是:

d x d t = C ⋅ g ⋅ x ⋅ R g ⋅ x ⋅ R + B ⋅ R − x \dfrac{dx}{dt}=C\cdot \dfrac{g\cdot x\cdot R}{g\cdot x\cdot R+B\cdot R}-x dtdx=CgxR+BRgxRx【B 为常量】

上述非耦合系统中,1.25 * x * R + B * R = C 前提下,只要 x < (C - B*R)/(1.25 * R),x 就是单调递增的,但在耦合系统中,变量 y 是替代常量 B 参与演化,系统动力学将完全不同,下图是一个示例,左边有颜色和提示,我姑且设瓶颈带宽为 10,gain 为 1.25:
在这里插入图片描述

这很容易解释明明 flow 1 上一次 probe 到带宽 8,下次再 probe 只能到带宽 5。因为 flow 1 第二次 probe 时它在 buffer 中的占比已经变了,可能由 1 / 2 变为 1 / 4,期间其它 flow 占了更多 buffer,所以 flow 1 不再保有带宽 8,而只能在带宽 4 基础上 probe 1.25x,得 5。

vegas 也是耦合系统,新 flow 加入将导致 buffer 堆积 rtt 增加,当前 flow 的 actual 减少,从而 diff = expected - actual 增加,最终超过 β 而 cwnd --,反之若 flow 退出,则 buffer 释放 rtt 减少,当前 flow 的 actual 增加而 diff 减少,最终低于 α 而 cwnd ++ 。

而 aimd 则是一个松耦合系统,若 buffer 很深,一条 flow 要很久才溢出 buffer 而丢包,与此同时其它流被连累同步丢包,若不实施 red 及公平队列等 aqm,效率和公平很难保障,aimd 并非一个有持续感知能力的系统,因此才会是缓慢 ai 后剧烈 md 这种不连续行为,很难用类似 bbr,vegas 那样的耦合系统微分方程组建模。

拥塞控制的难点在于,每个算法都是个独立耦合系统,不同耦合系统之间很难确定是随行还是负反馈。典型地,对于 vegas,如果 rtt 增加,它很难确定是有其它新 flow 加入还是存量 flow 在增加 inflight,若前者,当前 flow 应 cwnd --,若后者,当前 flow 应增加 minrtt 基准以随行,判断结论不同,行为则相反。

用以下方程来描述上一段文字:

x i ( t + 1 ) = f i ( x 1 ( t ) , x 2 ( t ) , . . . , x n ( t ) ) x_i(t+1) = f_i(x_1(t), x_2(t), ..., x_n(t)) xi(t+1)=fi(x1(t),x2(t),...,xn(t))

x i ( t + 1 ) x_i(t+1) xi(t+1) 代表节点 i 在下一时刻的拥塞状态,它受到其他节点当前时刻拥塞状态 x 1 ( t ) , x 2 ( t ) , . . . , x n ( t ) x_1(t), x_2(t), ..., x_n(t) x1(t),x2(t),...,xn(t) 影响。函数 f i f_i fi 描述了节点 i 的拥塞控制策略,它可能是个复杂的非线性函数,表示节点在下一时刻的拥塞状态如何受其他节点当前拥塞状态影响。

这方程说明拥塞控制系统中不同节点间的关联,每个节点的拥塞状态都受到其他节点影响,表现出了系统耦合性。通过这样的模型,可以更好地理解拥塞控制系统是一个耦合系统。

难点在于,节点 i 不知道 f i f_i fi 的形式, x 1 ( t ) , x 2 ( t ) , . . . , x n ( t ) x_1(t), x_2(t), ..., x_n(t) x1(t),x2(t),...,xn(t) 对节点 i 完全不可见。现实是,节点 i 知道至少存在节点和它自己运行同样算法,即,虽然节点 i 不知道 x 1 ( t ) , x 2 ( t ) , . . . , x n ( t ) x_1(t), x_2(t), ..., x_n(t) x1(t),x2(t),...,xn(t),甚至不知道 n,但它晓得存在一个全网 n 个节点集合的子集 S k S_k Sk S k S_k Sk 中的节点和自己运行相同算法,于是节点 i 就能用我前面的 bbr,vegas 耦合系统微分方程组建模并仿真,这给了拥塞控制算法研究的可行性和大致方向。

然而不能指望这种方法的效率,除非全网统一部署同一种算法。若非如此,子集 S k S_k Sk 始终受到未知的其它子集 S j , S r , S m , . . . S_j,S_r,S_m,... SjSrSm...影响,而它没有能力做任何预判。that’s why 铺天盖地的论文论证自己的算法多么有效,却论证不了线上实际部署效果而只能永远待在实验室,因为这些论文无法预判子集 S k S_k Sk 外的影响。

还是一个部署规模的问题,我们容易对部署规模而不是算法本身建模,寻找一个纳什均衡点,论证如果某算法规模占比多少时将是最优的,而不是像大多数论文那样,论证自己是多么牛逼,吞吐如何高效。(bbr 和 cubic 的共存vegas 真不能和 cubic 共存吗)

当然,这并没有陷入不可知论,节点间的互不可知本身就是拥塞控制系统的一个属性,我的意思是,要多考虑不同算法在不同规模之间的互动影响,而不是算法本身的动力学,这显然对一个算法的实际部署前的论证有益,这也是一个优秀甚至合格的拥塞控制算法所必须的。

当然,对于 dcn 这种可控环境,上述研究拥塞控制的方法就有意义的多,类似地,虽然经理上班路上无法控制道路拥堵情况,可能有太多另一个经理,但经理却可以控制工人们上厕所的秩序和顺序。

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

  • 25
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值