RDMA Aware Programming user manual 翻译(一)

不知道原文是否允许翻译。。也没有联系mellanox,纯属自己为了学习交流,翻译的磕磕巴巴,如有问题随时下架。。。

RDMA 网络编程用户手册

       版本 1.7

www.mellanox.com

 

注意事项:

 

目录

修订历史.... 4

术语表.... 5

1     RDMA 架构概览.... 9

1.1     InfiniBand. 9

1.2     Virtual Protocol Interconnect® (VPI) 9

1.3     RDMA over Converged Ethernet (RoCE) 9

1.4     RDMA 技术对比.... 10

1.5     关键组件.... 11

1.6     对于现有应用及ULPs(高层协议)的支持.... 12

1.7     参考文献.... 12

2     RDMA 编程概览.... 13

2.1     可用的通信操作.... 13

3     VPI Verbs 编程接口.... 14

 

修订历史

 

术语表

(按字母排序)

术语

说明

Access Layer

用于访问互联结构(VPI™, InfiniBand®, Ethernet, FCoE)的底层操作系统基础设施。包括所有上层网络协议、中间件、以及管理工具所需要的基础传输服务。

AH (Address Handle)

在 UD QP 中用于描述到达远端的路径信息。

CA (Channel Adapter)

InfiniBand 链路中的一个终点设备,执行传输层功能。

CI (Channel Interface)

展示给 Verbs 接口用户的,由网络适配器、相关固件,以及设备驱动程序组成的通道。

CM (Communication Manager)

负责为 RC/UC QP 服务进行通信的建立、维护,与释放工作。

服务 ID 解析协议使得 UD 服务的用户可以找到能提供他们想要的服务的那些 QP。

每一个终端节点的 IB 端口都有一个 CM。

Compare & Swap

命令远端 QP 读取一个64位的值,与所提供的的数进行对比,如果相等就用QP 中提供的交换数据替换它。

CQ (Completion Queue)

一个包含若干 CQE 的先进先出队列。

CQE (Completion Queue

Entry)

CQ 中一个用于描述已完成 WR 的信息(状态、大小等)的条目。

DMA (Direct Memory

Access)

允许硬件绕过 CPU,直接将数据块移入或者移出内存。

Fetch & Add

命令远端 QP 读取一个64位数,与 QP 提供的加数相加,并用所得的和替换原来的64位数。

GUID (Globally Unique

IDentifier)

用于唯一标记一个子网中的设备或者组件的64位数。

GID (Global IDentifier)

用于标识一个网卡上的端口,或者一个路由器上的端口,或者一个多播组的128位标识符。

GID 是一个有效的128位 IPv6地址(依据 RFC 2373),同时包含了一些 IBA 定义的额外的属性/限制,以便实现高效的发现、通信,以及路由功能。

GRH (Global Routing

Header)

用于跨子网分发报文,以及分发多播消息的报文头。

这个报文头基于 IPv6 协议。

Network Adapter

网卡,用于同一个网络中的计算机之间进行通信的硬件设备。

Host

一个运行着操作系统,并控制一个或多个网卡的计算机平台。

IB

InfiniBand

Join operation

一个 IB 端口必须通过发送一个请求给 SA 来明确的加入一个多播组,才能收到相应的多播报文。

lkey

在注册 MR 后收到的数字,用于 WR 操作时指定内存区域,以及相关权限。

LID (Local IDentifier)

由子网管理者分配给终端的一个16位地址。

每个 LID 在子网内都是唯一的。

LLE (Low Latency

Ethernet)

基于 CEE (增强型以太网)的 RDMA 服务运行在以太网上进行 IB 传输。

NA (Network Adapter)

链路终点设备,执行传输层功能。

MGID (Multicast Group

ID)

SM 管理的 IB 多播组,由 MGID 标识。SM 将一个 MLID 与每一个 MGID 相关联,并且明确的对互联结构中的 IB 交换机进行编程,保证加入多播组的所有端口都可以收到相关报文。

MR (Memory Region)

一组已经注册了访问权限的连续内存缓冲区。这些缓冲区必须实现注册以便网卡使用。注册过程中会创建一个L-Key 以及一个 R-Key,并和创建的内存区域相关联。

MTU (Maximum

Transfer Unit)

一个端口能够发送或者接收的最大报文负载大小(不包括报文头)。

MW (Memory Window)

申请并绑定到一个已经存在的内存注册(Memory Registration)的特定区域,用于远程访问的资源。每一个内存窗口都有一个相关联的窗口句柄,一组访问权限,以及一个当前的 R_Key。

Outstanding Work Request

已经提交的工作队列,但是完成状态还没有被获取的 WR。

pkey (Partition key)

