RDMA测试杂谈

作者简介:Explorer,专注于高性能网络、虚拟化网络及网卡的测试方案研究。熟悉dpdk,rdma,sdn等技术的应用与解决方案。

1 深入了解RDMA技术

1.1 背景概述

随着互联网的普及和数字化转型的加速,大量数据被生成和传输。在AI训练和推理、大数据分析以及存储应用中,处理这些海量数据变得至关重要。因此,高性能网络对于快速而可靠的数据传输至关重要。
RDMA(Remote Direct Memory Access,远程直接内存访问)是一种高效的数据传输技术,它使得两台计算机之间可以直接从对方的内存中读取或写入数据,而不需要CPU的介入。通过RDMA,计算机之间的数据传输速度更快,延迟更低,传输效率更高,而且可以减少CPU的负载。

1.2 应用场景

RDMA技术在各个领域都有广泛的应用,其高性能和低延迟的特点使其成为许多应用的关键组成部分,以下是当前RDMA技术的一些应用场景介绍:

  • 高性能计算(HPC):RDMA技术在HPC领域得到广泛应用,用于大规模科学计算、气象模拟、分子建模等任务。RDMA可以实现节点之间的快速数据共享,从而加速复杂计算任务的完成,降低了整体计算时间。
  • 云计算和虚拟化:公有云和私有云服务提供商采用RDMA技术来改善虚拟机之间的通信性能。这在云环境中特别重要,因为它可以提高虚拟机之间的网络吞吐量,从而提高了云计算资源的利用率。
  • 存储系统:RDMA技术在高性能存储系统中发挥重要作用,如分布式文件系统、SAN存储、块存储等。它提供了低延迟、高带宽的数据传输,有助于加速数据读写操作,提高存储性能。
  • 金融交易:在金融领域,时间和性能至关重要。RDMA技术用于构建低延迟的交易系统,确保交易数据能够实时传输和处理,从而降低了交易风险。
  • 人工智能和深度学习:训练深度学习模型需要大量数据传输和计算资源。RDMA技术可用于加速大规模深度学习任务,减少模型训练时间。
  • 实时数据分析:对于需要实时数据分析的应用,如广告投放、市场分析和网络安全监控,RDMA技术可以确保数据能够实时传输和分析,提供即时决策支持。
  • 远程备份和复制:在数据备份和复制中,RDMA技术可以加速数据传输,降低备份时间,同时提供数据完整性和可靠性。
  • 高性能数据库:RDMA技术可用于构建高性能数据库系统,实现快速数据访问和查询操作,从而加速数据处理。

RDMA技术在各种领域中都有重要应用,特别是在需要高性能、低延迟和大规模数据传输的场景中。它为这些应用提供了关键的网络通信支持,加速了各种计算和数据处理任务,有助于提高系统性能和效率。随着技术的不断发展,RDMA技术的应用前景将继续扩展。

1.3 技术特点

内核 Bypass: RDMA允许数据直接在内存之间传输,而不需要通过操作系统内核。传统的Socket通信在数据传输时需要将数据从用户空间复制到内核空间,然后再从内核空间复制到另一个用户空间。而RDMA通过绕过内核,使数据可以直接在用户空间之间传输,从而减少了数据复制的开销,提高了数据传输效率。
零拷贝: RDMA支持零拷贝操作,意味着数据可以直接在应用程序的内存空间中传输,而无需中间的数据拷贝操作。这减少了CPU的负担和数据传输的延迟,提高了系统性能。
协议卸载: RDMA技术允许网络适配器卸载协议的处理任务,将网络协议的处理从主机CPU转移到网络适配器上。这样可以减轻主机CPU的负担,提高系统整体性能。
低延迟和高吞吐量: RDMA的直接内存访问和零拷贝特性导致了低延迟和高吞吐量。数据可以直接在内存之间传输,而不需要中间的数据复制,从而减少了通信的延迟并提高了数据传输的速率。
支持远程直接内存访问: RDMA允许应用程序直接访问远程主机的内存,而无需通过中间服务器进行数据传输。这使得在分布式系统中进行高效的数据共享成为可能,同时减少了通信的开销。

1.4 支持协议

RDMA技术支持三类协议,分别为InfiniBand(IB),RDMA over Converged Ethernet(RoCE)和internet Wide Area RDMA Protocol(iWARP),三类协议使用相同的RDMA标准。

