本文包含中心极限定理,大数定律,经济规律等,bbr 倒没多少,不过已经习惯把 bbr 当靶子了。
上周写了 揭秘 bbr 以及 抢带宽的原理,我对自己说,这都是理论上如何,可实际上呢。于是有必要结合更实际的场景,而这恰恰是大部分人所忽略的场景。
网络拥塞主要涉及 buffer 占用,则聚焦到 buffer。细节不重要,重要是流量在 buffer 的分布,真实网络是下面这样(对于个人直播,D 和 S 对称):
整天说互联网是统计复用系统,就要用统计的语言描述,中心极限定理,大数定律以及幂律在网络拥塞动力学中起重要作用。
题外话:但凡能用数学精确描述的,都不真实,都是近似,且一定范围内的近似。参见牛顿在《自然哲学的数学原理》中的方法论,引入牛顿刚体,伽利略光滑平面…后来的澄清石灰水,橡胶棒与皮毛,玻璃棒与丝绸就显得在数学上不那么严谨了,但真实啊。
先大致描述图中涉及的分布以及它们的特点。
根据中心极限定理,正态分布是归宿。骨干网由接入网汇聚而成,汇聚过程正是中心极限定理作用的过程,即任意分布在叠加过程中趋向正态分布。
正态分布很容易理解,它就像(实际上也是)个垃圾堆。水杯,塑料袋,裤头,袜子,皮鞋,卫生纸都是有用的低熵体(生产它们需要注入能量),将它们丢弃就是叠加它们,最终就是个垃圾堆,里面所有东西都被独立丢在这里任由时间飞逝而烂掉,任何两件东西之间没有任何关系。
等量样本,正态分布的方差最小,熵最大,所谓中心极限定理表达的就是有用的东西变成垃圾堆的熵增过程。
然而非独立样本的分布往往偏离正态分布,比如表现为幂分布,典型的这类场景中往往有人的行为影响。比如贫富占比的幂律,也叫二八定律,马太效应,这就是说,致富和贫困并非彼此独立发生的。
题外话:我一直说货币系统就是个分布式系统,交易就是供需认知的分布式一致性收敛达到共识的过程,而这个一致性共识永远不会达到,否则就会打破二八定律。财富在交易过程中积累,而交易过程必有一方比另一方在等价中间物上获益,否则交易便不会发生。所谓财富分化来自信息差,经济规律一直在试图消除信息差达到分布式一致性,在这个过程中产生新的信息差抵制一致性趋向,以此循环,永远达不到一致性,世界因而发展,财源滚滚来。
接入网流量往往表现为突发,而这类突发和人的上网行为相关,如网红直播,抢购,刷短视频,看热播剧都是人驱动,流量和人之间千丝万缕的联系很难满足独立事件约束,这表现为接入网流量更不稳定。
无数接入网流量汇聚到骨干,正态分布的流量表现出更稳定的特征,骨干网 buffer 占用相对可预期,流量分布概率密度函数就是个有高度和宽度垃圾堆,便可基于此决策适应它的行为。
流量稳定性可通过大数定律理解,任意时间点流量相当于对数据流的一次抽样,数据流越多,其均值越接近总量均值,而总量可表示为一个任意足够大时间段的流量总和,该时间段随时间向前滑动,其均值保持和单点抽样均值一致,在此过程中,少量数据流进入退出对整体影响微乎其微,正好像海面始终有浪花,偶尔惊涛骇浪,但总体上的海面却是平的。
题外话:数量越多的流量,同步的概率越低,代价越大,越趋向于异步,而异步趋势则表现为锯齿的变小直到消失,表现为波峰波谷抵消而总体趋平,平面升高或降低需要足够多流量整体同时同步升高(拉偏期望)才能产生影响,而这又是一个同步行为,前面说了,数量越大,同步概率越低,代价越大,越不可能,因此整体趋稳定。这是一种更好的理解大数定律的方式,正如用垃圾堆理解中心极限定理一样。
由此,互联网流量越往边缘越偏离正态分布,为照顾大而不稳的方差,buff_size = BDP / sqrt(n) 的根号效应减弱(参见 Sizing router buffers 值得一提的是,这篇论文的结论本身就是从中心极限定理导出的),buffer 溢出和 bufferbloat 更容易在边缘发生,所配置 buffer 反而比实际需要的更大。
要关联 bbr 就要单独抽出 bltbw 和 proprt 这两个 bbr 顾名思义的核心正交要素,看它们如何分别适应接入网和骨干网。
如果 bltbw 在接入网,单流 bbr 将以 “准精确” 方式运行,“准” 是考虑到骨干流量分布特征,rtt 随正态分布的流量而波动,因此维持 10s 的 minrtt 将不再可信,正确做法是让 minrtt 跟着骨干网流量而波动。
如果 bltbw 在接入网,多流 bbr 将以 “粗粒度” 方式运行,“粗” 指不但测不准波动的骨干网时延,接入网 buffer 挤占也破坏 bbr 假设,此前我说过多次该话题,不再赘述,bbr 邮件组也没更好方案,直到 bbr3 依然只是回引 aimd。
如果 bltbw 在骨干网,bbr 的模型假设将完全失效。骨干网洪流中,单独一条 bbr 流的 probertt 对 buffer 将不会有可识别的影响,对 minrtt 测量的影响远不如对正态分布的流量波动进行识别和跟随。如果不想进行这种费力却依然测不准的识别,回退到 aimd,剩下的交给 RED。
只要 bltbw 在骨干网,bbr 流就像泼进长江的一盆水或一滴水滴在海绵上。设定 aimd,随波逐流就好。如果要摆脱这悲观,尝试着在 bbr 上还能做点事,适应而不是改变,不争不退,所以就知道我那些旨在提高 bbr 灵敏性而不是提高测量精度的想法的用心良苦了吧。
按照收敛比概念,bltbw 大概率在第一跳,骨干反而近乎无限,只需识别并跟随其波动即可,但随着接入网技术的发展(老掉牙的说法是 xx 没能同样发展),越来越多的用户购买越来越大的接入带宽(我们从运营商购买的带宽即接入带宽,而骨干网只是个资源池),bltbw 也会向网络中心考虑,网络的统计特征越来越明显,拥塞控制将越来越指望不上精确,这是和 越来越无效的拥塞控制 不同的另一个的意思,虽然无法精确度量链路画像,但正态分布却是可预期的,基于这种预期,虽然端到端算法无法影响它,但却可以适应它,跟随它。
我的信条,保持稳定,向趋势靠拢。所谓端到端算法,名字里就没有网络,对这类算法,网络是不可知测不准的,网络仅能反馈趋势而不是值,过于执着精确测量的算法犯了唯心主义的错误,必跌入形而上学的深渊。
比如 sender 测得 rtt 为 73ms,66ms,51ms,46ms,33ms,30ms,31ms,28ms,34ms,32ms,这充其量只能告诉 sender 拥塞在缓解,你不会真的相信 minrtt 就是 28ms 了吧,那么移指平均后它可信吗,哦,那只是一种滤波方式,为什么不是另一个呢?基于这些完全不准确但一本正经的粗粒度度量试图做精确的决策,不是胡扯么?
皮鞋没有蹬上,露着白袜子。
浙江温州皮鞋湿,下雨进水不会胖。