RDMA技术详解(一):RDMA概述

1. DMA 和 RDMA 概念

1.1 DMA

DMA (直接内存访问) 是一种能力,允许在计算机主板上的设备直接把数据发送到内存中去,数据搬运不需要 CPU 的参与。

传统内存访问需要通过 CPU 进行数据 copy 来移动数据,通过 CPU 将内存中的 Buffer1 移动到 Buffer2 中。DMA 模式:可以同 DMA Engine 之间通过硬件将数据从 Buffer1 移动到 Buffer2, 而不需要操作系统 CPU 的参与,大大降低了 CPU Copy 的开销。

1.2 RDMA

RDMA 是一种概念,在两个或者多个计算机进行通讯的时候使用 DMA, 从一个主机的内存直接访问另一个主机的内存。

RDMA 是一种 host-offload, host-bypass 技术,允许应用程序 (包括存储) 在它们的内存空间之间直接做数据传输。具有 RDMA 引擎的以太网卡 (RNIC)–而不是 host–负责管理源和目标之间的可靠连接。使用 RNIC 的应用程序之间使用专注的 QP 和 CQ 进行通讯:

每一个应用程序可以有很多 QP 和 CQ 每一个 QP 包括一个 SQ 和 RQ 每一个 CQ 可以跟多个 SQ 或者 RQ 相关联

2. RDMA 的优势

传统的 TCP/IP 技术在数据包处理过程中,要经过操作系统及其他软件层,需要占用大量的服务器资源和内存总线带宽,数据在系统内存、处理器缓存和网络控制器缓存之间来回进行复制移动,给服务器的 CPU 和内存造成了沉重负担。尤其是网络带宽、处理器速度与内存带宽三者的严重” 不匹配性”,更加剧了网络延迟效应。

RDMA 是一种新的直接内存访问技术,RDMA 让计算机可以直接存取其他计算机的内存,而不需要经过处理器的处理。RDMA 将数据从一个系统快速移动到远程系统的内存中,而不对操作系统造成任何影响。

在实现上,RDMA 实际上是一种智能网卡与软件架构充分优化的远端内存直接高速访问技术,通过将 RDMA 协议固化于硬件 (即网卡) 上,以及支持 Zero-copy 和 Kernel bypass 这两种途径来达到其高性能的远程直接数据存取的目标。 使用 RDMA 的优势如下:

零拷贝 (Zero-copy) – 应用程序能够直接执行数据传输,在不涉及到网络软件栈的情况下。数据能够被直接发送到缓冲区或者能够直接从缓冲区里接收,而不需要被复制到网络层。内核旁路 (Kernel bypass) – 应用程序可以直接在用户态执行数据传输,不需要在内核态与用户态之间做上下文切换。不需要 CPU 干预 (No CPU involvement) – 应用程序可以访问远程主机内存而不消耗远程主机中的任何 CPU。远程主机内存能够被读取而不需要远程主机上的进程(或 CPU) 参与。远程主机的 CPU 的缓存 (cache) 不会被访问的内存内容所填充。消息基于事务 (Message based transactions) – 数据被处理为离散消息而不是流,消除了应用程序将流切割为不同消息 / 事务的需求。支持分散 / 聚合条目 (Scatter/gather entries support) – RDMA 原生态支持分散 / 聚合。也就是说,读取多个内存缓冲区然后作为一个流发出去或者接收一个流然后写入到多个内存缓冲区里去。

在具体的远程内存读写中,RDMA 操作用于读写操作的远程虚拟内存地址包含在 RDMA 消息中传送,远程应用程序要做的只是在其本地网卡中注册相应的内存缓冲区。远程节点的 CPU 除在连接建立、注册调用等之外,在整个 RDMA 数据传输过程中并不提供服务,因此没有带来任何负载。

3. RDMA 三种不同的硬件实现

RDMA 作为一种 host-offload, host-bypass 技术,使低延迟、高带宽的直接的内存到内存的数据通信成为了可能。目前支持 RDMA 的网络协议有:

InfiniBand (IB): 从一开始就支持 RDMA 的新一代网络协议。由于这是一种新的网络技术,因此需要支持该技术的网卡和交换机。

RDMA 过融合以太网 (RoCE): 即 RDMA over Ethernet, 允许通过以太网执行 RDMA 的网络协议。这允许在标准以太网基础架构 (交换机) 上使用 RDMA,只不过网卡必须是支持 RoCE 的特殊的 NIC。

互联网广域 RDMA 协议 (iWARP): 即 RDMA over TCP, 允许通过 TCP 执行 RDMA 的网络协议。这允许在标准以太网基础架构 (交换机) 上使用 RDMA,只不过网卡要求是支持 iWARP (如果使用 CPU offload 的话) 的 NIC。否则,所有 iWARP 栈都可以在软件中实现,但是失去了大部分的 RDMA 性能优势。

在三种主流的 RDMA 技术中,可以划分为两大阵营。一个是 IB 技术,另一个是支持 RDMA 的以太网技术 (RoCE 和 iWARP)。其中,IBTA 力挺的技术自然是 IB 和 RoCE, Mellanox 公司(一个以色列人搞的小公司)是这方面的急先锋。而 iWARP 则是 IEEE/IETF 力挺的技术,主要是 Chelsio 公司在推进。RoCE 和 iWARP 的争论,请参考 Mellanox 和 Chelsio 这两家公司发布的白皮书。

