当前位置: 首页 > news >正文

传输协议设计与牧村摆动(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 在广域网失败的原因。

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

加大于减,这就是人性。

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

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

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

相关文章:

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

有一条活鱼和一条死鱼,你准备怎么做,你会将活鱼红烧或将死鱼清蒸吗?好的食材只需要最简单的烹饪,不好的食材才需要花活儿。 我此前的文字几乎都在阐述一个观点,广域网就是那条死鱼,数据中心则是那条活鱼。…...

JMeter进阶篇

目录 上篇导航: 总目录: 一、逻辑控制器: 1.逻辑控制器和关联: 2.if逻辑控制器: 3.forEach控制器: 4.循环控制器: 二、关联: 1.xpath: 2.正则表达式提取器&…...

LabVIEW编程基础教学(一)--介绍

LabVIEW(Laboratory Virtual Instrument Engineering Workbench)是一种基于图形化编程的开发环境,专为工程应用、测试、测量、控制系统等设计。与传统的文本编程语言不同,LabVIEW 使用图形化的方式通过“数据流”模型来表示程序逻…...

HVV蓝队基础

免责声明 学习视频来自B 站up主泷羽sec,如涉及侵权马上删除文章。 笔记的只是方便各位师傅学习知识,以下代码、网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负。 企业网络架构 企业技术和信…...

[运维][Nginx]Nginx学习(1/5)--Nginx基础

Nginx简介 背景介绍 Nginx一个具有高性能的【HTTP】和【反向代理】的【WEB服务器】,同时也是一个【POP3/SMTP/IMAP代理服务器】,是由伊戈尔赛索耶夫(俄罗斯人)使用C语言编写的,Nginx的第一个版本是2004年10月4号发布的0.1.0版本。另外值得一…...

创客节小学组C++模拟题

来源:加码未来2024年深圳罗湖区创客节模拟题(小学组) 第一题 题目描述 给你n个数,找出出现次数超过一半的数。题目保证这样的数一定存在。 输入格式 第一行一个整数n,(n<=1000) 第二行n个整数(<1000000) 输出格式 输出一个整数 样例输入 5 1 2 3 3 3 样例输…...

阿里云ECS服务器使用限制及不允许做的事情

阿里云ECS&#xff08;Elastic Compute Service&#xff09;是一种高性能的弹性计算服务&#xff0c;允许用户在云端创建和管理虚拟服务器。尽管ECS提供了强大的功能&#xff0c;但在使用过程中&#xff0c;阿里云有一些限制和不允许的行为。以下是一些主要的使用限制和禁止行为…...

Linux开发讲课49--- Linux 启动过程分析

理解运转良好的系统对于处理不可避免的故障是最好的准备。 启动过程非常简单。内核在单核上以单线程和同步状态启动&#xff0c;似乎可以理解。但内核本身是如何启动的呢&#xff1f;initrd&#xff08;initial ramdisk&#xff09; 和引导程序(bootloader)具有哪些功能&#…...

Java-03

目录 算法 1.小美的因子查询 2.小美的密码 3.小美的数组删除 4.小美和大富翁 知识点 InnoDB中的行级锁是怎么实现的&#xff1f; 介绍一下Java中的IO流 讲讲Java的跨平台原理 COUNT&#xff08;1&#xff09;与COUNT&#xff08;*&#xff09;区别 Redis 为什么要用…...

微积分复习笔记 Calculus Volume 1 - 5.3 The Fundamental Theorem of Calculus

5.3 The Fundamental Theorem of Calculus - Calculus Volume 1 | OpenStax...

c++如何绑定一个类与类内成员的关系

在 C 中&#xff0c;成员函数和成员变量的归属关系&#xff08;即某个成员属于哪个类&#xff09;是通过编译器的多种机制和语言特性来实现和管理的。理解这些机制有助于更深入地掌握 C 的面向对象特性、内存管理以及编译过程。以下是 C 如何确定某个成员函数或成员变量属于特定…...

关于解决使用VMWare内的虚拟机无法识别USB问题小结

目录 前言 0. 查看是不是没有开启USB3.0的支持 1. 检查一下是否禁用了VMWare USB服务 2. 无奈之举 前言 笔者今天帮助一位同志解决了VMWare内的虚拟机不识别挂载设备的办法。这里对笔者使用的排查手段做一个总结。 0. 查看是不是没有开启USB3.0的支持 我们的第一件事情就…...

抢抓5G机遇,AORO A23防爆手机如何直击园区巡检挑战?

矗立在沙漠高原的铁塔&#xff0c;遍布都市的电线网络&#xff0c;远离郊区的海港油田……大型园区对智能巡检提出了新的需求&#xff0c;选择一款智能且高效的巡检设备&#xff0c;以确保园区高效运营&#xff0c;成为了管理者关注的重点。在调研多个智慧园区后&#xff0c;小…...

索引【MySQL】

文章目录 聚簇索引 VS 非聚簇索引索引MySQL与磁盘交互的基本单位主键索引索引操作唯一索引的创建普通索引的创建复合索引 索引创建原则 聚簇索引 VS 非聚簇索引 MyISAM存储引擎 - 主键索引结构 MyISAM存储引擎同样采用B树作为索引的基本数据结构 与InnoDB存储引擎的B树不同的…...

【Allure】mac下环境配置

安装 1.Mac 可以使用 brew 安装 allure&#xff0c;安装命令如下 brew install allure 2.与 pytest 结合需要安装 allure-pytest 插件&#xff1a; pip install allure-pytest3.查看allure版本 allure --version...

Android 开启混淆R8编译问题处理

Android R8是一个代码混淆和压缩工具&#xff0c;可以将应用程序的大小和安全性优化。它引入了一些新功能&#xff0c;如成员内省、混淆指针、类内省等。 但R8使用起来一直不友好&#xff0c;因为自从使用R8之后编译问题不断。主要还是和混淆相关&#xff0c;经常报错&#xff…...

Rust:GUI 开源框架

Rust的GUI代码包有多个选择&#xff0c;每个都有其独特的特点和优势。以下是一些比较受欢迎的Rust GUI库&#xff0c;以及它们的主要特点和适用场景&#xff1a; KAS GUI&#xff1a; 特点&#xff1a;基于Rust语言开发的状态化图形用户界面&#xff08;GUI&#xff09;框架&am…...

移远通信亮相骁龙AI PC生态科技日,以领先的5G及Wi-Fi产品革新PC用户体验

PC作为人们学习、办公、娱乐的重要工具&#xff0c;已经深度融入我们的工作和生活。随着物联网技术的快速发展&#xff0c;以及人们对PC性能要求的逐步提高&#xff0c;AI PC成为了行业发展的重要趋势。 11月7-8日&#xff0c;骁龙AI PC生态科技日在深圳举办。作为高通骁龙的重…...

力扣每日一题 3258. 统计满足 K 约束的子字符串数量 I

给你一个 二进制 字符串 s 和一个整数 k。 如果一个 二进制字符串 满足以下任一条件&#xff0c;则认为该字符串满足 k 约束&#xff1a; 字符串中 0 的数量最多为 k。字符串中 1 的数量最多为 k。 返回一个整数&#xff0c;表示 s 的所有满足 k 约束 的子字符串的数量。 如…...

SQL面试题——奔驰面试题

SQL面试题——奔驰SQL面试题 我们的表大致如下 CREATE TABLE signal_log( vin STRING COMMENTvehicle frame id, signal_name STRING COMMENTfunction name, signal_value STRING COMMENT signal value , ts BIGINT COMMENTevent timestamp, dt STRING COMMENTformat yyyy-mm…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化&#xff1a;人工智能的自我改进与监管挑战 文章目录 递归进化&#xff1a;人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管&#xff1f;3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

基于SpringBoot在线拍卖系统的设计和实现

摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统&#xff0c;主要的模块包括管理员&#xff1b;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配

目录 一、C 内存的基本概念​ 1.1 内存的物理与逻辑结构​ 1.2 C 程序的内存区域划分​ 二、栈内存分配​ 2.1 栈内存的特点​ 2.2 栈内存分配示例​ 三、堆内存分配​ 3.1 new和delete操作符​ 4.2 内存泄漏与悬空指针问题​ 4.3 new和delete的重载​ 四、智能指针…...

uniapp 字符包含的相关方法

在uniapp中&#xff0c;如果你想检查一个字符串是否包含另一个子字符串&#xff0c;你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的&#xff0c;但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...

省略号和可变参数模板

本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...