传输协议设计与牧村摆动(Makimoto‘s Wave)

有一条活鱼和一条死鱼,你准备怎么做,你会将活鱼红烧或将死鱼清蒸吗?好的食材只需要最简单的烹饪,不好的食材才需要花活儿。

我此前的文字几乎都在阐述一个观点,广域网就是那条死鱼,数据中心则是那条活鱼。做那条死鱼要下重料,而活鱼只需要张嘴吃即可。辣椒,老抽,胡椒看做 CUBIC,BBR,PCC,专门调教广域网的朽木,而在另一边,TTPoE 则是最简单的刺身。

然而事实上,哪怕在现实中,虽然几乎没人拿臭鱼烂虾做刺身,但红烧活鱼的却大有人在,哪个对哪个错是没有意义的,摆弄清楚这些事的内在关系才重要。

前不久 Tesla 刚推出 TTPoE 那会儿,不少人问我它和 TCP BBR 或 QUIC 相比如何,我没有过多回复,而是写了两篇短文。事实上我的意思是,TTPoE 是一道活鱼刺身,而 BBR 是一勺浓油重料,但现实中真有不少人喜欢浓油重料,无论针对什么食材。

总结一个方法论,良好的环境做减法,恶劣环境做加法,大概就是如何设计传输协议的根本方案了。

但干净的方案几乎不存在,被后起重要作用的是 “牧村摆动(Makimoto’s Wave)”,也叫 “牧村定律”。这个定律说的是,半导体产品发展历程总是在 “通用化” 与 “定制化” 之间交替摆动,大概每 10 年波动一次。这种定律的背后是市场和人的周期性波动,所有花活儿均来自其中,没什么太大的奥妙,我做简图如下,随便看看:
在这里插入图片描述

另一种理解,将性能功耗比看做 “硬件”,将开发效率看做 “软件” 是高尚的。硬件意味着定制和高效,软件意味着通用可编程,本质上,软件就是拿时间换空间,而按照熵增的说法,能量的本质就是时间,软件的性能能耗比高是内在的。

举一个不严谨但简单的例子,一个携带 32 个加法器的电路计算 32 位加法和一个携带 1 个加法器的电路计算 32 次 1 位加法是等效的,但后者拿时间换空间,花了前者 32 倍的时间,外部时序经历了 32 倍的电平转换,在时间的流逝中也消耗了更多能源,性能低,能耗大。

现在看看在牧村摆动中的网络是如何发展的。

最初,网络通信被 socket 接口抽象成 IPC,TCP 是 inet stream socket,这是软件主宰的时代,诞生了一大批 socket 工人,当 CPU 足够快了就有人嫌网络,于是网卡开始按 10 倍速进击。

从千兆卡说起,这时 CPU 又成了瓶颈,开始有人折腾 TOE,RSS,中断了,诞生了一大批 TCP 以及内核协议栈优化工人,而先前的 socket 工人被认为是不懂网络的。

当更新更快的网卡出现,DPDK(同时还有几个竞争者) 自然就出现了,此时那些内核协议栈工人变成了古人,因为大家都在争先恐后 bypass 掉内核,不管是 DPDK 工人还是 XDP 工人。

虚拟化,SDN,NFV 风潮暂且不表。

IPC 网络模型彻底受到了挑战。在此之前,网络通信是进程的职责,而进程自然归 CPU 调度管理,但当 CPU 被网络通信拖住时,疑问是 “既然是网络通信,为什么不让网卡来做”,至此 RDMA 开始浮出视野,在此之前 DMA 已经解放了拷贝和中断的 CPU 开销,如今就连网络对端的行为也被网卡接管。

定制化网卡开始遍地开花,FPGA,SmartNIC,曾经力压内核协议栈的 DPDK 工人反而成了通用工人。随后的 AI 时代彻底捧起了 RDMA,在此之上或与之并列,新技术新标准新协议也层出不穷,IB(差点死掉),RoCE,RoCEv2,HPCC,SRD,Homa,SRD,TTPoE(这个不在下文贬义行列),… 随之而来的就是掌握这些技术的工人开始统领大小厂子。

最终,网络技术到底是什么?TCP,socket,DPDK,XDP,RDMA,还是上面最后一行那些?或者是这些的大杂烩?答案明显是后者。

所有定制硬件做着做着都会做成通用(可编程)软件,携带着被最普遍应用的定制硬件的影子,所有通用软件最终会被性能需求分化出各种定制硬件,夹杂着通用软件的毛病,这就是牧村摆动本身的最佳阐释。希望设计一个干净的传输协议,本身就是妄想。

但回头看这 30~40 年,上述这些名词术语,均离地不过八百米,它们均局限在主机周围很小的范围内,即主机本身到数据中心的范围。回看广域网,大致 2000 年左右的问题如今仍然还是问题,以文初的类比,海边从 30 年前吃小蟹到现在 100 种刺身,遥远的内地的海鲜 30 年来依然只有带鱼。