pkey 用来标识一个端口所属的分区,大致类似于以太网中的 VLAN ID。它指向端口分区键表中的一项。子网管理(SM)给每个端口至少分配一个 pkey。

PD (Protection Domain)

保护域内的组件只能相互交互。

AH 与 QP 交互,MR 与 WQ 交互。

QP (Queue Pair)

独立 WQ 的发送队列和接收队列封装在一起,用于一个网络中不同节点间的数据传输。

需要通过公告(posts)来初始化数据的发送与接收。

有三种类型的 QP:UD 不可靠数据报、UC 不可靠连接,以及 RC 可靠连接。

RC (Reliable Connection)

一个基于面向连接协议的 QP 传输服务类型。

一个 QP 和另一个单独的 QP 相关联。数据通过可靠的方式发送(确保信息的正确性和顺序)。

RDMA (Remote Direct

Memory Access)

在不需要远程 CPU 参与的情况下,直接访问远程节点的内存。

RDMA_CM (Remote

Direct Memory Access

Communication

Manager)

用于建立可靠的、连接的,以及不可靠的数据报传输的 API。为建立连接提供一个 RDMA 传输中间接口。这个 API 是基于套接字的,但是适配了 QP 所依赖的语义:通信必须通过特定的 RDMA 设备,并且数据传输是基于消息的。

Requestor

请求者,连接中要初始化数据传输(通过发布一个发送请求)的一方。

Responder

响应者,连接中要对请求者的指令进行响应的一方,包括对响应者的内存进行读或者写的请求,以及最后请求响应者接收一条消息的指令。

rkey

在注册 MR 是收到的一个数字,用于对收到的 RDMA 操作进行权限确认。

RNR (Receiver Not

Ready)

在一个 RC QP (可靠连接)中,两端已经建立了连接,但是接收端还没有收到 RR(接收请求)。

RQ (Receive Queue)

接收队列,一个用于保存用户提交的 RR (接收请求)的工作队列。

RR (Receive Request)

接收请求,提交给 RQ 的一个 WR,用于描述将收到的带有发送操作码的数据写到什么位置。需要注意的是一个带立即数的 RDMA 写操作将消耗一个 RR。

RTR (Ready To Receive)

表示当前 QP 的状态可以接受并处理一个 RR(接收请求)。

RTS (Ready To Send)

表示当前 QP 的状态可以接受并处理一个 SR(发送请求)。

SA (Subnet

Administrator)

查询和操作子网管理数据的接口。

SGE (Scatter /Gather

Elements)

一个完整或部分本地已注册内存块的访问入口信息,包括包括内存块的起始地址、大小已经 lkey(和权限先相关)。

S/G Array

WR 中的 S/G 元素数组,根据所使用的操作码,从多个缓冲区中收集数据,并作为一条流发送出去;或者将一条流分散到多个缓冲区中。

SM (Subnet Manager)

配置和管理子网的实体

发现网络拓扑

分配 LID

决定路由策略,设置路由表

一个主 SM,以及可能多个从 SM(备用模式)

管理者通过改变路由表在互联结构中建立通道。

SQ (Send Queue)

发送队列,一个用于保存用户提交的 SR (发送请求)的工作队列。

SR (Send Request)

提交给 SQ 的一个 WR,用于描述将要传输多少数据,以及传输方向和方式(通过操作码指定)。

SRQ (Shared Receive

Queue)

共享接收队列,保存任何相关联的 RC/UC/UD QP 收到的消息的 WQE。

多个 QP 可以关联到同一个 SRQ。

TCA (Target Channel

Adapter)

一个不需要支持 verbs 的通道适配器,一般用于 I/O 设备。

UC (Unreliable

Connection)

不可靠连接,一个基于面向连接协议的 QP 传输服务类型,一个 QP 和另一个单独的 QP 相关联。这两 QP 之前的协议不保证可靠,消息可能会丢。

UD (Unreliable

Datagram)

不可靠数据报,一种 QP 传输服务类型,一个消息最大为一个报文长度,每一个 UD QP 可以和同子网中的另一个 UD QP 进行消息的发送/接收,消息可能会丢失,并且不保证顺序。只有 UD QP 支持多播。一个 UD 报文的消息大小受限于链路的 MTU。

Verbs

对于网络适配器功能的抽象描述。

通过verbs,任何应用都可以创建/管理用于 RDMA 数据传输的对象。

VPI (Virtual Protocol

Interface)

运行用户修改端口的二层协议。

WQ (Work Queue)

工作队列,一个发送队列或者接收队列

WQE (Work Queue

Element)

工作队列中的一个元素,发音是“wookie”

WR (Work Request)

用户提交到工作队列的一个请求(SR发送请求,或者RR接收请求)


  1. RDMA 架构概览

