RDMA相关基础信息

全网最全的RDMA拥塞控制入门基础教程-优快云博客
【RDMA】3. RDMA基本元素和编程基础_rdma的rq中有什么信息-优快云博客
在这里插入图片描述

三种队列

RDMA一共支持三种队列,发送队列(SQ)、接收队列(RQ)、完成队列(CQ)。

其中,SQ和RQ通常成对创建,被称为Queue Pairs(QP)。

RDMA是基于消息的传输协议,数据传输都是异步操作。 RDMA操作其实很简单,可以理解为:

  • Host提交工作请求(WR)到工作队列(WQ): 工作队列包括发送队列(SQ)和接收队列(RQ)。工作队列的每一个元素叫做WQE, 也就是WR。
  • Host从完成队列(CQ)中获取工作完成(WC): 完成队列里的每一个叫做CQE, 也就是WC。
  • 具有RDMA引擎的硬件(hardware)就是一个队列元素处理器。 RDMA硬件不断地从工作队列(WQ)中去取工作请求(WR)来执行,执行完了就给完成队列(CQ)中放置工作完成(WC)。

从生产者-消费者的角度理解就是:

  1. Host生产WR, 把WR放到WQ中去
  2. RDMA硬件消费WR
  3. RDMA硬件生产WC, 把WC放到CQ中去
  4. Host消费WC
    在这里插入图片描述

RDMA硬件不断地从工作队列(WQ)中去取工作请求(WR)来执行,执行完了就给完成队列(CQ)中放置工作完成通知(WC)。这个WC意思就是Work Completion。表示这个WR RDMA请求已经被处理完成,可以从这个Completion Queue从取出来,表示这个RDMA请求已经被处理完毕。

RDMA通信基于三条队列(SQ, RQ和CQ)组成的集合。 其中,发送队列(SQ)和接收队列(RQ)负责调度工作,他们总是成对被创建,称之为队列对(QP)。当放置在工作队列上的指令被完成的时候,完成队列(CQ)用来发送通知。

当用户把指令放置到工作队列的时候,就意味着告诉HCA那些缓冲区需要被发送或者用来接受数据。这些指令是一些小的结构体,称之为工作请求(WR)或者工作队列元素(WQE)。 WQE的发音为"WOOKIE",就像星球大战里的猛兽。

HCA:在Infiniband/RoCE规范中,将RDMA网卡称为HCA,全称为Host Channel Adapter(主机)通道适配器 (HCA)

一个WQE主要包含一个指向某个缓冲区的指针。一个放置在发送队列(SQ)里的WQE中包含一个指向待发送的消息的指针。一个放置在接受队列里的WQE里的指针指向一段缓冲区,该缓冲区用来存放待接受的消息。
在这里插入图片描述

RDMA是一种异步传输机制。因此我们可以一次性在工作队列里放置好多个发送或接收WQE。HCA将尽可能快地按顺序处理这些WQE。当一个WQE被处理了,那么数据就被搬运了。 一旦传输完成,HCA就创建一个完成队列元素(CQE)并放置到完成队列(CQ)中去。 相应地,CQE的发音为"COOKIE"。

RDMA收发过程

First Step

系统A和B都创建了他们各自的QP的完成队列(CQ), 并为即将进行的RDMA传输注册了相应的内存区域(MR)。 系统A识别了一段缓冲区,该缓冲区的数据将被搬运到系统B上。系统B分配了一段空的缓冲区,用来存放来自系统A发送的数据。
在这里插入图片描述

Second Step

系统B创建一个WQE并放置到它的接收队列(RQ)中。这个WQE包含了一个指针,该指针指向的内存缓冲区用来存放接收到的数据。系统A也创建一个WQE并放置到它的发送队列(SQ)中去,该WQE中的指针执行一段内存缓冲区,该缓冲区的数据将要被传送。
在这里插入图片描述

Third Step

系统A上的HCA总是在硬件上干活,看看发送队列里有没有WQE。HCA将消费掉来自系统A的WQE, 然后将内存区域里的数据变成数据流发送给系统B。当数据流开始到达系统B的时候,系统B上的HCA就消费来自系统B的WQE,然后将数据放到该放的缓冲区上去。在高速通道上传输的数据流完全绕过了操作系统内核。
在这里插入图片描述

Forth Step

