13. 初识 NVMe over RDMA
在上一节我们了解了 NVMe over Fabric ,这是一种高效的互联传输协议。本节我们所了解的 NVMe over RDMA 则是在其基础之上的具体传输实现。
RDMA通过RDMA QP(Queue Pair,队列组)实现NVMe Admin和I/O命令的传输,并定义了一组命令集用于支持命令包、回复包以及数据包的收发,包括RDMA_SEND、RDMA_SEND_INVALIDATE、RDMA_READ和RDMA_WRITE。
我们来看一个实际的例子。
步骤1 主机端使用RDMA_SEND命令发包,所发的包可以自带数据,或者带有指向数据的SGL地址。
步骤2 NVMe设备使用RDMA_READ命令从主机端读取数据,每个RDMA_READ命令都包括主机端的SGL地址和本地存储数据的内存地址。
步骤3 NVMe设备发送RDMA_SEND或者RDMA_SEND_INVALIDATE命令通知主机端传输结束。
步骤4 RDMA_READ和RDMA_SEND必须使用同一组RDMA QP。
RDMA最早在Infiniband传输网络上实现。Infiniband是一种专为RDMA设计的网络,它从硬件级别保证可靠传输,技术先进,但是价格高昂。
后来业界厂家把RDMA移植到传统以太网上,使得高速、超低延时、极低CPU占用率的RDMA技术得以部署在目前使用最广泛的以太网上。RDMA基于以太网分为iWARP(这不是一个缩写,大家可把它当作一个专有名词)和RoCE(RDMA over Converged Ethernet,基于聚合以太网的RDMA)两种技术。各RDMA网络协议栈的对比如下图所示。
目前RDMA网卡的主要玩家有博通、Chelsio、华为海思、英特尔、英伟达、美满科技,以及自成一派的亚马逊、Cornell和思科。除了Infiniband技术由英伟达一家独大之外,iWARP和RoCE v2阵营中多个厂商都有参与。
RoCE v2和iWARP的设计初衷都是在传统的以太网技术上实现RDMA,网络层它们都基于IP,只不过在传输层一个选择了UDP,一个选择了TCP。它们都兼容现有的以太网线缆、交换及路由设备,并且都提供软件实现的协议栈,相似的定位和功能意味着它们存在着竞争关系。
RoCE是在Infiniband Trade Association(IBTA)标准中定义的网络协议,允许通过以太网络使用RDMA。RoCE目前有如下两个版本。
RoCE v1:在以太网链路层之上用IB网络层代替了TCP/IP网络层,不支持IP路由功能,是一种链路层协议。
RoCE v2:基于UDP封装,支持路由功能,是一种网络层协议。 RoCE v1与RoCE v2报文格式对比如下所示。
Ethernet包头:包括源MAC地址和目的MAC地址。
IP包头:包括源IP地址和目的IP地址。
UDP包头:包括源端口号和目的端口号,其中目的端口号为4791。
Infiniband包头:Infiniband传输层的头部字段。
IB有效载荷:消息负载。
ICRC和FCS:分别对应冗余检测和帧校验。
iWARP比RoCE出现得晚一些,具备直接在标准TCP/IP网络上运行的优势。iWARP在网卡端的延时是10~15μs,比RoCE要长,但是仍然比传统网卡要快几个数量级。iWARP的协议栈比RoCE复杂,两者对比如下所示。
RoCE和iWARP对比如下。
性能方面:RoCE在性能方面更有优势,这主要体现在高带宽、低延时、低CPU占用率等方面。原因在于iWARP的初衷是基于现有的TCP传输层工作的,为了兼容原本的TCP应用,无法在传输层(或以下)区分RDMA报文或者普通TCP报文,这增加了报文处理的复杂度。硬件难以高效卸载RDMA相关的任务。与此相对应,RoCE可以通过UDP包直接识别出RDMA报文,这使得硬件卸载实现起来更加容易。
传输服务:iWARP只支持可靠性连接传输服务,不支持广播。RoCE支持不同的传输服务,包括可靠性连接、非可靠性数据报文,并支持广播。
扩展性:RoCE需要专门的交换机、网卡以及线缆的支持,一旦需要升级则牵一发动全身,故更加适合用于全新搭建的场景。相比之下iWARP可以直接使用原有的交换机,能够实现部署与硬件更新解耦。iWARP还支持纯软件方案,考虑到现在CPU性能越来越强大,这也不失为一种好的选择。
总体来说,RoCE更加流行,已经在全球多家云设备厂商部署,支持RoCE的厂商也比较多。RoCE在网卡端的延时为1~5μs,但是它要求是无损网络,这意味着交换机必须支持数据桥接和PFC(Priority Flow Control,基于优先级的流控机制)。这使得部署RoCE的过程比较复杂,同时扩展性也不是很好。如果要对其进行扩展需要大量有经验的网络维护人员,成本较高。
如果更关注延时而对扩展性要求不高,可以选RoCE,它的应用场景包括连接控制节点与NVMe磁盘阵列的环境,或者只有一到二层交换机的环境。如果延时是你要考虑的一个重要指标,但同时易于部署与扩展性也具有很高的优先级,iWARP是更好的选择——iWARP可以直接在现有网络环境上部署,而且可以很容易扩展(即使是远程数据中心)。一个著名的iWARP案例是微软的存储部署方案。