1.4.1 InfiniBand

InfiniBand是一种基于InfiniBand架构的RDMA技术,它提供了一种基于通道的点对点消息队列转发模型,每个应用都可通过创建的虚拟通道直接获取本应用的数据消息,无需其他操作系统及协议栈的介入。InfiniBand架构的应用层采用了RDMA技术,可以提供远程节点间RDMA读写访问,完全卸载CPU工作负载;网络传输采用了高带宽的传输;链路层设置特定的重传机制保证服务质量,不需要数据缓冲。
InfiniBand必须运行在InfiniBand网络环境下,必须使用IB交换机及IB网卡才可实现。

1.4.2 RoCE

RoCE技术支持在以太网上承载IB协议,实现RDMA over Ethernet。RoCE与InfiniBand技术有相同的软件应用层及传输控制层,仅网络层及以太网链路层存在差异。
RoCE v1协议:基于以太网承载RDMA,只能部署于二层网络,它的报文结构是在原有的IB架构的报文上增加二层以太网的报文头,通过Ethertype 0x8915标识RoCE报文。
RoCE v2协议:基于UDP/IP协议承载RDMA,可部署于三层网络,它的报文结构是在原有的IB架构的报文上增加UDP头、IP头和二层以太网报文头,通过UDP目的端口号4791标识RoCE报文。RoCE v2支持基于源端口号hash,采用ECMP实现负载分担,提高了网络的利用率。
下图为RoCE的协议栈:

图1 RoCE协议栈

1.4.3 iWARP

iWARP协议是IETF基于TCP提出的,因为TCP是面向连接的可靠协议,这使得iWARP在面对有损网络场景(可以理解为网络环境中可能经常出现丢包)时相比于RoCE v2和IB具有更好的可靠性,在大规模组网时也有明显的优势。但是大量的TCP连接会耗费很多的内存资源,另外TCP复杂的流控等机制会导致性能问题,所以从性能上看iWARP要比UDP的RoCE v2和IB差。

1.4.4 网络设备

在实际的生产环境中,无论是何种协议支持的RDMA技术,都是需要硬件的支撑。
支持iWARP和RoCEv2的Intel E810系列网卡:https://www.intel.cn/content/www/cn/zh/products/sku/192558/intel-ethernet-network-adapter-e810cqda2/specifications.html

支持InfiniBand的Mellanox CX-7系列网卡:https://nvdam.widen.net/s/csf8rmnqwl/infiniband-ethernet-datasheet-connectx-7-ds-nv-us-2544471
支持InfiniBand的NVIDIA Quantum-2 InfiniBand系列交换机:https://nvdam.widen.net/s/k8sqcr6gzb/infiniband-quantum-2-qm9700-series-datasheet-us-nvidia-1751454-r8-web

2、构建RDMA环境

使用2张Mellanox CX-4对接测试RoCEv2功能及性能
Mellanox官网下载CX-4的OFED驱动

查看节点上RDMA设备,node GUID对应的是网卡的mac地址

查看device mlx5_0的port状态,这里rate为25Gb/sec

到这里,最简单的RDMA环境搭建完成,如果需要测试高阶功能,例如PFC,ECN或者ECMP则需要更复杂的组网,也需要引入相应的交换机来支持功能的验证。

3、RDMA测试实验

3.1 CM建链测试

实验目的:Communication Management Protocol,通信管理协议。指的是一种建立于Infiniband/RoCE协议基础之上的建链方式。以下实验通过抓取CM建链过程中数据包交互的过程,来验证是否符合IB协议所定义的建链流程。
以RC建链过程测试为例:

通过抓包分析RC CM建链的过程
图4 CM RC建链过程
client和server端交互的数据报文如下:
RC CM建链的过程一共有3个数据包,分别是ConnectRequest,ConnectReply和ReadToUse。建链完成后,就开始按照交换好的QP信息进行数据发送。

REQ用于启动cm建链,client端发送请求,提供端口地址(GID/LID),以及本端的QPN信息。

REP用于server端在接收到REQ后,验证了serviceid,primary以及private data里面的数据后,接收了client端的连接请求,并且发送了REP消息,携带了本端的QPN,起始PSN等信息。

RTU消息则表示client端接收到REP后,根据双方约定好后的QP进行数据交互。