当数据搬运完成的时候,HCA会创建一个CQE。 这个CQE被放置到完成队列(CQ)中,表明数据传输已经完成。HCA每消费掉一个WQE, 都会生成一个CQE。因此,在系统A的完成队列中放置一个CQE,意味着对应的WQE的发送操作已经完成。同理,在系统B的完成队列中也会放置一个CQE,表明对应的WQE的接收操作已经完成。如果发生错误,HCA依然会创建一个CQE。在CQE中,包含了一个用来记录传输状态的字段。
在这里插入图片描述

我们刚刚举例说明的是一个RDMA Send操作。在IB或RoCE中,传送一个小缓冲区里的数据耗费的总时间大约在1.3µs。通过同时创建很多WQE, 就能在1秒内传输存放在数百万个缓冲区里的数据。

ECN

[RoCE]拥塞控制机制(ECN, DC-QCN) - blackwall - 博客园
ECN(Explicit Congestion Notification)是 IP 头部 Differentiated Services 字段的后两位,用于指示是否发生了拥塞。它的四种取值的含义如下:
在这里插入图片描述

代码状态解释
00None ECN-Capable Transport表示发送方不支持ECN
01ECN Capable Transport表示发送方支持ECN
10ECN Capable Transport表示发送方支持ECN
11Conjestion Encountered表示发生了拥塞

部署 ECN 功能一般需要交换机同时开启 RED。如果通信双方都支持 ECN(ECN 为 01 或者 10),当拥塞出现时,交换机会更新报文的 ECN 为 11(Congestion Encountered),再转发给下一跳。接收方可以根据 ECN 标志向发送方汇报拥塞情况,调节发送速率。

RED,即 Random Early Drop,是交换机处理拥塞的一种手段。交换机监控当前的队列深度,当队列接近满了,会开始随机地丢掉一些包。丢弃包的概率与当前队列深度正相关。随机丢弃带来的好处是,对于不同的流显得更公平,发送的包越多,那么被丢弃的概率也越大。

当 RED 和 ECN 同时开启,拥塞发生时交换机不再随机丢包,而是随机为报文设置 ECN。

ECN原理

ECN拥塞标记概率是队列长度的概率函数,如下图所示。队列长度的两个门限值定义了标记概率。当队列长度低于门限值下限时,ECN位不会被标记。当队列长度超过门限值上限时,所有从该队列传输的网络包都会被进行ECN标记。当队列长度处于两个门限值之间时,数据包会以与队列长度线性增长的概率被进行ECN标记。
在这里插入图片描述

带有ECN标记的数据包(CE)被传播到接收方的网卡上。接收方网卡创建一个CNP并把它发送给ECN所标记的数据包的发送方。CNP数据包包括被标记的QP的信息。当CNP被发送方网卡收到时,它会基于一个特定的算法来降低指定QP的传输速率。
在这里插入图片描述

DCTCP

DCTCP(Data Center TCP),扩展TCP的拥塞控制算法,在交换机中使用显式拥塞通知(ECN)来检测并响应网络拥塞。

DCTCP的一些特点

  1. 拥塞检测:DCTCP使用一种称为ECN(显式拥塞通知)的机制来检测网络中的拥塞。当网络设备(如交换机)检测到拥塞时,它可以向发送方发送ECN标记,告知发送方网络出现拥塞。这比传统TCP的拥塞检测要更快,因为它不需要等待丢包。
  2. ECN标记反馈:当DCTCP接收到ECN标记,它会以更低的速率发送数据,以减轻网络拥塞。这种反馈机制使得DCTCP可以更快地适应拥塞情况,减少了数据中心网络中的拥塞峰值。
  3. 拥塞窗口调整:DCTCP使用了一种称为“拥塞响应函数”的算法来计算发送端的拥塞窗口大小。它根据检测到的ECN标志的数量来调整拥塞窗口的大小。当ECN标志出现时,拥塞窗口减小,以减缓数据流量,减轻网络拥塞。这使得DCTCP能够更快速地响应拥塞信号,而不必等待数据包丢失,这是传统TCP拥塞控制的问题之一。
  4. 部署要求:要部署DCTCP,需要支持ECN的网络设备,以及运行DCTCP协议栈的主机。此外,需要适当配置和调整DCTCP的参数,以便最大化其性能。

PFC

RoCEv1和v2是基于ifinite band的解决方案,数据在ifinite band交换时需要无损lossless,因此RoCE也需要交换机支持lossless。但其中RoCEv1不需要PFC(Priority Flow Control),而RoCEv2需要。因为RoCEv1只支持链路层转发,只考虑同一交换机两个端口之间转发的情况,由于ifinite band交换机本身支持无损网络,因此不需要PFC。但RoCEv2支持第三层IP路由,要考虑跨交换机转发数据,一旦跨交换机就没法保证无损了,因此需要PFC功能保证无损。也就是说PFC保证链路lossless,让RDMA能在三层下正常运行。