1.1  InfiniBand

InfiniBand (IB) 是一个高速、低延迟、低 CPU 占用、高效,并且可扩展的服务及存储互联技术。InfiniBand 的一个关键能力是他支持原生的远程直接数据存取(Remote Direct Memory Access/RDMA)。InfiniBand 使得服务器之间,以及服务器与存储之间的数据传输可以不需要 CPU 的参与。InfiniBand 使用 I/O 通道(每个主机高达一千六百万个)进行数据通信,每个通道提供了虚拟网卡(NIC)或者主机通道适配器(HCA,具有安全、隔离等特性)语义。InfiniBand 为每个端口提供了速度范围从 10Gb/s(SDR)到56Gb/s(FDR)的基于铜线或光纤连接的多种技术和方案。InfiniBand 的效率及扩展性已经使他成为世界上主流高性能计算、云、Web 2.0、存储、数据库,以及金融数据中心和应用,在性能和性价比上最优的互联方案。InfiniBand 是由 IBTA 组织定义和说明的标准技术。

1.2  Virtual Protocol Interconnect® (VPI)

Mellanox VPI(Virtual Protocol Interconnect)架构为同时支持 InfiniBand 和以太网的网络适配器及交换机,提供了高性能、低延迟,并且可靠的通信手段。一个 VPI 适配器或者交换机的一个端口可以被设置成支持 InfiniBand 或者以太网。例如,一个双端口的 VPI 适配器可以设置成如下选项:

  1. 一个适配器(HCA)具有两个 InfiniBand 端口
  2. 一个网卡具有两个以太网端口
  3. 一个适配器同时具有一个 InfiniBand 端口和一个以太网端口

类似的,一个交换机可以只有 InfiniBand 端口、只有以太网端口,或者同时具有 InfiniBand 端口和以太网端口。

Mellanox 的 VPI 适配器和交换机同时支持 InfiniBand RDMA,以及基于以太网的 RoCE 方案。

1.3 RDMA over Converged Ethernet (RoCE)

RoCE 是由 IBTA 组织定义和说明的基于以太网实现 RDMA 的标准。RoCE 为以太网提供了真正的 RDMA 语义,并且不需要复杂的、低效的 TCP 传输(而 iWARP 需要)。

RoCE 是当前最高效的低延迟以太网方案。他只需要非常低的 CPU 开销,并且充分利用数据中心桥接以太网中基于优先级的流控(Priority Flow Control/PFC)来实现无损连接。OFED 1.5.1 发布之后,Open Fabrics Software 就全面支持 RoCE 了。

1.4 RDMA 技术对比

目前,有三种技术支持 RDMA,分别是 InfiniBand,RoCE,以及 iWARP。这三种技术都使用本文档中定义的相同的用户 API,但是具有不同的物理链接层。

基于以太网实现的方案中,RoCE 在性能上明显优于 iWARP,包括在延迟、吞吐量,以及 CPU 开销方面。RoCE 被大量主流技术方案所支持,并且包含在 Windows 服务器软件中(也包括了 InfiniBand)。

RDMA 技术基于传统网络中建立的网络概念,但是和 IP 网络有区别。最主要的区别是,RDMA 提供的消息服务使得用户可以直接访问远程计算机的虚拟内存。这个消息服务可以用于与远程计算机进行进程间通信,也可以使用高层协议(Upper Layer

Protocols/ULPs)和存储设备通信,例如 RDMA 扩展 iSCI协议(ISER)、SCSI RDMA 协议(SRP)、服务信息块协议(SMB)、Samba、Lustre、ZFS等。

RDMA 通过绕过内核协议栈以及零拷贝实现低延迟,降低 CPU 利用率,减少内存带宽瓶颈,并提高带宽利用率。RDMA 的核心优势来自于他提供给应用的消息服务,以及用于传输分发消息的底层技术。RDMA 提供基于通道的 IO。这个通道使得应用可以通过 RDMA 设备直接读写远程虚拟内存。

在传统的套接字网络中,应用程序通过 API 向操作系统申请网络资源,并由操作系统替他们完成具体处理。然而 RDMA 只是使用操作系统完成一个通道的建立,后续由应用直接完成消息交换,无需操作系统参与。一个消息可以是 RDMA 读、写操作,或者发送/接收操作。IB 和 RoCE 也支持多播传输。

IB 链路层为拥塞控制提供了诸如基于信用的流控机制等特性。它也支持虚拟链路(VL),从而可以简化高层协议,实现高级服务质量(QoS)。它保证特定路径上 VL 中的数据具有强顺序性。IB 传输层可靠性和交付保证。

