RDMA优化整理(一)

简介: 简要的介绍了下RDMA的背景,并给出了一些RDMA编程优化技巧



<!-- more -->

RDMA背景资料

InfiniBand 是一种广泛用于高性能计算系统的交换结构网络。 RoCE 是一种相对较新的网络协议,允许通过以太网直接访问内存。 InfiniBand 和 RoCE NIC 通过在硬件中实现多层网络堆栈(传输层到物理层)并提供 RDMA 和内核旁路来实现低延迟。 在本节中,我们概述了本文其余部分中使用的 RDMA 功能和术语。

RDMA的时延:

The typical end-to-end ( 1/2 RTT) latency in InfifiniBand/RoCE is 1 µs while that in modern classical Ethernet-based solutions [2, 18] is 10 µs.

Mellanox 的 40 Gbps ConnectX-3 RNIC 的成本约为 500 美元,而 10 Gbps 以太网适配器的成本在 300 到 800 美元之间。 RoCE 的引入将进一步提升 RDMA 的存在,因为它将允许套接字应用程序与 RDMA 应用程序在同一网络上运行。

用户空间程序使用称为verbs的函数直接访问 RNIC。 有几种类型的verbs。 与这项工作最相关的是 RDMA 读取 (READ)、RDMA 写入 (WRITE)、send和receive。 verbs由应用程序发布到 RNIC 内部维护的队列中。

队列总是成对存在:发送队列和接收队列形成队列对 (QP)。 每个队列对都有一个关联的完成队列 (CQ),RNIC 在verbs执行完成时填充该队列。

动词构成了RNIC提供的接口的语义定义。有两种类型的动词语义:内存语义(RDMA verbs)通道语义(messaging verbs.)

通道语义(post / send):SEND的负载被写到由接收者提前发布的RECV指出的远端地址。与此类似的是一个非缓冲套接字(unbuffered sockets )实现,它需要在数据包到达之前调用read()。

Verbs 通常被发送到 QP 的发送队列(除了 RECV,它被发送到接收队列)。 要将Verbs 发布到 RNIC,应用程序会调用用户态 RDMA 驱动程序。 然后,驱动程序在主机的内存中准备一个工作队列元素 (Work Queue Element ,WQE),并通过程序化 IO (Programmed IO,PIO) 在 RNIC 上敲响门铃。 对于 ConnectX 网卡和更新的 RNIC网卡,门铃包含整个 WQE [27]。

对于 WRITE 和 SEND 动词,WQE 需要和被发送的数据相关联。 最大可以在 WQE 中内联 PIO 大小(在我们的设置中为 256)的有效负载,否则 RNIC 会使用 DMA 来获取被发送的数据。  因为inlined post不涉及 DMA 操作,从而减少延迟并增加小负载的吞吐量。

当RNIC完成与谓词关联的网络步骤时,它通过DMA写将一个完成事件(completion event)推到与QP对相关联完成队列(CQ)。使用完成事件会增加RNIC的PCIe总线的额外开销。这种开销可以通过使用选择性信号selective signaling)来减少。当使用大小为S的选择性标记发送队列时,最多为S−1的连续动词可以取消标记,也就是说,不会为这些动词推送一个完成事件。接收队列不能有选择地发信号通知。 由于 S 很大(~128),我们交替使用术语“选择性信号”和“无信号”。

RDMA的传输类型

RDMA传输可以连接(connected)或非连接的(unconnected)。一个已连接的传输需要两个彼此专用通信的队列对之间的连接。当前的RDMA实现支持两种主要类型的连接传输:可靠连接(RC)和不可靠连接(UC)。UC中没有报文接收的确认;报文可能会丢失,受影响的消息可能会丢失。由于UC不生成ACK/NAK报文,所以产生的网络流量比RC少。

在非连接的传输中,一个队列对可以与任意数量的其他队列对进行通信。 当前的实现仅提供一种未连接的传输:不可靠数据报 (Unreliable Datagram,UD)。 RNIC 在其队列对上下文缓存中维护每个活动队列的状态(The RNIC maintains state for each active  queue in its queue pair context cache),因此对于具有一对多拓扑的应用程序,数据报传输可以更好地扩展。

InfiniBand和RoCE采用无损链路级流控制,即基于信用的流控制优先级流控制即使使用不可靠传输(UC/UD),数据包也不会因为缓冲区溢出而丢失。丢包的原因包括线路误码和硬件故障,这种情况非常罕见。因此,我们的设计,类似于Facebook和其他[22]所做的选择,牺牲传输级重传以换取快速的通用情况下的性能,而代价是罕见的应用级重试。因此,我们的设计,类似于Facebook和其他[22]所做的选择,牺牲transport-level的重传以换取快速的通用情况下的性能,而代价是罕见的application-level重试。