让RDMA仅仅运行起来是不够的,实际环境下网络中基本的拥塞问题仍需解决。RoCEv2使用了DCQCN作为拥塞控制算法,算法使用的拥塞反馈信号主要是ECN(Explicit Congestion Notification)。因此使用ECN目的是解决网络拥塞,提高RDMA的传输性能。

RoCE是一个允许在以太网上执行RDMA的网络协议,可分为RoCE v1和RoCE v2,其中RoCE v2使用了PFC技术和ECN技术,使用的拥塞控制算法是DCQCN。

DCQCN

数据中心量化拥塞通知 (DCQCN) 是 ECN 和 PFC 的组合,可支持端到端无损以太网。ECN 有助于克服 PFC 的限制,实现无损以太网。DCQCN 背后的理念是允许 ECN 在拥塞时降低传输速率,从而尽量缩短触发 PFC 的时间,从而完全停止流量,从而控制流量。

DCQCN 正确操作需要平衡两个冲突要求:

  1. 确保 PFC 不会太早触发,也就是说,在让 ECN 有机会发送拥塞反馈之前,使流量变慢。
  2. 确保 PFC 未因太晚而触发,因此导致数据包丢失(由于缓冲区溢出)。

有三个重要参数需要正确计算和配置,才能满足上述关键要求:

  1. Headroom Buffers
    发送至上游设备的 PAUSE 消息需要一些时间到达并生效。为避免丢包,PAUSE 发送方必须保留足够的缓冲区,以处理在此期间可能收到的任何数据包。这包括发送 PAUSE 时正在传输的数据包,以及上游设备在处理 PAUSE 消息时发送的数据包。
  2. PFC Threshold
    这是一个入口阈值。这是在将 PAUSE 消息发送至上游设备之前入口优先级组可以增长为的最大大小。每个 PFC 优先级在每个入口端口都有自己的优先级组。在每个入口端口按优先级组设置 PFC 阈值。
  3. ECN Threshold
    这是一个出口阈值。ECN 阈值等于 WRED 开始填充级别值。一旦出口队列超过此阈值,交换机将开始为该队列中的数据包进行 ECN 标记。DCQCN 要有效,此阈值必须低于入口 PFC 阈值,以确保 PFC 不会在交换机有机会使用 ECN 标记数据包之前触发。设置非常低的 WRED 填充级别可提高 ECN 标记概率。例如,使用默认共享缓冲区设置,WRED 开始填充级别为 10%可确保标记无丢失数据包。但是,如果填充级别较高,则 ECN 标记的概率降低。例如,如果两个入口端口流量无损地发到同一出口端口,并且 WRED 启动填充级别为 50%,则不会进行 ECN 标记,因为将首先满足入口 PFC 阈值。

DCQCN运行过程

在这里插入图片描述

发送方(RP)以最高速开始发送,沿途过程中如果有拥塞,会被标记ECN显示拥塞,当这个被标记的报文转发到接收方(NP)的时候,接收方(NP)会回应一个CNP报文,通知发送方(RP)。收到CNP报文的发送方(RP),就会开始降速。当发送方没有收到CNP报文时,就开始又提速了,上述过程就是DCQCN的基本思路。

拥塞点操作

在这里插入图片描述

当队列长度超过ECN标记阈值时,在数据包ECN位上标记,其概率与队列长度成比例。 这些标记的数据包是显示发生拥塞的信号。 PFC用于防止数据包丢失。当队列长度超过PFC阈值时,PFC数据包将发送到上游端口以阻止它们发送。

接收端操作

当流的接收端接收数据包时,它检查其ECN位。如果一个接收端接收到带有ECN标记的分组,则它向流的发送端发送拥塞通知分组CNP,并且在下一个固定的时间段内,例如50微秒,它将不再针对相同的流发送CNP。

CNP是拥塞信号,通知发送者控制流速。

发送端操作

当流量发送端接收到CNP时,它会按比例减少流量。当发送方未在固定时间内继续收到CNP时,它会根据其先前的状态增加流量。

DCQCN三种加速阶段

加速有三种阶段,如QCN,快速恢复,加性增加和超增加。
在快速恢复中,发送方将流速增加到上次切割前的速率。快速恢复将持续到,恢复到目标速率
在加性增长中,流速相加地增加,也就是说,使用固定的增加步骤。
在超级增长中,增加步骤随着增加的时间增长而增长。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值