好用的快速网站建设平台,自己怎么创建网站,广州 竞价托管,网络营销案例具体分析都说 pacing 好 burst 孬(参见#xff1a;为啥 pacing)#xff0c;就像都知道金币好#xff0c;掺铁金币孬一样。可现实中掺铁的金币流通性却更好#xff0c;劣币驱良币。劣币流通性好在卖方希望收到别人的良币而储存#xff0c;而自己作为买方只使用劣币。
burst 和 pac…都说 pacing 好 burst 孬(参见为啥 pacing)就像都知道金币好掺铁金币孬一样。可现实中掺铁的金币流通性却更好劣币驱良币。劣币流通性好在卖方希望收到别人的良币而储存而自己作为买方只使用劣币。
burst 和 pacing 的关系也一样都希望别人采用 pacing 策略一旦有人 pacing自己却 burst 加塞。在高速公路上都希望别人 200 米车距自己去加塞。仔细比较这些对弈双方结论很有趣。
善者假设适用于自主系统具有同类约定或共识无罪则无罚这是不稳定系统因为一旦有投机者进入系统假设无罪无罚的善者只能被毒打而投机假设则适用于几乎所有自组织系统只有贪婪自私和罪与罚最后系统收敛到收益和代价之间这是稳定系统新来者进入这个系统最终都会收敛。
我们的世界到处都是活泼开放的投机系统善者系统反是非常态死气沉沉。在一个活泼开放的系统中到处都是投机试探收获遇险大概都是窦唯《高级动物》里的词多是贬义这是劣币之劣但却是世界的本真。
本文侧重分析 burst 和 pacing 间劣币驱良币的过程。
reno/cubic 的 aimd 行为会被 pacing 改变。aimd pacing 将形成一个闭环反馈pacing_rate cwnd / rtt等号两边相生。
pacing_rate 达到瓶颈带宽后将稳定下来。增加 cwnd 将带来 queuing delay 等比例增加而维持 pacing_rate 不变pacing_rate link_rate 趋于排空 buffer最终 inflight pacing_rate * rttreno/cubic 等 aimd 流跳出 cwnd limitedcwnd 不再增加。
因此reno/cubic pacing 流不再填充 buffer不再产生 buffer overflow 信号以驱动 aimd。
若有流量退出腾出共享带宽由于 pacing_rate 和 inflight 相生没有任何信号触发当前 aimd 流增加 inflight也就无法 probe 空闲带宽趋向死寂。
若有新流侵入却不至于丢包的 queuing 情形本地维护的 cwnd 不变pacing_rate cwnd / rtt 由于 rtt 增加而减小意味着发得慢了进而 inflight 减少pacing_rate 继续减少。
这表明根本轮不到 ai 激发 md背景流作用下这个闭环反馈自己懂松弛自动退却。
全链路常规 aimd burst 流量的 buffer overflow 在整个时间序列呈类泊松分布但无论哪种统计分布采样次数越多遭遇 buffer overflow 概率越大而 pacing 将所有报文在时间序列均匀分布遭遇 buffer overflow 概率最大每次都会导致其 cwnd 比例降低如前述pacing_rate cwnd / rtt 这个闭环稳定在 cwnd limited 外cwnd 在丢包恢复后无法增加。
无论哪种情形pacing_rate 只能单调递减趋向跌 0。结论是pacing 流无法与 aimd 行为相匹配pacing_rate 与 inflight 相生阻止 cwnd 的 ai匡谈 md。
为解决这问题Linux 引入 net.ipv4.tcp_pacing_ca_ratio 内核参数(即使非 Linux 实现也必须有类似的措施)
pacing_rate net.ipv4.tcp_pacing_ca_ratio * (cwnd / rtt)
tcp_pacing_ca_ratio 引入一种 probe 机制可想而知它不能比 1 小甚至不能等于 1否则 cwnd 将完全无用但即使大于 1测量和计算的精度问题以及抖动依然可能将其效果带到 1 以下pacing_rate 将滑落。默认 1.2带来非常保守的 probe 效果。
这个 probe 机制以驱动 aimd 运行。但并没解决遭遇 buffer overflow 概率影响 cwnd 增长的问题增加的 pacing_rate 让 pacing 分布更加密集遭遇 buffer overflow 概率更大。没有反制拥塞丢包影响的措施却又完全伸展自己惨烈相迎自己一直按照 pacing_rate 无 queuing 传输tcp_pacing_ca_ratio 也只保守 probe常规的 aimd 退却是对 ai 行为的积累退却相当于零存整取但遭遇与自身行为无关(并没有进行有效的 ai)的 buffer overflow 后仍然依照 aimd 原则退就只能一退再退。
谈完 probe 和丢包影响问题接下来看看被加塞的影响。
pacing 流遭遇 burst 流是个劣币驱良币过程。设带宽为 Tpacing 流连续 2 个报文之间被加塞 n 个 burst 报文将对 pacing 流引入 (n * 1500) / T 的延时显然和 burst 量成正比将引起 inflight 迅速降低而跳出 cwnd limited这很可怕。换句话说即使存在 tcp_pacing_ca_ratio probe 参数(即使存在 1 的 probe 增益)pacing 流依然很容易跳出 cwnd limited 而进入闭环稳态。
综上pacing 严重影响 aimd 流的吞吐性能并使之偏离 aimd 预期行为不再零存整取而存零整取取的是代价更别谈公平收敛pacing_rate cwnd / rtt 闭环阻止了自身的 bufferbloat 贡献pacing 流本身便不会主动(一种忏悔)执行 md(multiplicative-decrease) 收敛动作被动的 md 纯被欺负。
那么 what about bbr with pacing
bbr 自身有状态机驱动 probe 行为每 8 个 rounds 以 5 / 4 pacing_rate 增益做 probe。但只要是 pacing 流被 burst 加塞的后果都一样引入 (n * 1500) / T 的延时进而引发 delivery rate 的下滑被加塞将破坏 bbr 状态机的基本假设以及后续转换因此 bbr 在一个 window 中不理会实际的测量值反而坚持该 window 内的 max bandwidth以此抵抗被动引入的延时目前这个 window 是 10 rounds。
通过对 reno/cubicbbr 的 pacing 动力学分析结合假期最后一天的 高速公路堵车动力学表明这是个典型的劣币驱良币的 case。无论 reno/cubic 还是 bbr 都需要主动 probe 避免死寂同时需要某种坚持(persist)缓解被 burst 加塞的伤害但没有一种良性机制对抗 burst。无奈 pacing 本身就是有价值的松弛策略面对 burst 被驱逐也是情理之中。
当为传输使能 pacing 时明明一个好东西性能却劣化了大概就是以上原因网络终究是个劣币驱良币的投机系统。
所以呢别在 sender host 侧 pacingpacing 留给网络转发节点做。不 pacing岂不加重 bufferbloat但两害相权取其轻对一厢情愿的 pacingbuffer 不会过分 bloat我并不是说把 gain * delivery_rate * delivery_interval 全部一次性 burst 出去可以分多次定制你自己的 pacing。重要的是你要知道你在做什么并知晓后果。
至于数据中心网络那是另一个故事。rtt 足够小局域范围很容易约定并形成大家都遵守的共识别说 pacingSDN 可以控制一切但在广域网SDN 就不好使因为 rtt 太长了反馈周期太久响应太慢就不得不接受广域网是一个投机者组成的自组织系统。
皮鞋没有蹬上露着白袜子。
浙江温州皮鞋湿下雨进水不会胖。