有些传输类型只支持可用verbs的子集

image.png

优化1:使用WRITE而不是READ

WRITE比READ有着更低的延迟

RDMA write比RDMA write有着更高的吞吐量,因为响应者不需要发回数据包,它的 RNIC 执行较少的处理,因此可以支持比 READ 更高的吞吐量。

一个 unsignaled WRITE 的延迟是大概是 READ 的一半,这使得用两个写替换一个读成为可能,而使用两个WRITE要比使用一个Read给我们带来吞吐量的提升(时延是时延,吞吐量是吞吐量)。

Unsignaled verbs:对于高达 64 字节的有效载荷,ECHO 的延迟接近 READ 延迟,这证实了单向 WRITE 延迟大约是 READ 延迟的一半。对于较大的 ECHO,由于通过 PIO 写入 RNIC 所花费的时间,延迟会增加。

Signaled verbs: 图 2 中的实线显示了三个信号动词 - WRITE、READ 和带内联的 WRITE (WR-INLINE) 的延迟。 READ 和 WRITE 的延迟相似,因为经过的网络/PCIe 路径的长度相同。通过避免一次 DMA 操作,内联显着减少了数据量较小的 WRITE 的延迟。

WRITE比READ有着更高的吞吐量

入站流量:

多个远程机器(客户机)向一台服务器发出RDMA操作。可靠的写比读提供了明显更高的吞吐量,尽管它们的InfiniBand路径相同,这是因为:WRITE在RDMA和PCIe级别上需要更少的状态维护,因为发起者不需要等待响应。然而,对于READ,请求必须在发起者的内存中维护,直到响应到达。

同样,在在PCIe级别,RDMA READ是使用non-posted的事务执行的,而RDMA WRITE使用开销更低的posted事务。

  • 入站 READ 需要 RNIC 进行 DMA 读取,然后是数据包传输,
  • 入站 WRITE 仅需要 DMA 写入。

出站流量:

对于较小的大小,内联写和发送的出站吞吐量明显高于读。

对于大容量,所有WRITE和SEND变体的吞吐量都小于READ,但绝不会小于READ吞吐量的50%。

  • 出站 READ 涉及 PIO 操作、数据包传输、数据包接收和 DMA 写入
  • 出站 WRITE(内联和通过 UC)避免了最后两个步骤。

ECHO流量:

READ 受到 RNIC 处理能力的限制。这正如预期的那样。

这种方法不随连接数的变化而变化。HERD使用RDMA写(通过UC)处理请求,发送(通过UD)处理响应。

优化2:使用UD作为response

Outbound WRITEs scale poorly:

解释:对于许多活动队列对,每个提交的谓词都可能导致缓存丢失,严重降低性能

Inbound WRITEs scale well:

解释:未完成动词操作的排队是在请求RNIC(客户端的RNIC)上执行的,很少在响应RNIC(服务端的RNIC)上保持状态。因此,响应的RNIC可以支持更大数量的活动QP对,而不会导致缓存丢失。更高的请求者开销被摊平了,因为客户机的数量超过了服务器。

出站写伸缩性很差,只是因为rnic必须管理许多连接的队列对。如果我们使用连接传输(RC/UC/XRC),这个问题就无法解决,因为它们在MS上需要至少与客户机数量相同的队列对。因此,扩展出站通信要求使用数据报。UD传输支持一对多的通信,即单个UD队列可以用于向多个远程UD队列发出操作。在高性能应用程序中使用UD的主要问题是它只支持消息传递谓词,而不支持RDMA谓词。

吞吐量下降可归因于以下几个因素:

Send/Send With Immediate

The send operation allows you to send data to a remote QP’s receive queue. The receiver must have previously posted a receive buffer to receive the data. The sender does not have any control over where the data will reside in the remote host.

Optionally, an immediate 4 byte value may be transmitted with the data buffer. This immediate value is presented to the receiver as part of the receive notification, and is not contained in the data buffer.

可选的,一个4byte的数值可以不使用data buffer传递给远端,这个立即数会随着接受方的通知被获得,并且不需要包含在数据缓冲区中。

Receive

This is the corresponding operation to a send operation. The receiving host is notified that a data buffer has been received, possibly with an inline immediate value. The receiving application is responsible for receive buffer maintenance and posting.

收到的一个receive可能会包含有一个 inline 的 立即数

RR (Receive Request) A WR which was posted to an RQ which describes where incoming data using a  send opcode is going to be written. Also note that a RDMA Write with immediate  will consume a RR.

注意,不光是以send opcode发送的数据会消耗 RR,一个带有立即数的RDMA write操作也会消耗一个RR。

RDMA Write / RDMA Write With Immediate