IB 网络层的特性使它可以轻松的在两个应用程序的虚拟内存间直接传输消息,即使这两个应用处在不同的物理服务器上。因此,IB 传输层和软件传输接口应该结合起来称为 RDMA 消息传输服务。完整的协议找包括软件传输接口,以及 IB 消息服务。

RDMA Aware Programming user manual 翻译(一)_第1张图片

最重要的一点是每一个应用都可以直接访问互联设备的虚拟内存。这意味着应用不需要向操作系统发送请求就可以传输消息。与之相对的,在传统网络环境中,网络资源是操作系统所有的,用户程序不能直接访问,这样应用必须依赖操作系统的参与,将数据从应用虚拟内存缓冲区,经过网络协议栈,发送到网络上。

RDMA Aware Programming user manual 翻译(一)_第2张图片

以太网中基于 IP 的 TCP (TCP/IP/Ethernet)是一个面向字节流的传输层协议,可以在应用套接字间传送字节信息。IP 网络在设计上是有损的,但是通过传输控制协议(TCP)实现了可靠性。TCP/IP 的每一步操作都需要操作系统的参与,包括在线路两端完成缓冲区的拷贝。在一个面向字节流的网络中,消息没有边界的概念。当应用程序想要发送一个报文时,操作系统将报文字节拷贝到自己在主存中的一个匿名缓冲区中,当字节传输完成之后,(另一端的)操作系统再将自己缓冲区中收到的数据拷贝到应用程序的接收缓冲区中。每传输一个报文就要重复一次以上过程,直到整个字节流传输完成。TCP 负责对于拥塞导致的丢包进行重传。

在 IB 网络中,一个完整的消息是直接发送给应用程序的。当应用程序请求 RDMA 读或写时,IB 硬件会根据链路的最大传输单元将消息分割成合适大小的报文。这些报文通过 IB 网络进行传输,然后直接传送到接收程序的虚拟缓冲区中,并重新组织成一个完成的消息。当整个消息传输完成后应用程序会收到通知。因此,直到整个消息被传送到接收程序的缓冲区,发送程序和接收程序都不用参与中间过程。

1.5 关键组件

下面这些组件存在的前提是部署了 IB 和 RoCE。我们不讨论线缆和连接器。

主机通道适配器(Host Channel Adapter

HCA 为 IB 终端(例如一个服务器)连接到 IB 网络提供接入点。他们类似于以太网网卡,不过会完成更多功能。HCA 在操作系统的控制下提供(内存)地址转换机制,使得应用程序可以直接访问 HCA。基于相同的(内存)地址转换机制,HCA 也可以访问用户态应用程序的内存。HCA 可以将应用程序提供的虚拟地址转换成物理地址,从而可以控制实际消息传输。

范围扩大器(Range Extenders

InfiniBand 通过将流量封装到广域网(WAN)链路中实现范围扩大,并且扩展了充足的缓冲区信用量(buffer credits)来保证满带宽使用广域网。

子网管理者(Subnet Manager

InfiniBand 子网管理者向每一个连接到互联结构中的端口分配一个本地标识(LIDs),并根据分配的 LIDs 构建路由表。IB 子网管理者是软件定义网络(SDN)中的一个概念,它可以消除互联复杂性,并且可以构建非常巨大尺度的计算和存储基础设施。

交换机(Switches

IB 交换机和标准网络交换机类似,但是有专门设计来满足 IB 的性能需求。它们在 IB 链路层实现了流控来防止丢包,并且支持拥塞避免、适应性路由能力(adaptive routing capabilities),以及高级服务质量。多个交换机包含子网管理这,至少需要一个子网管理者来配置 IB 互联。

1.6 对于现有应用及ULPs(高层协议)的支持

IP 应用可以通过 IPoIB(IP over IB)、EoIB(Ethernet over IB),或者 RDS ULPs 在 InfiniBand 网络中运行。iSER、SRP、RDS、NFS、ZFS、SMB 及其他协议可以实现对存储应用的支持。同时也支持MPI 和 Network Direct 高层协议,但是不在本文档的讨论范围内。

1.7 参考文献

• IBTA Intro to IB for End Users

http://members.infinibandta.org/kwspub/Intro_to_IB_for_End_Users.pdf

• Mellanox InfiniBandFAQ_FQ_100.pdf

http://www.mellanox.com/pdf/whitepapers/InfiniBandFAQ_FQ_100.pdf

• Mellanox WP_2007_IB_Software_and_Protocols.pdf

http://www.mellanox.com/pdf/whitepapers/WP_2007_IB_Software_and_Protocols.pdf

• Mellanox driver software stacks and firmware are available for download from Mellanox

Technologies’ Web pages: http://www.mellanox.com

 

未完待续

你可能感兴趣的:(高性能,网络,rdma)