回过头来查看perftest执行后的结果,本端的QP 190(0x00be)和对端的QP187 (0x00bb)建立连接并发送数据。

也可以通过后续交换的数据包来查看QP信息,发给远端QPN 187的send数据

在CM建链测试的最后,我们需要关注在建链的过程中,client端和server端其实是通过send ud消息来交互建链过程,这个过程中所使用的QP为QP1。
这里顺便提一句,在RDMA中,有几个QP是预留的,QP0用于处理子网管理消息,QP1用于处理 SA(Subnet Administrator)或 GS(Generic Services)的消息。

3.2 RC(Reliable Connection)测试

实验目的:在RC服务类型中,通信的两端建立了一个可靠的连接。这种连接模型提供了类似于TCP的可靠性,确保数据的按序传递和可靠传输。在RDMA的RC模型中,数据传输的顺序是有保障的,且通信的两端可以进行错误检测和重传。以下实验验证client端和server端是否可以建立正常的RC连接,并进行数据包的传输。
服务端测试指令

客户端测试指令

这里指定了数据包长度为64,pmtu长度为1024。当数据包长度小于pmtu时,则write的消息都为“write only”。

修改数据包长度进行再次测试,当数据包长度大于pmtu,且小于2pmtu时,则wirte的消息为“write first”和“write last”


修改数据包长度进行再次测试,当数据包长度大于2
pmtu时,则write的消息为write first”,“write middle”和“write last”




当然测试的时候也可以修改pmtu进行验证,pmtu有严格的长度要求,例如256,512,1024等。如下图虽然MTU为1500,但是实际的RDMA PMTU为1024。

3.3 UD(Unreliable Datagram)测试

实验目的:UD 连接更注重性能,适用于那些对数据传输的可靠性要求相对较低的场景。以下实验验证client端与server端是否可以建立正常的UD连接,并进行数据包的传输。
在RDMA的消息类型中,UD测试只支持send消息类型,不支持write和read,这里使用send消息进行测试。
客户端测试指令

服务端测试指令

同RC测试一样,修改数据包长度与pmtu,可以验证不同的send消息报文,这不分测试不再赘述。

3.4 性能测试

RDMA 技术的设计目标之一是提供高性能、低延迟的远程数据访问,所以在RDMA的实验中,关于性能的实验尤为重要。性能测试项指标,一般关注各类型消息的带宽和延时

3.4.1 bw测试

这里带宽测试使用write消息来进行
write 服务端测试指令

write客户端测试指令

这里介绍一下几个性能相关参数
-s 4096:使用长度为4096字节的数据包进行测试,大包的性能会优于小包。
-n 10000:测试数据包数,数量过小的话测试性能会有偏差。
-t 128:tx队列深度。
-q 4:使用qp数。
最后带宽结果为23.05Gb/sec,上文有描述本次测试使用的网卡带宽规格为25Gb/sec,这里Roce的性能已经快要跑满网卡。

3.4.2 lat测试

这里进行read消息的延时测试
read 服务端测试指令

read 客户端测试指令
测试延时的话是不能使用多qp的,只能使用1个qp进行测试,

观察最后的延时结果99.9%的延时为19.88usec。

4、RDMA的抓包方式

抓取RDMA数据包流量的方式有多种,交换机配置端口镜像后,RDMA数据包通过镜像口抓取比较常见。
这里介绍一种通过容器中的tcpdump捕获Mellanox RDMA数据包的方式
首先拉取tcpdump-rdma的镜像

启动tcpdump-rdma容器,通过把主机上的/dev/infiniband设备映射到容器中,同时把主机上的/tmp/rdma目录也同步到容器中去

进入容器后进行抓包,最后把pcap数据包导入到wireshark后就可以查看Roce数据了

打开wireshark查看数据包


  • 本站原创文章仅代表作者观点,不代表SDNLAB立场。所有原创内容版权均属SDNLAB,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用,转载须注明来自 SDNLAB并附上本文链接。 本站中所有编译类文章仅用于学习和交流目的,编译工作遵照 CC 协议,如果有侵犯到您权益的地方,请及时联系我们。
  • 本文链接https://www.sdnlab.com/26423.html
分享到:
相关文章
条评论

登录后才可以评论

SDNLAB君 发表于23-12-25
1