RDMA简介7之RoCE v2可靠传输

      可靠传输技术旨在通过多种方法确保数据包在传输过程中不会丢失或损坏,同时保证数据包按发送顺序到达接收端,其要求在链路发生丢包或网络发生拥塞等情况下能够完全保证数据包的正确性同时尽可能地提高传输速率。RoCE v2协议实现可靠传输的技术手段共有三种,分别为:丢包重传机制、流量控制及拥塞管理。接下来将就这三种技术手段进行详细分析。

(1)丢包重传机制

为了简化设计同时降低成本,RoCE v2协议使用了后退N帧(go-back-N)重传算法处理数据传输过程中产生的丢包。后退N帧重传算法的工作流程如图1所示。

图1 后退N帧重传算法工作流程图

在RoCE v2协议数据包发送过程中,基础传输报文头(Base Transformation Head,BTH)中包含一个唯一包序列编号(Packet Serial Number,PSN),同时接收端也会为每条链路维护一个期望包序列编号(expect Packet Serial Number,ePSN),每当接收端接收到一个数据包,对比其包头中的PSN与本地ePSN,来判断链路上是否存在数据包丢失或数据包乱序等现象。如图1所示,再一次传输过程中PSN为2的数据包丢失,当接收端在接收到PSN为3的数据包后感知到丢包,立即发送包含PSN为2的NACK包,当发送端收到该NACK包后,无论在这之前已经正常发送了多少数据包,都会从丢失的PSN开始重新发送数据。这样的丢包重传机制将导致在丢包率较高的网络环境下,会反复重传大量数据包,性能会随着丢包率的提升急速下滑。这也就是为什么要求RoCE v2工作在二三层无损网络下。

(2)流量控制及拥塞管理

为了保证二层网络无损,需要进行严格的流量控制和拥塞管理。流量控制指通过调整发送端的发送速率,确保接收端能够处理并接收所有数据包。RoCE v2使用了IEEE 802.11Qbb中提出的基于优先级的流量控制算法(PFC)。

在PFC算法中,将网络接口分为八个虚拟通道,如图2所示,每个网卡的逻辑端口被分为八个队列并分别对应一条链路上八个不同优先级。在通信过程中,数据包将根据优先级被分配到八个虚拟队列上。同时PFC算法为每一个优先级的队列设置了相同或不同的ON/OFF阈值,当接收端某个队列的缓冲区深度超过这些阈值时,意味着下游出口或程序可能出现拥塞。PFC会向上游相应的端口发送一个暂停帧,该暂停帧指向特定优先级的流量。当发送设备接收到该暂停帧后,它将在一段时间内停止通过该优先级的虚拟通道发送数据。

图2 PFC算法对应八个虚拟通道示意图

通过对上述过程的分析可以发现,在多交换机的大型数据中心中,某个交换机的入口流量大于出口流量,就会造成拥塞。此时,拥塞会逐步向更上游传递。同时,由于PFC流控机制的颗粒度是优先级通道,可能导致流量分配不公平等问题。为了解决这一问题,RoCE v2协议引入了拥塞控制算法,以缓解链路拥塞,而PFC算法则仅作为兜底机制,尽可能减少其被触发的可能性。

目前RoCE v2协议使用较多的拥塞控制算法为基于显式拥塞通知(ECN)的DCQCN拥塞控制算法。其工作流程如图3所示。

图3 DCQCN拥塞控制算法

在DCQCN工作流程中,发送端网卡被称为响应单元(RP),接收端网卡被称为通知单元(NP)。发送端网卡将每个发送的数据包IP首部中的ECN字段标记为2bit的10,表示支持ECN拥塞控制,此时当交换机的队列超过某一阈值时,开始以一定的概率对到来的报文标记ECN字段为2bit的11。当接收端网卡接收到ECN字段为11的数据包后,发现网络中存在拥塞,则会发送拥塞通知数据包(CNP)到发送端,此时发送端将进入降速及升速流程。

相关视频感兴趣者,请搜B站用户名: 专注与守望
或链接:
https://space.bilibili.com/585132944/upload/video

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

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

相关文章

java33

1.特殊文件 属性文件properties 配置文件xml 注意:XML文件可以直接在浏览器里面打开: 了解知识: 2.日志技术 3.单元测试 注意:点击方法内部再右键运行是测试改方法的,点击类名再右键运行才是测试整个测试类的&#xff…

OSI 七层网络模型