设计数据中心的传输协议和设计优化广域网协议是完全不同的路子,有不同的方法论,广域网卷算法,数据中心卷硬件和自研协议(强调硬件实现)。但在更大的时间尺度看,二者又相似。广域网也有牧村摆动主导的技术和职业变革,但慢得多,这并不仅仅是设备更新换代慢的问题,我曾从反馈时延角度建模分析过 SDN controller 在广域网失败的原因。

数据中心是可控的环境,如果扩容,升级交换机,很多协议端花活儿都不需要了,反之如果只是网卡厉害,为了适应恶劣的交换机,还是要在主机端网卡整花活儿,这提升了工人的热情,但对整体无益,然而这就是牧村摆动过程本身必然要经历的中途。正如上周一位经理所说,干嘛要费劲做用户态协议栈,那点收益还不如让业务删除几行代码来的快。

加大于减,这就是人性。

总之,牧村摆动不会停摆,仅针对网络传输协议而言,最近一轮定制化周期开始时的 “只要有就行” 被纷纷进场的对手开始内卷后,必然转向 “只有好才行”,而 “好” 则是万变不离其宗的,它并不藏在性能能耗比或开发效率的巅峰或低谷,而处在经理的心中。

顺着牧村摆动的解释写了一篇文章。我一向相信世界在小范围内是随机的,大尺度下是周期的,摩尔定律,牧村定律,都可以以此建模。小时候经常听到准时而来的叫卖声,卖洗衣膏的,卖酱油醋的,卖粉浆的,卖卫生纸的,爆米花的,卖雪糕的,。。。准时而来,他们并非随机而来,你想让这些卖货的随机而来都不行,因为他们也有自己心里规划的周期,规则和顺序,现在理解了,他们只是每天沿着固定的街道路线行走而已,安阳老城九府十八巷,够他们溜达的,综合起来各个卖家,那就显得五花八门了。
一个人的整个人生就是在解一个傅里叶变换,事实也确实如此。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/58951.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【AI学习】Mamba学习(十五):关于S4模型计算优化的再学习

前面理解了S4模型,但是对于具体的优化算法,还是没有完全理解透彻。现在补充学习。 S4 SSM HiPPO Structured Matrices 具体方案:Structured State Spaces (S4) 简单总结:用HiPPO-LegS的矩阵形式初始化SSM,解决训…

【C++】新手入门指南

> 🍃 本系列为初阶C的内容,如果感兴趣,欢迎订阅🚩 > 🎊个人主页:[小编的个人主页])小编的个人主页 > 🎀 🎉欢迎大家点赞👍收藏⭐文章 > ✌️ 🤞 &#x1…

小程序开发进阶之路-AI编程助手

之前,我独自一人开发了一个名为“心情追忆”的小程序,旨在帮助用户记录日常的心情变化及重要时刻。从项目的构思、设计、前端(小程序)开发、后端搭建到最终部署,所有环节都由我一人包办。经过一个月的努力,…

Cursor的chat与composer的使用体验分享

经过一段时间的试用,下面对 Composer 与 Chat 的使用差别进行总结: 一、长文本及程序文件处理方面 Composer 在处理长文本时表现较为稳定,可以对长文进行更改而不会出现内容丢失的情况。而 Chat 在更改长的程序文件时,有时会删除…

【笔记】自动驾驶预测与决策规划_Part6_不确定性感知的决策过程

文章目录 0. 前言1. 部分观测的马尔可夫决策过程1.1 POMDP的思想以及与MDP的联系1.1.1 MDP的过程回顾1.1.2 POMDP定义1.1.3 与MDP的联系及区别POMDP 视角MDP 视角决策次数对最优解的影响 1.2 POMDP的3种常规解法1.2.1 连续状态的“Belief MDP”方法1. 信念状态的定义2. Belief …

Latex公式转换编辑网站

https://editor.codecogs.com/ https://www.latexlive.com/home## https://simpletex.cn/ai/latex_ocr https://webdemo.myscript.com/views/math/index.html# 参考 https://latex.91maths.com/ https://web.baimiaoapp.com/image-to-latex https://blog.csdn.net/qq_45100…

注意力机制的目的:理解语义;编码器嵌入高纬空间计算;注意力得分“得到S*V”;解码器掩码和交叉注意力层用于训练;最终的编码器和输出实现大模型

目录 注意力机制的目的:理解语义中的它是小白兔 词编码器嵌入高纬空间 计算注意力得分“得到S*V” 权重QKV:连接权重 训练阶段使用解码器:翻译后的语句 解码器掩码和交叉注意力层用于训练 最终的编码器和输出实现大模型 Transformer模型中,QKV QKV的作用 举例说明…

【万字详解】如何在微信小程序的 Taro 框架中设置静态图片 assets/image 的 Base64 转换上限值

设置方法 mini 中提供了 imageUrlLoaderOption 和 postcss.url 。 其中: config.limit 和 imageUrlLoaderOption.limit 服务于 Taro 的 MiniWebpackModule.js , 值的写法要 ()KB * 1024。 config.maxSize 服务于 postcss-url 的…

