单流 TCP 100Gbps+ 难题的直观解释

news2025/7/16 7:10:03

关于 400Gbps+ 场景的概括,参见:400Gbps 网络面临的挑战

首先定义规则:

  • 画坐标系,横轴为到达时间,纵轴为服务(处理)时间。
  • 每到达一个任务在横轴对应时间画一条垂直线。
  • 每处理一个任务在纵轴对应时间画一条水平线。
  • 任务到达时间是随机的(或差不多随机的)。
  • 任务处理时间是固定的(几乎是均匀的)。

然后看图:
在这里插入图片描述
若说到达率和服务率相等,在足够久的相同一段时间,垂直线和水平线的数量是相等的,但表示到达的垂直线是实在累加的,而表示处理的水平线中有很多空闲的浪费,所谓逝去时间不可追回。
删掉空闲水平线后,垂直线数量将大于水平线数量,二者的差值就是平均队列长度。因此有:

  • 到达率大于服务率,相同时间内垂直线多于水平线,算上删除的空闲水平线,队列长度趋向无穷。
  • 到达率等于服务率,相同时间内垂直线等于水平线,算上删除的空闲水平线,队列长度趋向无穷。
  • 到达率微小于服务率,相同时间内垂直线少于水平线,算上删除的空闲水平线,队列长度趋向无穷或有限但很大。
  • 到达率远小于服务率,相同时间内垂直线少于水平线,算上删除的空闲水平线,队列长度趋向 0 的速度视二者比值决定。

这大致直观诠释了排队论的那些个公式。有下图做统一展示:
在这里插入图片描述
看这个链接:Towards 800G and 1600G Ethernet,网卡的发展似乎比 DDRx 快,几乎有追赶 CPU 内存带宽的趋势,当网卡速率与 CPU 读写内存的速率趋同甚至超越时,按照上图展示的排队率原理,a >= b,没得玩了。

回到 CPU 处理 TCP 的问题。

TCP 必须保序,故在单 CPU 串行处理比 “多 CPU 并行 + 同步” 的总效能更高。但 CPU 处理 TCP 逻辑时间约定值,以 Linux Kernel TCP 为例,即 tcp_v4_rcv 函数的指令时间(包括内存拷贝时间)约定值,该时间很难压缩到 500ns 以内。

假设 TCP 报文的到达与 CPU 的处理已完全校准,统一达到 100Gbps 的速率。

TCP 报文的到达虽非完全随机分布,但一定不是均匀的,只要两次到达时间稍微错过 1 个处理周期,依照上图解释,排队即将无穷增加,为清空队列,TCP 只能降速。

为实现初始假设,CPU 处理 100Gbps 到达率,需在 100ns 内完成 tcp_v4_rcv 调用(除 CPU 执行冗长的指令,还要加入内存操作,batch 只降低 overhead,但内存时间也相应越久,ZeroCopy 也不例外,稍好,但不完全),CPU 很难完成该任务,初始假设都难,匡论后续随机过程。

难道不能提升 CPU 和内存的能力?当然可以,但 CPU 主频已经接近极限,内存带宽已经上百 GB,还能提升多少呢?正如大家说,不如上专门硬件,FPGA,SmartNIC,… 可为什么非要猛件迎合 TCP 呢?难道不是 TCP 自己的问题吗?

假设 TCP 可以乱序接收,就可以并行多路径传输并行处理 TCP 报文了,1 个 CPU 处理 25Gbps 绰绰有余,20 个 CPU 不就可以处理 500Gbps 了吗?问题不在硬件,问题在 TCP。

再给个形象的类比,工地上工人往楼上接力扔砖。
在这里插入图片描述
Linux Kernel TCP 就是如此这般扔砖接力,换个实现方式就好很多:
在这里插入图片描述
那么,以上就是乱序传输的好处,可以并行处理。然而 TCP 并不具备这能力。

这还不算拥塞控制的副作用,比如丢包,乱序带来的损耗,全在 TCP 保序约束。

