DCQCN 公式推导
我一直觉得 DCQCN 里的流体模型是鸡肋(包括 PowerTCP 里的 Lyapunov 稳定性),就纯为了凑论文字数糊上去的,说是做了分析但也就是让人看着觉得确实分析了罢了(虽然我自己的文章也是这样),除了给 Reviewer 心理安慰让他给过之外也没啥作用。最近老师让看 DCQCN 的公式推导,所以系统记录一下这个过程。
DCQCN 的流体模型来源于 SIGMETRICS ’11 的 Stability Analysis of QCN: The Averaging Principle 这篇文章,在这届会议中同样还有分析 DCTCP 的稳定性的文章(Analysis of DCTCP: stability, convergence, and fairness,出自同一人之手)。总之可以互相参考着看。
DCQCN 文章中有一些更详细的公式推导在 CoNEXT ’16 的 ECN or Delay: Lessons Learnt from Analysis of DCQCN and TIMELY,其中还有关于 TIMELY 的稳定性分析,但本文并不关心 TIMELY。
符号表
| 符号 | 意义 |
|---|---|
| 当前发送速率 | |
| 目标速率,即恰好在最后一个反馈消息到来前的发送速率 | |
| 减速因子,初值为 |
|
| 队列长度 | |
| 时间 | |
| ECN 标记所用参数 | |
| 论文里没有描述,但其是一个移动平均因子 | |
| 瓶颈处的流条数 | |
| 瓶颈链路的带宽 | |
| 快速恢复的阶段数 | |
| 速率增长中所用的字节计数器 | |
| 速率增长中所用的计时器 | |
| 速率增长的幅度(固定为 40Mbps) | |
| 控制回路的延迟 | |
| CNP 的生成周期 |
前提假设
分析时,假设有
但最重要的假设是 DCQCN 一定在 PFC 前起作用。
长距场景下上面的假设非常鸡肋,不满足 PFC 后于 DCQCN 触发的情况很多。
流体模型
公式 5
这个公式描述的是拥塞时给包打 ECN 标记的概率随出队列长度变化的变化情况。图象是非常经典的三段,如果你做网络的话应该是刻 DNA 里了所以就不贴图了。
这个公式本身也没什么好说的,意思就是我们认为
公式 6
假设所有流的速率都相等,这个公式描述了队列长度
后面说他可以放宽所有流的速率都相等的假设,但是说实话我没看懂他是怎么放宽的。
公式 7
这是一个十分困难的公式,但是这个类型和 8 与 9 类似。
这个公式考虑
这里的「向
更新」和「向 更新」是我自己造的,区分的是更新后 会往哪儿移动。「向 更新」是一种 EWMA,标准的 EWMA 是 ,这里 就是 , 就是 , 是 ,因此在移动混合过程中会逐渐消解 而过渡到 。「向 更新」很 trivial,假设更新 次,值变成 ,而 ,因此 ,基础微积分。
但是,是否收到 CNP 是取决于是否有 ECN 标记的包,而 ECN
标记是依概率的,因此
从道理来说,
是一个一维随机游走,不应该这么定义变化率。
考虑到设计时,CNP 的生成周期
这里文章的符号是乱的,我自己采用了新的符号。
(后文还会出现)在文章里是 , 上下文符号不一致,第一次出现的符号是 。
为了计算
强行解释就是我们希望计算在
时间内 的平均变化率,而 是一个极小量,然后变化量期望代表着平均变化量,一除就是平均变化率了,反正不是的话也推不出后面的东西。严格来说这么写都是错的, 不可导,应该写成类似 Ito 积分的形式,虽然选了应用随机过程但已经过了四年(但好像讲的时候 Ito 积分也就提了一嘴,没细讲),现在啥也不会了。
设在
则
比照给出的公式,发现
为了使这个窗口无 CNP,就不能被 ECN 打标记,因此在这一窗口内所有数据都不被 ECN 标记的概率是
由此得证。
但为什么是这样是很无厘头的。首先不是所有的发送数据都形成队列,假设这些数据都形成队列了,虽然 ECN 是根据队列长度变化的,但是按理说这个概率应该和包个数有关,而不是字节数。然后是打 ECN 标记的时间并非控制回路延迟
,综合起来这公式混合了不同时刻发生的事情,虽然差距很小但还是有差距,但是数据中心内这点差距也不算啥,数学是天体物理老师教的,就只能感性理解,不要用它来计算。长距链路上带入这个 显然就是错的了。
公式 9
由于
由于降速还是升速取决于是否有 CNP,还是一个随机过程,因此仍然仿照公式 7 推导,写出
但是这里降速周期和升速周期并不一样,降速周期是
这里用到
,我们把除法也放进去就好了。
降速过程
当收到 CNP 时会降速,而 CNP 每
升速过程
升速过程受字节计数器和计时器限制。先看一次升速产生的变化量,虽然
DCQCN 中有 FastRecovery,AdditiveIncrease 和 HyperIncrease
三种状态,但是更新
再看多长时间才能进行一次升速,首先看字节计数器影响的升速。网卡要发送
那么进行一次字节计数器导致的升速所需的期望时间为
同理,对于计时器,网卡要发送
然后
就是原式了。
综合如上两部分原式得证。
公式 8
公式 8 的大致思路和公式 9 是一样的,只是换了一下参数而已。
在降速阶段,由于进行了
在升速阶段,虽然 DCQCN 中 AdditiveIncrease 和 HyperIncrease
两种升速所用的
与
综合起来原式得证。
稳定性
DCQCN 论文中并没有直接证明稳定性,而是依赖 QCN 的稳定性证明。QCN 也没有直接证明稳定性,而是通过如下路径来证明:
- QCN 利用了 Average Principle(似乎没有对应的汉语翻译);
- AP 在线性控制系统中和 PD(比例微分)控制器代数意义上等价,即给 AP 和 PD 等价的输入,它们的输出是等价的;
- PD 具有稳定性,那么 AP 也具有稳定性;
- 所以 QCN 是稳定的。
至于证明已经完全不想看了。
用处
那么到最后 DCQCN 用这个流体模型干什么了呢?
不动点
这部分内容在 CoNEXT ’16 文章中的 3.2 节。
首先置公式 6 左式为
因为不动点处一定有队列长度不变,说明速率收敛了
在任一不动点处,设
假设流收敛在队列长度为
有一个没什么意义的推导。如果发送端每隔
时间就收到一个 CNP, 也是收敛的。设 ,在等待下一个 CNP 的时间 内, 衰减 次。因此在下一个 CNP 刚好到达前, 衰减到: 因为当前 处于稳态,所以有 ,令稳态 ,则有 解得 考虑 更新的递推式 为了方便计算,我们令一个衰减常数 。将上式展开并整理,得到一个标准的一阶线性递推数列:
已知该数列的最终收敛稳态为 ,我们可以利用稳态值将递推式改写为:
不断向下递推,可以得到第 次迭代后的 与初始值 的关系:
如果进入稳态,则对任意给定 ,存在正整数 使得对于 都有 成立。 将上面的通项公式代入:
两边同时取自然对数(注意 ,所以 是负数,除以负数时不等号要变号):
化简得 但由于不可能一直收到 CNP,这意味着拥塞一直不缓解,并且有时进入收敛态的 可能很大,所以计算这个确实没什么意义。
接下来我们需要证明
为了简单需要确定五个代换变量
此处,由于我们已经是考虑稳态中情况了,
实际上为一常数,可以根据上式求解 。
下面我们要考虑不动点是否只有一个,也就是求解上式是否可以唯一确定
考虑左式拆为
首先,
第二部分和第三部分形式类似。对于第二部分,考虑
对
那么
设
和 均为单调增函数,且 和 均不为 ,现在考虑它们的并联函数 求导 由于 和 均单调增,那么 和 均大于 ,因此 成立,即 单调增。
对于第三部分,类似考虑
考虑函数
求导得到 分析当 时的各项符号:
- 由于
的取值范围是 ,当 时,所有的 都是负数。 - 在
的求和公式中,每一项 都是从 个负数因子中抽掉了一个,因此每一项恰好是 个负数的乘积。 因此,当
为偶数时, 恒成立,函数在负半轴上单调递增。当 为奇数时, 恒成立,函数在负半轴上单调递减。
类似第二项分析并联函数,第三项同样单调递增。至此,可以证明原式单调递增。
回顾原式
在收敛性一节中证明了每条流的不动点是
实际上只展开了到
忽略的是 。原论文大小 还打错了。
考虑
由于
非常接近 0,因此同样忽略了 和 中的 部分( 指某个常数)。
代入原式
收敛性
收敛性的详细证明在 CoNEXT 论文的 3.3 节,是分析多次一次降速后的多次升速过程,通过证明任意两条流之间的速率差随时间指数级别减小来说明多条流可以收敛,最后推导出收敛至公平。但是需要特别注意的是,分析过程中仅存在计时器引导的升速,而不存在字节计数器引导的升速。
需要注意的是,字节计数器引导的升速是乘性增。根据前面的公式是可以算出
考虑不触发 CNP 且仅有字节计数器影响时,每发送
也就是说这个乘性增只在增速到一定程度后才起作用,此时可能网络空闲带宽很多,需要快速探测带宽,这样的设计倒也是有其合理性。
问题
我一直觉得流体模型不适用网络分析,分析一般流体(比如水流)的时候是可以微分的,但是分析网络数据的时候,分析对象没办法对时间微分,因为数据都是以包为单位传输的,这样在求极限的时候显然就爆炸了,比如在
那网络分析应该怎么分析,包传输过程是量子化的,但量子理论里似乎也没啥可借鉴的东西。所以与其微积分不如简单一点,用平均变化率表达,这样符号也对物理意义也有,但是能分析出啥就不知道了。