无拥塞网络的辩证
无拥塞网络一定不能是被动反应式的,因为反应时已经晚了,而必须是持续主动反馈式,原因说到底还是信息的时效范围对准确性的影响。举个直观例子,RTProp 越长,时延抖动越大,拥塞信息越不精确,拥塞控制越无效,这是因为时间越久,单向累计作用的时延抖动(方差)影响越大,而信息由这种单向的熵衡量,也就是夜长梦多。
遗憾的是,AIMD,BBR,ECN,PFC 都是反应式的,人们总在诸如此类之上更正修补,试图彻底解决拥塞控制的所有问题,而只要 RTProp 不为 0,这就是不可能的。
针对 ENC 和 PFC,来看下如何用持续反馈式机制完成它们想做的事。
如果交换机不断向拥塞队列(无论 egress 还是 VOQ)的每个上游反馈每个上游对当前交换机的拥塞贡献,而上游交换机收到这些帧后,根据一个全局策略调整发送速率或切换 ECMP 路径,这就是一个永不拥塞的网络了,注意,强调的是永不拥塞而非永不丢包。
比如说,当前交换机某输出队列长度为 L,距离拥塞阈值 D0D_0D0,对某上游端口 Ui 的反馈应为 D0⋅αiD_0\cdot\alpha_iD0⋅αi,其中 α 为 Ui 对当前输出队列的 “贡献”,并以此作输入,需要它支付拥塞税,拥塞税由全局原则计算。每个交换机会根据支付成本来决定是继续上游收税,只阻塞本地,切换路径还是丢包。
仍以 TCP 为例,分析 wnd=MIN(rwnd,cwnd)\text{wnd}=\text{MIN}(\text{rwnd},\text{cwnd})wnd=MIN(rwnd,cwnd),TCP 流控是典型的持续反馈,而拥塞控制则是反应式。TCP 有流控的持续反馈才不会因 receiver 溢出而丢包,但由于网络的哑特征,交换机不会持续反馈状态给上游交换机,TCP sender 反而需要利用交换机丢包作为信号来进行拥塞反应式控制,这是一种在懂 TCP 的看来习以为常的方式,却是一种奇怪的方式。
ECN/INT 靠边沿触发反馈事件给 sender 反应,却不持续反馈给上游,而 PFC 则只反馈事件给上游,总之都是拧巴方案。要么直接做完备,要么怎么都做不完备,这背后存在一种缺陷哲学,一开始做不完备是因为有缺陷,同样因为该缺陷,日后怎么做还是做不完备。对 TCP 拥塞控制而言,这个缺陷就是哑网络,但正是网络的哑特征,促成了 TCP/IP 的成功,这是个辩证关系,不是问题和方案的关系。
有人要说了,网络它就是哑网络,又能如何,交换机支持个 feature 难于上青天,开个 ECN 都费劲,如何支持反馈式流控,数据中心这些事都不可得,更别指望互联网为支持某 feature 而实施变更。他们美其名曰要尊重当前标准,复用当前接口,以此为理由,结果又回到以太网那一套,复用了标准,也继承了缺陷,绕了一个圈,到头来,在这里省下来的,还得到那里加倍还回去,然后嘴硬不承认,反而说这是个创新,又一个世界第一等。
思想它就是个思想,不是工程方案,说做不到的多数因为懒。
动不了交换机就说说 SDWAN,都把一个几万行的程序部署在节点上了,就没功夫再多写 10 行代码给邻居那几万行程序反馈点信息吗,协议都重新设计了却仍依赖检测到丢包或 RTT 变化后才实施路径切换,TCP 做不到的事,你能做也跟着不做。
逼你多传几个字节控制信息你嫌浪费流量,你检测到拥塞后一个包发两遍抢带宽时却理所当然,协议都自定义了,你却要照顾接口生态,事后却花几个月用 Rust 重构代码,漂亮完成一个绩效季的产出。
前几天我在一篇讲大厂红利为何变成负资产的文章下评论,我想也可以评论自己今天的这篇文章:
这才是正解,一定要从开放系统论,控制论,博弈论,社会学的视角分析才行,但遗憾的是,这些恰恰是很多计算机科班出身的从业者所忽视的,而他们往往迷信某项或某几项特别的新技术就能解决所有问题。
浙江温州皮鞋湿,下雨进水不会胖。