RDMA 远程直接内存访问介绍
RDMA(RemoteDirect Memory Access,远程直接内存访问)是一种为了解决网络传输中服务器端数据处理的延迟而产生的技术。它将数据直接从一台计算机的内存传输到另一台计算机,无需双方操作系统的介入。
介绍
- RDMA 的优势
- 零拷贝(Zero-copy)
- 内核旁路(Kernel bypass)
- 不需要 CPU 干预(No CPU involvement)
- 消息基于事务(Message based transactions)
- 支持分散/聚合条目(Scatter/gather entries support)
RDMA、InfiniBand、IB卡、IB驱动关系- 区别与传统的数据传输,由一台机器的用户空间发送到另一台远程机器的用户空间
IB(InfiniBand, 无限带宽)网络的物理链路协议是一个用于高性能计算(HPC)的计算机网络通信标准(协议),它具有极高的吞吐量和极低的延迟,用于计算机与计算机之间的数据互连。类似的协议还有iWARP、RoCEInfiniBand Verbs API,是远程直接访问(RDMA)技术的实现- IB 卡,是实现 InfiniBand 协议的硬件
- IB 驱动,IB 卡依赖 IB 驱动才能实现 InfiniBand 协议的 RDMA 技术
区别

- 图片参考
- 1999 年,由 Compaq、Dell、HP、IBM、Intel、Microsoft 和 Sun 公司组成了 IBTA 组织
- 愿景是设计一种更高速的新的互联协议规范标准,来应对传统以太网在面对未来计算机行业的发展时可能遇到的瓶颈
- 2000 年,IBTA 组织设计并发布了 Infiniband Architecture Specification 1.0(IB 规范)
- 2007 年,IETF 发布了 iWARP(Internet Wide Area RDMA Protocol)的一系列 RFC
- 2010 年,IBTA 发布了 RoCE v1 规范
- 2014 年,IBTA 发布了 RoCE v2 规范
- RDMA 技术(或标准)支持三类协议,分别为:
InfiniBand(IB)更多参考Mellanox 网卡- 由于 IB 是新的网络技术,因此需要支持该技术的网卡和交换机
RDMA over Converged Ethernet(RoCE)RDMA 过融合以太网,即 RDMA over Ethernet,允许通过以太网实现 RDMA 的网络协议,更多参考RoCE 协议介绍- 阿里云是国内率先部署 RoCE RDMA 的云厂商
internet Wide Area RDMA Protocol(iWARP)互联网广域 RDMA 协议,RDMA over TCP,允许通过 TCP 实现 RDMA 的网络协议- 在标准以太网基础架构(交换机)上使用 RDMA,只不过网卡要求是支持 iWARP(如果使用 CPU offload 的话)的 NIC。否则,所有 iWARP 栈都可以在软件中实现,但是失去了大部分的 RDMA 性能优势。
iWARP、RoCE是非InfiniBand 硬件上实现RDMA技术
相关术语
Fabric支持 RDMA 的局域网(LAN)A local-area RDMA network is usually referred to as a fabric.
CA(Channel Adapter, 通道适配器)A channel adapter is the hardware component that connects a system to the fabric.- CA 是将系统连接到 Fabric 的硬件组件
- 在 IBTA 中,一个 CA 就是 IB 子网中的一个终端结点(End Node)。分为两种类型,
- 一种是
HCA(Host Channel Adapter)是支持verbs接口的 CA - 另一种叫做
TCA(Target Channel Adapter)可以理解为weak CA,不需要像 HCA 一样支持很多功能。 HCA和TCA合称为xCA- 在 IEEE/IETF 中,CA 的概念被实体化为
RNIC(RDMA Network Interface Card),iWARP 就把一个 CA 称之为一个 RNIC
- 一种是
VerbsVerbs 这个词不好翻译,大致可以理解为访问 RDMA 硬件的一组标准动作- 每一个 Verb 可以理解为一个 Function
Memory Registration(MR)内存注册- RDMA 一共支持三种队列:
- 发送队列(SQ)
- 接收队列(RQ)
- 完成队列(CQ)
使用
Docker 中使用 RDMA 设备
sudo docker run --net=host --device=/dev/infiniband/uverbs0 --device=/dev/infiniband/rdma_cm --ulimit memlock=-1 -t -i <IMAGE ID> /bin/bash说明:
--net=host:配置容器的通信模式为 host- 容器内的应用程序可以直接使用主机的网络接口和网络配置,从而实现与主机相同的网络通信能力
--device=/dev/infiniband/uverbs0和--device=/dev/infiniband/rdma_cm:将 RDMA 对应的用户态字符设备暴露到容器中--ulimit memlock=-1:将 maxlockedmemory 设置为 unlimited 表示不限制非 root 用户锁定内存的数量- 这可以确保 eRDMA 应用程序在非 root 用户下能够锁定所需的内存量,从而有效地使用 eRDMA 功能
- docker 中需要安装 rdma 相关的包:
apt install libibverbs rdma-core librdmacm libibverbs-utils - 参考
最近更新
最新评论