放弃 TCP,人们一时半会儿不能接受,且不说新协议部署升级问题,人们从心理上也不能接受,但凡说了这话,大部分人都觉得此人在瞎咧咧,那就不再说,但 TCP 也不是什么都不能做:

  • 调大 MTU,降低 packet overhead。
  • 开启 TSO/LRO,卸载校验和计算,降低 packet overhead。
  • 合入 tcp: defer skb freeing after socket lock is released,减少串行工作量。
  • 合入 tcp: BIG TCP implementation,提高 batch 能力,降低 packet overhead。
  • 开启 Busy Polling,主动接砖(如上图)替换 put user。

单流 TCP 挑战 100Gbps+ 是难成功的,但 100Gbps+ 的网络根本就不是让单流跑满的,那么似乎多线程多流 TCP 跑满 100Gbps+ 也算。但是还有更有趣的,那就是不用 TCP,It’s Time to Replace TCP in the Datacenter 这篇不错,读后感也写过:It’s Time to Replace TCP in the Datacenter 读后 本文接着写点感想。

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

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

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

相关文章

【Linux】文件操作/文件描述符/重定向原理/缓冲区

目录 一.文件的概念 1.什么是内存级文件? 2.什么是磁盘级文件? 3.文件IO的过程 4.linux下, 一切皆文件 二.文件操作(C语言接口) 1.语言级文件接口与系统级文件接口 1).什么是语言级别的文件接口? 2).为什么要有语言级别文件接口, 直接用系统接口不好吗? 3).系统级…

老系统如何重构之最全总结

目录 1. 重构的概念 1.1 重构的定义 1.2 重构的分类 2 为什么重构 3 如何重构 3.1 说服业务方 3.2 确定重构的目标 3.3 老系统的熟悉与梳理 3.4 数据库的重构 3.5 前后端的系统重构 3.6 数据迁移与检查 3.7 系统检查联调测试 3.8 系统切换 1. 重构的概念 1.1 重构…

DlhSoft Gantt Chart Hyper Library for HTML5 Standard Edition

DlhSoft Gantt Chart Hyper Library 甘特图超级库包括一组交互式计划组件,可用于使用纯 JavaScript、TypeScript 或 Angular、React 或 Vue 等框架构建的启用时间线的应用程序 基于 JavaScript 的甘特图 可定制的网格列、汇总的工作分解结构、带有可拖动条和依赖线…

静态HTML网页设计作品 DIV布局家乡介绍网页模板代码---(太原 10页带本地存储登录注册 js表单校验)

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材,DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 家乡旅游景点 | 家乡民生变化 | 介绍自己的家乡 | 我的家乡 | 家乡主题 | HTML期末大学生网页设计作业 HTML:结构 CSS:样式 在…

基于ssm jsp超市在线销售平台的设计与实现

近年来,网络信息技术的迅猛发展,互联网逐渐渗透到人们日常生活中的方 方面面,而给我们的生活带来巨大变化的电子商务正在以前所未有的速度蓬勃发 展,电子商务也成为网络研究与应用的热点之一。网上商店是电子商务的重要方 面&…

【干货】教你在十分钟内编译一个Linux内核,并在虚拟机里运行!

前言 这篇文章将会简单的介绍如何在Linux系统上面,编译一个5.19的内核,然后在QEMU虚拟机中运行。 下载Linux内核源码 首先,我们需要下载Linux的代码: https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.19.10.t…

使用vue互联QQ音乐完成网站音乐播放器

🎶 文章简介:使用vue互联QQ音乐完成网站音乐播放器 💡 创作目的:记录使用APlayer播放器MetingJs实现 在线播放qq音乐、网易云音…等平台的音乐 ☀️ 今日天气:2022-11-19 小雨多云 天空灰蒙蒙的 🥲 &#x…

还在付费使用 XShell?我选择这款超牛逼的 SSH 客户端,完全免费

分享过FinallShell这款SSH客户端,也是xiaoz目前常用的SSH客户端工具,FinalShell使用起来方便顺手,但令我不爽的是tab数量变多的时候FinalShell越来越卡,而且内存占用也比较高。 最近发现一款使用使用C语言开发的跨平台SSH客户端W…

【无人机】基于Matlab的四旋翼无人机控制仿真

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …

uni-app —— 下拉刷新 上拉加载