在存储领域,支持 RDMA 的技术早就存在,比如 SRP (SCSI RDMA Protocol) 和 iSER (iSCSI Extensions for RDMA)。 如今兴起的 NVMe over Fabrics 如果使用的不是 FC 网络的话,本质上就是 NVMe over RDMA。 换句话说,NVMe over InfiniBand, NVMe over RoCE 和 NVMe over iWARP 都是 NVMe over RDMA。

4. RDMA 基本术语

4.1 Fabric

A local-area RDMA network is usually referred to as a fabric.

所谓 Fabric,就是支持 RDMA 的局域网 (LAN)。

4.2 CA(Channel Adapter)

A channel adapter is the hardware component that connects a system to the fabric.

CA 是 Channel Adapter (通道适配器) 的缩写。那么,CA 就是将系统连接到 Fabric 的硬件组件。 在 IBTA 中,一个 CA 就是 IB 子网中的一个终端结点 (End Node)。分为两种类型,一种是 HCA, 另一种叫做 TCA, 它们合称为 xCA。其中, HCA (Host Channel Adapter) 是支持”verbs” 接口的 CA, TCA (Target Channel Adapter) 可以理解为”weak CA”, 不需要像 HCA 一样支持很多功能。 而在 IEEE/IETF 中,CA 的概念被实体化为 RNIC(RDMA Network Interface Card), iWARP 就把一个 CA 称之为一个 RNIC。

简言之,在 IBTA 阵营中,CA 即 HCA 或 TCA; 而在 iWARP 阵营中,CA 就是 RNIC。 总之,无论是 HCA、 TCA 还是 RNIC,它们都是 CA, 它们的基本功能本质上都是生产或消费数据包 (packet)

4.3 Verbs

在 RDMA 的持续演进中,有一个组织叫做 OpenFabric Alliance 所做的贡献可谓功不可没。 Verbs 这个词不好翻译,大致可以理解为访问 RDMA 硬件的 “一组标准动作”。 每一个 Verb 可以理解为一个 Function。

5. 核心概念

5.1 Memory Registration (MR) | 内存注册

RDMA 就是用来对内存进行数据传输。那么怎样才能对内存进行传输,很简单,注册。 因为 RDMA 硬件对用来做数据传输的内存是有特殊要求的。

在数据传输过程中,应用程序不能修改数据所在的内存。操作系统不能对数据所在的内存进行 page out 操作 — 物理地址和虚拟地址的映射必须是固定不变的。

注意无论是 DMA 或者 RDMA 都要求物理地址连续,这是由 DMA 引擎所决定的。 那么怎么进行内存注册呢?

创建两个 key (local 和 remote) 指向需要操作的内存区域注册的 keys 是数据传输请求的一部分

注册一个 Memory Region 之后,这个时候这个 Memory Region 也就有了它自己的属性:

context : RDMA 操作上下文 addr : MR 被注册的 Buffer 地址 length : MR 被注册的 Buffer 长度 lkey:MR 被注册的本地 keyrkey:MR 被注册的远程 key

对 Memrory Registration:Memory Registration 只是 RDMA 中对内存保护的一种措施,只有将要操作的内存注册到 RDMA Memory Region 中,这快操作的内存就交给 RDMA 保护域来操作了。这个时候我们就可以对这快内存进行操作,至于操作的起始地址、操作 Buffer 的长度,可以根据程序的具体需求进行操作。我们只要保证接受方的 Buffer 接受的长度大于等于发送的 Buffer 长度。

5.2 Queues | 队列

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)。从生产者 - 消费者的角度理解就是:

Host 生产 WR, 把 WR 放到 WQ 中去

RDMA 硬件消费 WRRDMA 硬件生产 WC, 把 WC 放到 CQ 中去 Host 消费 WC

6. RDMA 数据传输

6.1 RDMA Send | RDMA 发送 (/ 接收) 操作 (Send/Recv)

跟 TCP/IP 的 send/recv 是类似的,不同的是 RDMA 是基于消息的数据传输协议(而不是基于字节流的传输协议),所有数据包的组装都在 RDMA 硬件上完成的,也就是说 OSI 模型中的下面 4 层 (传输层,网络层,数据链路层,物理层) 都在 RDMA 硬件上完成。

6.2 RDMA Read | RDMA 读操作 (Pull)

RDMA 读操作本质上就是 Pull 操作,把远程系统内存里的数据拉回到本地系统的内存里。

6.3 RDMA Write | RDMA 写操作 (Push)

RDMA 写操作本质上就是 Push 操作,把本地系统内存里的数据推送到远程系统的内存里。

6.4 RDMA Write with Immediate Data | 支持立即数的 RDMA 写操作

支持立即数的 RDMA 写操作本质上就是给远程系统 Push (推送) 带外 (OOB) 数据,这跟 TCP 里的带外数据是类似的。

可选地,immediate 4 字节值可以与数据缓冲器一起发送。 该值作为接收通知的一部分呈现给接收者,并且不包含在数据缓冲器中。

暫無評論

發怖評論 編輯評論


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