RDMA(Remote Direct Memory Access)远程直接内存访问是一种技术,它使两台联网的计算机能够在主内存中交换数据,而无需依赖任何一台计算机的处理器、缓存或操作系统。与基于本地的直接内存访问 ( DMA ) 一样,RDMA 提高了吞吐量和性能,因为它可以释放资源(如cpu),从而加快数据传输速率并降低延迟。在大规模并行计算机集群中特别有用,比如分布式存储,超算中心。
RDMA 通过网络适配器能够将数据从线路直接传输到应用程序内存或从应用程序内存直接传输到线路,支持零拷贝,无需在应用程序内存和操作系统中的数据缓冲区之间复制数据。 不需要 CPU、缓存或上下文切换完,并且数据传输与其他系统操作并行,减少了消息传输的延迟。
Remote Direct Memory Access远程直接内存访问是一种技术,它使两台联网的计算机能够在主内存中交换数据,而无需依赖任何一台计算机的处理器、缓存或操作系统。与基于本地的直接内存访问 ( DMA ) 一样,RDMA 提高了吞吐量和性能,因为它可以释放资源(如cpu),从而加快数据传输速率并降低延迟。RDMA 可以使网络和存储应用程序都受益
Fabric: 支持RDMA的局域网(LAN)
CA(Channel Adapter): 通道适配器, 将系统连接到Fabric的硬件组件, 本质是生产和消费包(packet)
HCA: Host Channel Adapter 主机通道适配器, 支持verbs接口的CA, 作用同上, ib协议对其定义为处理器和I/O单元中能够产生和消耗数据包的IB设备
Verbs: 访问RDMA硬件的“一组标准动作”。 每一个Verb可以理解为一个Function
RoCE: RDMA over Converged Ethernet (RoCE) protocol: rdma融合以太网协议
zero-copy networking: 零拷贝网络
bypass the kernel networking stack: 内核旁路(绕过内核)
high-performance computing (HPC): 高性能计算
Memory Registration(MR) : 内存注册后, 操作系统不能对数据所在的内存进行页置换(page out)操作 -- 物理地址和虚拟地址的映射必须是固定不变的, 底层调用内核提供的函数pin住内存(防止换页)
va -> pa
protect
pin: lock page(va<=>pa)
服务类型(队列对qp类型):连接(可靠RC/不可靠UC), 数据报(可靠RD/不可靠UD)
Zero-copy零拷贝-应用程序可以在不涉及网络软件堆栈的情况下执行数据传输,并且数据被直接发送到缓冲区,而无需在网络层之间复制。
Kernel bypass绕过内核 - 应用程序可以直接从用户空间执行数据传输,而无需执行上下文切换。
CPU Offload 卸载 - 应用程序可以访问远程内存而不消耗远程机器中的任何 CPU。无需远程进程(或处理器)的任何干预。远程 CPU 中的缓存也不会被传输过程中的内存内容填充。
Message based transactions 基于事务的消息 - 数据作为离散消息而不是作为流处理,这消除了应用程序将流分离为不同消息/事务的需要。
Scatter/gather entries 分散/聚集条目支持 - RDMA 支持本地处理多个分散/聚集条目,即读取多个内存缓冲区并将它们作为一个流发送或获取一个流并将其写入多个内存缓冲区
低延迟 - 例如:HPC、金融服务、Web 2.0
高带宽 - 例如:HPC、医疗设备、存储和备份系统、云计算
CPU 占用空间小 - 例如:HPC、云计算
当今是云计算、大数据的时代,企业业务持续增长需要存储系统的 IO 性能也持续增长。传统的 TCP/IP 技术在数据包处理过程中,要经过操作系统及其他软件层,数据在系统内存、处理器缓存和网络控制器缓存之间来回进行复制,给服务器的 CPU 和内存造成了沉重负担。尤其是网络带宽、处理器速度与内存带宽三者的严重"不匹配性",更加剧了网络延迟效应。为了降低数据中心内部网络延迟,提高带宽,RDMA 技术应运而生。RDMA 允许用户态的应用程序直接读取和写入远程内存,避免了数据拷贝和上下文切换;并将网络协议栈从软件实现 offload 到网卡硬件,实现了高吞吐量、超低时延和低 CPU 开销的效果。
当前 RDMA 在以太网上的传输协议是 RoCEv2,RoCEv2 是基于无连接协议的 UDP 协议,相比面向连接的 TCP 协议,UDP 协议更加快速、占用 CPU 资源更少,但其传输是不可靠的,一旦出现丢包会导致 RDMA 的传输效率降低,这是由 RDMA 的 Go-back-N 重传机制决定的。RDMA 接收方网卡发现丢包时,会丢弃后续接收到的数据包,发送方需要重发之后的所有数据包,这导致性能大幅下降。所以要想 RDMA 发挥出其性能,需要为其搭建一套不丢包的无损网络环境。
服务器流程
在 RDMA 连接的服务器端建立了以下事件:
客户机流程
在 RDMA 连接的客户端发生了以下事件:
完成队列处理
下图扩展在选择处理完成队列时所需的编程步骤。此过程在第一张图中显示为以“完成队列处理”标示的单个步骤,该步骤使用编号 3 进行标记。
图中显示了以下步骤:
OFI与Mercury(水银HG)
Mercury 是 Mochi(麻糬)微服务生态系统的核心组件,是 R&D 100 获奖项目,对libfabric封装,提供网络抽象NA,点对点RPC(对应RDMA的send/recv),大块Bulk数据传输(如将RDMA的write/read封装为put/get), 提供了灵活的RPC注册, 回调, RPC飞行队列/等待队列拥塞控制, 单个RPC超时时间设置和跟踪,重试机制, 存储池等,充分利用底层网络性能
CaRT(集体和 RPC 传输)与Mercury
CaRT 是用于大数据和 百亿级 HPC 的开源 RPC 传输层。它支持传统的 P2P RPC 和集体 RPC,后者通过可扩展的基于树的消息传播在一组目标服务器上调用 RPC。Cart将Mercury封装,对应用程序提供初始化上下文,创建请求,发送请求,请求回调等数据通道接口,典型的上层应用如心跳swim,rank管理, 持久内存和Nvme读写io
晓兵
博客: https://logread.cn | https://blog.csdn.net/ssbandjl | https://cloud.tencent.com/developer/user/5060293/articles
weixin: ssbandjl
公众号: 云原生云
欢迎对DAOS, SPDK, RDMA等高性能技术感兴趣的朋友加入[DAOS技术交流(群)]
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。