弄巧成拙的 PFC(Priority-based Flow Control)

先说几句车轱辘话,TCP 性能低,所以 RDMA,以太网丢包,所以 PFC,网卡不能太复杂,所以 GBN…

HPC,AI 对吞吐,时延要求非常高,同时需要更多计算资源,而 TCP 处理需要大量计算资源,复杂逻辑意味着高时延,RDMA 旨在将网络逻辑卸载到网卡硬件,解放了 CPU,同时降低了时延。这是伏笔。

InfiniBand 满足 RDMA 的需求,但复杂且昂贵,需要专用 IB 链路层支撑,而 RoCE 旨在普遍的以太网上部署 RDMA,但以太网是有损网络,会拥塞而丢包,丢包重传会增加网卡实现的复杂性同时增加时延,抵消 RDMA 的优势。这是问题。

硬件难以实现复杂的丢包检测和重传机制,因此由网络保证不会丢包,同时网卡以 GBN 兜底,就是 PFC + GBN。这是解法。

看这一路,完全没从第一性原则解决问题,而几乎全是 bugfix 的修补。虽然旨在替换 TCP 的低效并弥补以太网的松散,但根本上还是在学 TCP,学以太网,没新花样。

简单说几个问题。

PFC 阻塞树蔓延。RDMA 网络从一开始可能就没有考虑大规模扩展性,不然不会采用昂贵复杂的 IB,但凡小规模策略扩展到大规模场景,一定会出问题。城邦制度无法统治帝国,因此罗马共和国必须变成罗马帝国。阻塞树一旦蔓延生长,死锁理论上几乎不可避免,概率高低而已。举个最简单的例子,蔓延时间尺度越大,遭遇路由重收敛概率越大,暂时的环路足以让阻塞树成环,锁死整个网络。

于是,又将出现一系列解决死锁的算法,膏药又糊上了一层。

拥塞控制算法受骗。PFC 基于优先级队列 pause 上游,而不是基于流,因此会出现队头阻塞问题,上游受连累的拥塞无关流被阻塞而造成时延增加,端到端拥塞控制算法会因此而受骗,采取措施反制拥塞。另一方面,如果算法没有受骗,不做反制,那么假拥塞也会变成真拥塞,虽然暂时是拥塞无关流,但被 pause 后相当于人为被拥塞。

如何做?只对拥塞源 mark 标记,不 mark 受害流显然不可行,这样会让假拥塞变真,因此只能共克时艰。换个相反的思路,扩展标记状态空间,对受害流 mark 一个不一样的 “受害” 标记,受害 sender 暂时抑制发送,但当拥塞缓解后,马上 undo,而不是真的做拥塞控制。显然这只是我拍脑袋的想法,说到底还是把戏。

即便不重构整个网络,只要从本质出发,问题的解法也会比 PFC 更高尚。

不要指望网络无损,因为不丢包不可能,丢包原因又不止拥塞一种,PFC 显然无法覆盖所有场景,问题的核心应集中在丢包恢复,而拥塞控制完全从丢包解耦,拥塞不与丢包关联,自然就是另一个独立问题。

先不管如何实现,丢包检测靠 NACK,拥塞通知靠源抑制,就是非常第一性的做法,其它的或多或少都在学 TCP,而 TCP 的第一代显然是重实现轻设计的 tradeoff。

无论 NACK 还是源抑制都被标准化委员会负面评价过,但这种评价的背后也是基于 tradeoff,足够就是最好。

基于本质去做设计,一切都是自然而然。与 PFC 相比,QCN,DCQCN 就高尚多了,在不增加新机制前提下,提高了信息精度,不要主机计数,交换机直接将计数结果返回,再与此相比,HPCC 显然就有些过头了,因为它祈求的信息过多了,不得不依赖新机制。

说到 NACK,它最初作为 TCP 的备选方案,思想与 TCP 最终确定的积累确认皆然相反,但在争论过程中败下阵来仅因为积累确认实现的简洁和高效,适应了 1970 年代的网络环境,足够就是最好,但还可以更好。自然,有了 NACK 便不需要 GBN(还有个有趣的 GB0),也就没有 SACK 实现复杂的问题了,一个 bitmap 即可丝滑完成整个过程,TTPoE 对此还有更简单的方案。

我们看到,诸多非 TCP 新传输协议都在喷 TCP 的同时又在学 TCP,很少有彻底解决 TCP 问题的。虽然 QUIC 也有诸多限制,但 QUIC 将 packet id 从字节流 sequence 中分离就是一个非常简单但彻底的修改,一下子就解决了重传歧义问题,扫除了大量 TCP 中的启发式把戏,仅仅就是增加了一个字段。