目录 OSI 七层网络模型七层模型1. 物理层(Physical Layer)2. 数据链路层(Data Link Layer)3. 网络层(Network Layer)4. 传输层(Transport Layer)5. 会话层(Session Layer…

Spring Boot 4.0.0 新特性详解:深入解读 Spring Framework 7.0.0

你是否注意到创建新 Spring Boot 项目时出现的最新选项?Spring Boot 4.0.0 预览版现已发布,基于最新的 Spring Framework 7.0.0 🌱。这个版本引入了众多激动人心的新特性,不仅提升了开发效率,改善了空值安全性,还简化了 Web 应用程序的开发流程。本文将深入探讨这些重要…

从0到1构建高并发秒杀系统:实战 RocketMQ 异步削峰与Redis预减库存

🚀从0到1构建高并发秒杀系统:实战 RocketMQ 异步削峰与Redis预减库存 📖一、 简介 在电商、抢票等高并发场景中,秒杀系统面临着“高并发、库存稀缺、易超卖、系统易崩”的严峻挑战。传统的同步处理架构难以支撑海量请求并发下的性…

OpenCV CUDA模块图像变形------对图像进行任意形式的重映射(Remapping)操作函数remap()

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 该函数根据给定的映射表 xmap 和 ymap 对图像进行 任意形式的重映射(Remapping)操作,是 GPU 加速版本的图像几…

PC 端常用 UI 组件库

一、前言 随着企业级应用、后台管理系统、数据平台等项目的不断发展,前端开发已经不再局限于移动端和响应式布局,而是越来越多地聚焦于 PC 端系统的构建。为了提升开发效率、统一设计风格并保障用户体验,使用成熟的 UI 组件库 成为了现代前端…

pikachu靶场通关笔记31 文件包含02之远程文件包含

目录 一、文件包含功能 二、文件包含Vulnerability 二、远程文件包含 三、环境配置 1、进入靶场 2、搭建环境 (1)定位php.ini文件 (2)修改php.ini文件 四、源码分析 五、渗透实战 1、选择科比 2、执行phpinfo &…

QT集成Boost库

在Windows平台上,使用Qt集成Boost库,并基于MSVC编译器在CMake文件中加载,可以按照以下步骤进行配置。 Boost库的编译 如果Boost库未预编译,需要手动编译,解压zip到D:\Library\boost_1_87_0,打开cmd命令行…

MySQL从库复制延迟的监测

目录 ⏱️ 一、原生内置方法❤️ 二、心跳表工具(如pt-heartbeat)⚙️ 三、MySQL 8.0 增强方案📊 四、各方案对比总结💎 五、选择建议 MySQL从库复制延迟的监测是保障数据一致性和读写分离可靠性的关键环节,以下是主流…

slam--最小二乘问题--凹凸函数

最小二乘问题 最小二乘问题标准公式 残差函数,线性和非线性最小二乘 最小二乘问题的两种写法: 目标 找到 x使得预测值 Ax与观测值 b 的残差平方和最小。 范数和范数平方 线性最小二乘 一般形式: 残差 rAx−b是x 的线性函数。 目标函数是…

crackme008

crackme008 名称值软件名称Andrnalin.1.exe加壳方式无保护方式serial编译语言Microsoft Visual Basic调试环境win10 64位使用工具x32dbg,PEid破解日期2025-06-10 脱壳 1. 先用PEid查壳 查到无壳 寻找Serial 寻找flag,用x32dbg打开程序,鼠标右键->…

【C语言】图书管理系统(文件存储版)丨源码+详解

一、系统介绍 这是一个基于C语言开发的终端图书管理系统,采用链表数据结构​​二进制文件存储技术实现。系统具有以下特点: ​双角色系统​:管理员(管理图书)和读者(借阅/归还)​完整功能​&a…

Java求职者面试题解析:Spring、Spring Boot、MyBatis框架与源码原理

Java求职者面试题解析:Spring、Spring Boot、MyBatis框架与源码原理 第一轮:基础概念问题 1. 请解释什么是Spring框架?它的核心特性有哪些? Spring是一个开源的Java/Java EE应用程序框架,用于简化企业级应用开发。其…

【Chipyard】修改Gemmini 中PE的数量

实战目标 PE数量扩大到原来4倍 原来配置 tileRows: Int 1,tileColumns: Int 1,meshRows: Int 16,meshColumns: Int 16, 改后配置 tileRows: Int 1,tileColumns: Int 1,meshRows: Int 32,meshColumns: Int 32, 修改配置 1. 修改gemmini的scala配置文件,用…

TCP客户端进程分割输入输出

创建TCP客户端&#xff0c;创建子进程分割TCP客户端的read功能和write功能&#xff0c;实现分割I/O的目的。加快客户端速率。 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <signal.h> #include …

Wi-Fi 6 在 2.4GHz 频段的速率与优化分析

Wi-Fi 6&#xff08;802.11ax&#xff09;在 2.4GHz 和 5GHz 频段均可工作&#xff0c;理论最高速率可达 1200 Mbps&#xff08;5GHz&#xff0c;80MHz&#xff0c;22 MIMO&#xff09;。但在 2.4GHz 频段&#xff0c;速率受 信道宽度、MIMO、调制方式、干扰、协议开销 影响&am…

WPF--Application.Current.Dispatcher.BeginInvoke

1.代码示例 private void LogInfoList_CollectionChanged(object? sender, NotifyCollectionChangedEventArgs e) {// 直接在这里修改集合会引发递归if (e.Action NotifyCollectionChangedAction.Add){if (logInfoList.Count > 200){logInfoList.RemoveAt(0); // 这里会…

ZooKeeper详解以及应用部署(AI)

ZooKeeper 是一个开源的分布式协调服务框架&#xff0c;旨在为分布式应用提供一致性保障和关键协调功能。其核心设计理念是将复杂的分布式一致性逻辑封装为简单可靠的接口&#xff0c;让开发者专注于业务逻辑而非底层协调难题。以下是其核心要点&#xff1a; &#x1f9e0; 一、…

将MySQL数据库中所有表和字段编码统一改为utf8mb4_unicode_ci

完整操作步骤 1. 首先修改数据库默认字符集 sql ALTER DATABASE 你的数据库名 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; 2. 生成批量修改所有表的SQL语句 sql SELECT CONCAT(ALTER TABLE , table_schema, ., table_name, CONVERT TO CHARACTER SET utf8mb4 C…

jupyterhub的浅浅使用-重点在解决无法登录

jupyterhub的浅浅使用-重点在解决无法登录 jupyterhub的浅浅使用-重点在解决无法登录1、jupyterhub是什么2、创建Dockerfile3、启动容器3.1、生成配置文件jupyterhub --generate-config3.2、运行容器3.3、进入容器配置用户密码3.4、访问127.0.0.1:8000并登录 4、后台创建的用户…