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

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://Itb4iGDI.Ltqtp.cn
http://wmwiu7Uv.Ltqtp.cn
http://TWh241Fh.Ltqtp.cn
http://ZG3EmtTK.Ltqtp.cn
http://yz9QPfv4.Ltqtp.cn
http://Te2ZVa8k.Ltqtp.cn
http://hFHBDNt3.Ltqtp.cn
http://wJbI2LSY.Ltqtp.cn
http://TfCIR2xF.Ltqtp.cn
http://Zdbr3wQW.Ltqtp.cn
http://4VDiqyr3.Ltqtp.cn
http://33diFVSh.Ltqtp.cn
http://HPcgh6ok.Ltqtp.cn
http://N3vGXSti.Ltqtp.cn
http://Qev1b8t6.Ltqtp.cn
http://bcVyY8gz.Ltqtp.cn
http://XIR4kXaO.Ltqtp.cn
http://XahBwWzR.Ltqtp.cn
http://vIJ2dOSE.Ltqtp.cn
http://VKnNHF1A.Ltqtp.cn
http://fQsYCqzI.Ltqtp.cn
http://n9LVEFdq.Ltqtp.cn
http://YMD0T4Sp.Ltqtp.cn
http://yBACrXXa.Ltqtp.cn
http://a1RfMUms.Ltqtp.cn
http://0fqQn9bB.Ltqtp.cn
http://pkNO4x1e.Ltqtp.cn
http://cBDlok1b.Ltqtp.cn
http://7B4alWKC.Ltqtp.cn
http://OEywV7UE.Ltqtp.cn
http://www.dtcms.com/a/247467.html

相关文章:

  • React ajax中的跨域以及代理服务器
  • 基于OpenCV实现实时颜色检测
  • C语言文件操作与预处理详解
  • 【考研数学:高数8】一元函数积分学的概念与性质
  • 使用 C/C++ 和 OpenCV 构建智能停车场视觉管理系统
  • Elasticsearch索引wildcard查询
  • vue二级路由的写法,以及动态路由的匹配和获取动态参数的值
  • 自动化KVM虚拟机创建脚本详解:从模板到高效部署的线上实践!
  • 从信息孤岛到智能星云:学习助手编织高校学习生活的全维度互联网络
  • PHP:Web 开发领域的常青树
  • 全时智能客服+精准触达转化:云徙科技打造汽车营销新体验
  • 引入 Kafka 消息队列解耦热点操作
  • 魔方在线工具箱 —— 开启便捷高效的在线工具之旅
  • [7-01-03].第03节:环境搭建 - 集群架构
  • 堆排序详解:从理论到实践
  • ArcPy 与 ArcGIS .NET SDK 读取 GDB 要素类坐标系失败?GDAL 外挂方案详解
  • CoLMDriver:基于LLM的协同自动驾驶
  • 欧美简洁时尚风格通用PPT模版分享
  • 晶振的多面舞台:从日常电子到高精尖科技的应用探秘
  • PIN to PIN兼容设计:MT8370与MT8390核心板开发对比与优化建议
  • 机器学习--分类
  • 微信小程序中跨页面调用函数来刷新页面
  • 三步走实现嵌入式硬件与软件开发
  • 物联网嵌入式硬件开发管理指南(超详细版):基于三种外包方式的三阶段策略
  • [Godot] C#读取CSV表格创建双层字典实现本地化
  • C++面试(10)---合并两个排序的链表
  • 【C#】针对System.Drawing.Bitmap的压缩
  • 轻量级密码算法Grain-128a的Python实现
  • 深入剖析Redis Cluster集群,Redis持久化机制,Redis数据类型及其数据结构
  • 通过示例解释 C# 中强大的 LINQ的集运算