【MatLab手记】 --从0到了解超超超详过程!!!

文章目录 MatLab笔记一、命令行窗口二、变量命名规则三、数据类型1. 数字2. 字符与字符串3. 矩阵3.1 矩阵创建3.2 矩阵的修改和删除3.3 矩阵的拼接与重构重排3.4 矩阵的运算方法3.5 矩阵的下标 4. 元胞数组(类似数据容器)5. 结构体 四、逻辑与流程控制五…

实现uniapp-微信小程序 搜索框+上拉加载+下拉刷新

pages.json 中的配置 { "path": "pages/message", "style": { "navigationBarTitleText": "消息", "enablePullDownRefresh": true, "onReachBottomDistance": 50 } }, <template><view class…

IDM扩展添加到Edge浏览器

IDM扩展添加到Edge浏览器 一般情况下&#xff0c;当安装IDM软件后&#xff0c;该软件将会自动将IDM Integration Module浏览器扩展安装到Edge浏览器上&#xff0c;但在某些情况下&#xff0c;需要我们手动安装&#xff0c;以下为手动安装步骤 手动安装IDM扩展到Edge浏览器 打…

AndroidStudio-常用布局

一、线性布局LinearLayout 线性布局内部的各视图有两种排列方式: 1.orientation属性值为horizontal时&#xff0c;内部视图在水平方向从左往右排列。 2.orientation属性值为vertical时&#xff0c;内部视图在垂直方向从上往下排列。 如果不指定orientation属性&#xff0c;…

Pr 入门系列之八:使用关键帧(上)

不论是固定效果、标准效果或是第三方效果&#xff0c;都可以通过改变属性的值来达到效果控制的目的。 任何动画要表现运动或变化&#xff0c;前后至少要给出属性值的两个不同的关键状态&#xff0c;称之为“关键帧” Keyframe。 而中间状态的变化和衔接&#xff0c;则是由计算机…

万字长文解读深度学习——循环神经网络RNN、LSTM、GRU、Bi-RNN

&#x1f33a;历史文章列表&#x1f33a; 深度学习——优化算法、激活函数、归一化、正则化深度学习——权重初始化、评估指标、梯度消失和梯度爆炸深度学习——前向传播与反向传播、神经网络&#xff08;前馈神经网络与反馈神经网络&#xff09;、常见算法概要汇总万字长文解读…

qt QMovie详解

1、概述 QMovie 是 Qt 框架中用于处理动画文件的类。它支持多种动画格式&#xff0c;包括 GIF 和一些常见的视频格式&#xff08;尽管对视频格式的支持依赖于底层平台&#xff09;。QMovie 类主要用于在 QLabel 或 QGraphicsView 等控件中显示动画。通过加载动画文件&#xff…

ip addr show

本文内容来自智谱清言 ip addr show 是 Linux 系统中用于显示网络接口配置的命令。这个命令属于 iproute2 软件包&#xff0c;该软件包在大多数 Linux 发行版中都是预安装的。ip addr show 命令可以用来查看所有网络接口的当前配置&#xff0c;或者指定某个特定接口的配置。 …

【ESP32】ESP-IDF开发 | 低功耗管理+RTC唤醒和按键唤醒例程

1. 简介 ESP32支持5种低功耗模式&#xff0c;低功耗管理单元包括调压器、功耗控制器、电源开关单元、电源域隔离单元 (Isolation Cell) 等部分。 1.1 RTC单元 RTC单元是ESP32低功耗管理的核心&#xff0c;可用于管理低功耗模式的进入和退出&#xff0c;控制时钟源、PLL、电源开…

重学 Android 自定义 View 系列(三):自定义步数进度条

前言 本篇文章主要是实现仿QQ步数View&#xff0c;很老的一个View了&#xff0c;但技术永不落后&#xff0c;开搂&#xff01; 最终效果如下&#xff1a; 1. 结构分析 QQStepView 主要由三个元素组成&#xff1a; 显示一个圆环进度条&#xff0c;通过外环和内环的角度变化来…

Spring中的过滤器和拦截器

Spring中的过滤器和拦截器 一、引言 在Spring框架中&#xff0c;过滤器&#xff08;Filter&#xff09;和拦截器&#xff08;Interceptor&#xff09;是实现请求处理的两种重要机制。它们都基于AOP&#xff08;面向切面编程&#xff09;思想&#xff0c;用于在请求的生命周期…

查缺补漏----用户上网过程(HTTP,DNS与ARP)

&#xff08;1&#xff09;HTTP 来自湖科大计算机网络微课堂&#xff1a; ① HTTP/1.0采用非持续连接方式。在该方式下&#xff0c;每次浏览器要请求一个文件都要与服务器建立TCP连接当收到响应后就立即关闭连接。 每请求一个文档就要有两倍的RTT的开销。若一个网页上有很多引…