我们或许已经看到,各大厂已经有将 SACK 移植到自研网卡的案例了,这显然还是在学 TCP。

至于源抑制,从交换机引线接入每一个端主机以及其它交换机,单独做带外控制面,这自然而然就是转控分离的 SDN,而源抑制报文只是传输的控制报文的一种。源抑制之所以被负面评价(参见 RFC896 “Congestion Control in IP/TCP Internetworks” Nagle 的评价),核心在于广域网的不确定性和无标准化,然而我们现在设计的是数据中心网络,而非广域网。与此类似,SDN 不适用广域网,也是一样的考虑。

再说实现,都砸钱雇人折腾那么大动静了,又是移植又是重构的,拉一个带外控制面很难吗,重新实现一个 NACK 机制很难吗?

总之,以太网是大势所趋,不要试图改变以太网的有损本质,这正是它成功的原因,折腾一圈把以太网变成类 IB,还不如直接用 IB。以太网固然有损,需要主机弥补损失,要做的事情只有两个:

  • 减少丢包
  • 及时重传

减少丢包的方式分两个方法,用更高质量的设备和线缆,减少误码率,用更大带宽(或更大 buffer 吸收更多 incast?不建议,但赞成)的设备配合源抑制,减少拥塞丢包,而及时重传的方案也没太多花活儿,NACK 足够,但不要猜,如果网络丢包非常罕见,GBN 也不是不可。

此前有朋友问不开启 SACK 的 TCP 能不能做 RACK,这问题拧巴了,但世上大部分问题都是让你知其不可为而为之,然后就有了各种把戏方案,这样或那样,类似 pacing 或 burst,你永远把握不好那个 “度”。其实这个问题只要修改 TCP 的一个细节就能解决,让 receiver 回复 ACK 时,timestamp 的 tsecr 永远携带最近收到数据的 tsval 即可,看似解法简单,但谁知道会带来别的什么新问题呢,因为这不是本质。

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

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

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

相关文章

指标+AI+BI:构建数据分析新范式丨2024袋鼠云秋季发布会回顾

10月30日,袋鼠云成功举办了以“AI驱动,数智未来”为主题的2024年秋季发布会。大会深度探讨了如何凭借 AI 实现新的飞跃,重塑企业的经营管理方式,加速数智化进程。 作为大会的重要环节之一,袋鼠云数栈产品经理潮汐带来了…

Windows配置NTP时间同步

Windows下实现NTP时间同步 1、Windows时间服务(W32Time)2、Windows 时间同步的工作原理3、配置和管理 Windows 时间同步3.1 命令行工具:w32tm3.2 控制面板中的设置 4. 高级设置(Windows Server 环境)5.调整时间同步的间隔5.1 通过组策略调整时…

系统安全第七次作业题目及答案

一、 1.RBAC0 RBAC1 RBAC2 RBAC3 2.属性 身份标识 3.接入访问控制 资源访问控制 网络端口和节点的访问控制 二、 1.B 2.A 3.ABE 4.BCD 5.ABC 三、 1. 答:基于属性的访问控制(ABAC)是通过对实体属性添加约束策略的方式实现主、客体之…

Golang进阶