Similar to RDMA read, but the data is written to the remote host. RDMA write operations are performed with no notification to the remote host. RDMA write with immediate operations, however, do notify the remote host of the immediate value

RDMA Write With Immediate和一般的write不同,其会使用immediate value显式的通知对方。

Atomic Fetch and Add / Atomic Compare and Swap

These are atomic extensions to the RDMA operations. The atomic fetch and add operation atomically increments the value at a specified virtual address by a specified amount. The value prior to being incremented is returned to the caller.

atomic fetch and add 会原子的更新远端虚拟地址的值,并将被更新之前的值返回给host

The atomic compare and swap will atomically compare the value at a specified virtual address with a specified value and if they are equal, a specified value will be stored at the address.

atomic compare and swap 会原子的比较远端的地址的值是否等于给定的值,如果它们相等,则将另一个给定的值存储在该地址中。


image.png

相关文章
|
5月前
|
人工智能 缓存 调度
技术改变AI发展:RDMA能优化吗?GDR性能提升方案(GPU底层技术系列二)
随着人工智能(AI)的迅速发展,越来越多的应用需要巨大的GPU计算资源。GPUDirect RDMA 是 Kepler 级 GPU 和 CUDA 5.0 中引入的一项技术,可以让使用pcie标准的gpu和第三方设备进行直接的数据交换,而不涉及CPU。
134677 6
|
4月前
|
人工智能 弹性计算 缓存
带你读《弹性计算技术指导及场景应用》——2. 技术改变AI发展:RDMA能优化吗?GDR性能提升方案
带你读《弹性计算技术指导及场景应用》——2. 技术改变AI发展:RDMA能优化吗?GDR性能提升方案
111 1
|
10月前
|
Linux Anolis 异构计算
关于远程直接内存访问技术 RDMA 的高性能架构设计介绍
本文介绍 RDMA 技术的基本原理及交流在工程上的设计思路。
|
7月前
|
缓存 人工智能 算法
Nvidia_Mellanox_CX5和6DX系列网卡_RDMA_RoCE_无损和有损_DCQCN拥塞控制等技术简介-一文入门RDMA和RoCE有损无损
Nvidia_Mellanox_CX5和6DX系列网卡_RDMA_RoCE_无损和有损_DCQCN拥塞控制等技术简介-一文入门RDMA和RoCE有损无损
477 0
|
9月前
|
弹性计算 人工智能 网络协议
揭秘!CIPU最新秘密武器–弹性RDMA的技术解析与实践
弹性RDMA(Elastic Remote Direct Memory Access,简称eRDMA),是阿里云自研的云上弹性RDMA网络,底层链路复用VPC网络,采用全栈自研的拥塞控制CC(Congestion Control )算法,兼具传统RDMA网络高吞吐、低延迟特性,同时支持秒级的大规模RDMA组网。基于弹性RDMA,开发者可以将HPC应用软件部署在云上,获取成本更低、弹性更好的高性能应用集群;也可以将VPC网络替换成弹性RDMA网络,加速应用性能。
揭秘!CIPU最新秘密武器–弹性RDMA的技术解析与实践
|
10月前
|
弹性计算 人工智能 算法
阿里云徐成:CIPU最新秘密武器-弹性RDMA的技术解析与实践|阿里云弹性计算技术公开课直播预告
弹性RDMA(Elastic Remote Direct Memory Access,简称eRDMA),是阿里云自研的云上弹性RDMA网络,底层链路复用VPC网络,采用全栈自研的拥塞控制CC(Congestion Control )算法,兼具传统RDMA网络高吞吐、低延迟特性,同时支持秒级的大规模RDMA组网。基于弹性RDMA,开发者可以将HPC应用软件部署在云上,获取成本更低、弹性更好的高性能应用集群;也可以将VPC网络替换成弹性RDMA网络,加速应用性能。
|
网络协议 容灾 Linux
系列解读 SMC-R (二):融合 TCP 与 RDMA 的 SMC-R 通信 | 龙蜥技术
本篇以 first contact (通信两端建立首个连接) 场景为例,介绍 SMC-R 通信流程。
系列解读 SMC-R (二):融合 TCP 与 RDMA 的 SMC-R 通信 | 龙蜥技术
|
NoSQL 调度 数据库
2016美国QCon看法:新思潮,NoSQL与DPDK、RDMA等技术会擦出什么样的火花?
NoSQL正在与容器、NVME、用户态TCP/IP协议栈、C++14这些新技术相融合,融合的结果不仅仅是推出了一些新产品,也给大家廓清了NoSQL未来的发展走向,本文将整体介绍
9045 0
|
3月前
|
存储 网络协议 数据中心
|
4月前
|
存储 API 开发者
学习spdk
学习spdk

热门文章

最新文章