当前位置: 首页 > 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…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

三体问题详解

从物理学角度&#xff0c;三体问题之所以不稳定&#xff0c;是因为三个天体在万有引力作用下相互作用&#xff0c;形成一个非线性耦合系统。我们可以从牛顿经典力学出发&#xff0c;列出具体的运动方程&#xff0c;并说明为何这个系统本质上是混沌的&#xff0c;无法得到一般解…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

FFmpeg:Windows系统小白安装及其使用

一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】&#xff0c;注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录&#xff08;即exe所在文件夹&#xff09;加入系统变量…...

第7篇:中间件全链路监控与 SQL 性能分析实践

7.1 章节导读 在构建数据库中间件的过程中&#xff0c;可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中&#xff0c;必须做到&#xff1a; &#x1f50d; 追踪每一条 SQL 的生命周期&#xff08;从入口到数据库执行&#xff09;&#…...

UE5 音效系统

一.音效管理 音乐一般都是WAV,创建一个背景音乐类SoudClass,一个音效类SoundClass。所有的音乐都分为这两个类。再创建一个总音乐类&#xff0c;将上述两个作为它的子类。 接着我们创建一个音乐混合类SoundMix&#xff0c;将上述三个类翻入其中&#xff0c;通过它管理每个音乐…...

写一个shell脚本,把局域网内,把能ping通的IP和不能ping通的IP分类,并保存到两个文本文件里

写一个shell脚本&#xff0c;把局域网内&#xff0c;把能ping通的IP和不能ping通的IP分类&#xff0c;并保存到两个文本文件里 脚本1 #!/bin/bash #定义变量 ip10.1.1 #循环去ping主机的IP for ((i1;i<10;i)) doping -c1 $ip.$i &>/dev/null[ $? -eq 0 ] &&am…...

VASP软件在第一性原理计算中的应用-测试GO

VASP软件在第一性原理计算中的应用 VASP是由维也纳大学Hafner小组开发的一款功能强大的第一性原理计算软件&#xff0c;广泛应用于材料科学、凝聚态物理、化学和纳米技术等领域。 VASP的核心功能与应用 1. 电子结构计算 VASP最突出的功能是进行高精度的电子结构计算&#xff…...

在ubuntu等linux系统上申请https证书

使用 Certbot 自动申请 安装 Certbot Certbot 是 Let’s Encrypt 官方推荐的自动化工具&#xff0c;支持多种操作系统和服务器环境。 在 Ubuntu/Debian 上&#xff1a; sudo apt update sudo apt install certbot申请证书 纯手动方式&#xff08;不自动配置&#xff09;&…...

调试快捷键 pycharm vscode

目录 调试快捷键 pycharm vscode 修改快捷键 方法 1&#xff1a;通过菜单打开 方法 2&#xff1a;用快捷键打开 调试快捷键 pycharm Resume Program F9 Step Over F8 两个离的比较近&#xff0c;比较方便&#xff0c;比vscode的好。 vscode Continue F5 改为F9 S…...