1.面向对象 1.1.golang语言面向对象编程说明 Golang 也支持面向对象编程(OOP),但是和传统的面向对象编程有区别,并不是纯粹的面向对象语言。所以我们说 Golang 支持面向对象编程特性是比较准确的。Golang 没有类(class),Go 语言的结构体(st…

Node(节点)、Menu(菜单) 和 Tab(标签页)之间的关系

在系统开发中,尤其是在涉及到前端界面设计和后台管理系统时,我们经常会看到 Node(节点)、Menu(菜单) 和 Tab(标签页) 这几个概念。这些概念有不同的用途和功能,理解它们之…

Python数据分析案例64——杭帮菜美食探索数据分析可视化

案例背景 杭州是真没啥美食呀.....但是 总是还是有好吃的店家,于是就发挥专业长处,进行一下分析,看看杭帮菜的一些特点。。例如看看品种分布啊,类型分布啊,行政区的分布啊,店铺评分的一些分布啊&#xff0…

基于SSD模型的路面坑洼检测系统,支持图像、视频和摄像实时检测【pytorch框架、python源码】

更多目标检测和图像分类识别项目可看我主页其他文章 功能演示: 基于SSD模型的路面坑洼检测系统,支持图像、视频和摄像实时检测【pytorch框架、python源码】_哔哩哔哩_bilibili (一)简介 基于SSD模型的路面坑洼检测系统是在 Py…

《Python编程实训快速上手》第四天--字符串操作

一、处理字符串 1、单引号和双引号 Python中单双引号均可以表示字符串,区别在于: 1、双引号中可以使用到单引号 2、单引号字符串中如果要使用单引号,要使用到转义字符 \ \ \t \n \\ 原始字符串 在开始的引号前加r&#xf…

泷羽sec学习打卡-Windows基础命令

声明 学习视频来自B站UP主 泷羽sec,如涉及侵权马上删除文章 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 关于windows的那些事儿-Base 一、Windows-BaseWindows有哪些版本呢,有什么区别呢&#xff1f…

Node.js——fs模块-文件夹操作

1、借助Node.js的能力,我们可以对文件夹进行创建、读取、删除等操作 2、方法 方法 说明 mkdir/mkdirSync 创建文件夹 readdir/readdirSync 读取文件夹 rmdir/rmdirSync 删除文件夹 3、语法 其余的方法语法类似 本文的分享到此结束,欢迎大家评论区…

VMware Fusion和centos 8的安装

资源 本文用到的文件:centos8镜像 , VMware 软件包 , Termius 文件链接: https://pan.baidu.com/s/1kOES_ZJ8NGN-BnJl6NC7Sg?pwd63ct 安装虚拟机 先 安装 vmware ,然后打开,将下载的 iso 镜像拖入 拖入镜像文件iso Continue, 然后随便选…

【嵌入式开发——ARM】1ARM架构

嵌入式领域,使用ARM架构的芯片公司可不占少数吧,intel的x86架构主要占据PC、服务器市场,ARM架构主要占据移动市场。x86架构和ARM架构不同的主要原因,是背后使用的计算机指令集不同。计算机有自己的语言系统(汇编&#…

LabVIEW扫描探针显微镜系统

开发了一套基于LabVIEW软件开发的扫描探针显微镜系统。该系统专为微观尺度材料的热性能测量而设计,特别适用于纳米材料如石墨烯、碳纳米管等的研究。系统通过LabVIEW编程实现高精度的表面形貌和热性能测量,广泛应用于科研和工业领域。 项目背景 随着纳…

JavaScript day01 笔记

一、引入方式 JavaScript 程序不能独立运行&#xff0c;它需要被嵌入 HTML 中&#xff0c;然后浏览器才能执行 JavaScript 代码。通过 script 标签将 JavaScript 代码引入到 HTML 中 1️⃣内部 通过 script 标签包裹 JavaScript 代码&#xff08;一般就写在</script>的…

【Git】Liunx环境下Git的使用:“克隆,提交,推送“

目录 一、常用参数 二、我们为什么要使用Git&#xff1f; 三、创建远程仓库 第一步&#xff1a;创建对应代码托管平台账号。 第二步&#xff1a;在托管平台创建仓库 第三步&#xff1a;完善仓库内容&#xff08;选择性使用&#xff09; 开源和私有 四、克隆远程仓库到本…

机器人零位、工作空间、坐标系及其变换,以UR5e机器人为例

机器人中的主要坐标系 在机器人中&#xff0c;常用的坐标系包括&#xff1a; 基坐标系&#xff08;Base Frame&#xff09;&#xff1a;固定在机器人基座上的坐标系&#xff0c;用于描述机器人的整体位置和方向&#xff0c;是其他所有坐标系的参考点。 连杆坐标系&#xff08…

JavaSE:运算符 (学习笔记)

目录 一&#xff0c;算术运算符 【1】 共同点&#xff1a; 【2】 不同点&#xff1a; 二&#xff0c;关系运算符 三&#xff0c;逻辑运算符 2&#xff0c;&和&&的区别和联系 { |和||的区别和联系 }---两题类似 四&#xff0c;赋值运算符 五&#xff0c;拓展…

C++中类的默认成员函数

默认成员函数 1.构造函数2.析构函数3.拷贝构造函数4.赋值运算符重载4.1运算符重载4.2赋值运算符重载 #mermaid-svg-oipiwg9stvONvYK0 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-oipiwg9stvONvYK0 .error-icon{f…

游戏引擎学习第一天

视频参考: https://www.bilibili.com/video/BV1zGDCYHErA/ 创建一个保存项目的路径 VS的安装略过&#xff0c;个人自行百度 1. vs 创建第一个CMAKE的窗口项目 game.cpp 修改如下的代码 到https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-winmain 去…

视频播放相关的杂记

基于QT FFMPEG设计一款 RTMP协议推流、视频录制软件 实现的功能&#xff1a; &#xff08;1&#xff09;将摄像头视频流 麦克风音频流合并&#xff0c;并推到流媒体服务器 &#xff08;2&#xff09;将摄像头视频流 麦克风音频流保存到本地磁盘 基于QtFFMPEG设计一款RTM…