文章目录 前言一、下拉刷新 1.开启下拉刷新2.监听下拉刷新3.关闭下拉刷新二、上拉加载总结一、下拉刷新 1. 开启下拉刷新 在uni-app中有两种方式开启下拉刷新 需要在 ​​pages.json ​​​ 里,找到的当前页面的pages节点,并在​​style​​​ 选项中开…

这次把怎么做好一个PPT讲清-总体篇

文章目录一、背景二、图表化、图示化三、关键词设计四、版式层级五、逻辑关系图**1)常用逻辑****2)如何让逻辑关系图好看**六、对齐、分组和对比**对齐****分组****分组就是将同类得信息放在一起,靠的更近一点**那么,实现分组原则…

基于S32K144实现TPS929120的基本控制功能

文章目录前言1.TPS92910简介2.硬件调试平台2.1 灯板原理图2.2 参考电流2.3 器件地址3.TPS929120通信协议3.1 物理层3.2 数据链路层3.3 传输层2.3.1 读写时序2.3.2 帧格式说明2.3.3 寄存器lock与unlock2.3.4 输出通道控制4.使用S32K144驱动TPS929104.1 实现命令帧格式4.1.1 写寄…

【云原生】玩转Kubernetes实战(一):Pod、ConfigMap的使用

本文主要是利用Kubernetes 集群搭建出一个 WordPress 网站,用了三个镜像:WordPress、MariaDB、Nginx。 下面是其简单的架构图,用于直观的展示这个系统的内部逻辑关系: 简单来说,就是要通过本地地址http://127.0.0.1…

Spring AOP[详解]

一.需求引入 在开发过程中,总会有一些功能与业务逻辑代码耦合度不强(例如保存日志,提交事务,权限验证,异常处理),我们可以将这些代码提取到一个工具类中,需要使用时在调用工具类来实现. ​ 但是这样也会有弊端,那就是我们的代码已经开发完毕,后期如果需要增加公共功能就需要更…

Pinpoint--基础--03--安装部署

Pinpoint–基础–03–安装部署 前提 使用hd用户登陆 完成基础环境搭建https://blog.csdn.net/zhou920786312/article/details/118212302代码位置 https://gitee.com/DanShenGuiZu/learnDemo/tree/master/pinpoint-learn/demo11、安装环境准备 1.1、jdk1.8 基础环境搭建 包含…

一文搞懂MySQL表字段类型长度的含义

不知道大家第一眼看标题的时候有没有理解,什么是“字段类型长度”,这里我来解释下,就比如我们在MySQL建表的时候,比如下面这个建表语句: CREATE TABLE user (id int(10) DEFAULT NULL,name varchar(50) DEFAULT NULL,…

linux系统离线安装docker(分步法一键法)

1 前言 在有的项目场景中,服务器是不允许连接外网的。此时若想在服务器上安装部署docker容器,就不能采用在线方式了,不过可以采取离线方式进行安装。下面我们就一起看看离线安装的两种办法。 一种是分步安装法,一种是一键安装法…

Python冷知识:如何找出新版本增加或删除了哪些标准库?

“内置电池”是 Python 最为显著的特性之一,它提供了 200 多个开箱即用的标准库。但是,历经了 30 多年的发展,很多标准库已经成为了不得不舍弃的历史包袱,因为它们正在“漏电”! 好消息是,Python 正在进行…

Pinpoint--基础--02--架构设计

Pinpoint–基础–02–架构设计 1、整体架构 1.1、Pinpoint Collector 数据收集模块,接收Agent发送过来的监控数据,并存储到HBase部署在 Web 容器上 1.2、Pinpoint Web 监控展示模块,展示系统调用关系、调用详情、应用状态等,并…

CleanMyMac磁盘空间内存瘦身清理软件使用教程

许多用着Mac系统电脑的朋友们总是卸载不干净电脑垃圾软件,想要把垃圾软件卸载干净,可以尝试使用苹果电脑清理软件CleanMyMac。 经典的电脑深度清理软件——CleanMyMac。由于苹果电脑硬盘售价高昂,且不可以自行安装内存,很多苹果用…