【RDMA学习笔记】1:RDMA(Remote Direct Memory Access)介绍

从帝国理工的PPT学习。

什么是RDMA

Remote Direct Memory Access,也就是Remote的DMA,是一种硬件机制,能直接访问远端结点的内存,而不需要处理器介入。

其中:

  • Remote:跨node进行数据传输
  • Direct:不需要CPU或者OS kernel介入
  • Memory:从两个node各自app的虚拟地址空间直接传输数据
  • Access:支持send、receive、read、write、atomic operation

RDMA的优点

也就说明了适用场景

  • 较高的高吞吐量(带宽)
  • 较低的E2E时延
  • 较低的CPU适用:单侧的RDMA操作完全不需要remote CPU参与)
  • 较低的内存总线争用:user space和kernel之间完全不拷贝数据)
  • 异步操作:所以很适合overlapping的通信和计算

传统的TCP/IP vs RDMA

可以看到RDMA绕过kenel mode的同时也bypass了这些协议栈

协议栈对比

RDMA网络栈

准备阶段:设置RDMA的data channels

buffer在使用前需要在网卡那边注册一下,具体地,在注册阶段需要:

  • Pin memory,保证这块memory不会被OS swap出去
  • 将地址转换信息存到NIC里
  • 对这段memory region设置权限
  • 返回remote key和local key,这是给adapter在执行RDMA操作时用的

工作队列

RDMA通信是基于Send、Receive、Completion这三种队列的,其中Send和Receive的queue属于work queue,总是以Queue Pair的形式被创建。SQ和RQ用于schedule work,当work完成时,CQ用于通知。

在工作时,应用会issue一个work request,这个struct包含了指向一个buffer的指针:

  • 对于SQ,指向要发送的消息
  • 对于CQ,指向了incoming message要放入的位置

而一旦一个work request完成了,那么adapter就会往CQ里塞一个元素。

支持RDMA的网络协议

IB (InfiniBand)、RoCE (RDMA over Converged Ethernet)、iWARP (internet Wide Area RDMA Protocol)

RDMA只是一种机制

并没有指定data transfer的语义,RDMA网络支持两种访问模型:

Two Sided:RDMA send & receive

这是最传统的消息传递模式,消息源和目标方都积极地参与通信。

双方都需要创建:

  • 一对QP (SQ+CQ),用于发送和接收
  • 给这对QP用的CQ

发送方的work request会指向要传输的buffer,然后把这个WQE塞到SQ里发过去。

接收方的work request会指向一个empty buffer用于接收数据,通过这种方式WQE会被添加到对应的RQ里。

在send+receive完成之后,也就是直接写入了remote的registered memory,然后双方的CQ里都会被添加一个CQE表示完成了。

One Sided:RDMA read & write + atomic操作

只有发起方是活动的,接收方是纯被动的,不会issue任何操作,也不会有CPU cycle,甚至完全不会感知到有read/write发生了。

如果要发起RDMA read/write,那么work request必须包含:

  • 远端目标内存的虚拟地址
  • 远端的memory registration key

也就是说要使用RDMA read/write,发起方必须事先就知道这两个knowledge。

基于RDMA的上层协议

RDMA有很多好处,但也因为开发者需要使用它的Verbs API带来了额外的复杂性。

相关推荐
流浪00117 小时前
计算机网络篇23:数据链路层——以太网帧格式与 MAC 地址,MTU 牵住 UDP 和 TCP,ARP 拿 IP 换 MAC
计算机网络·mac·数据链路层·arp·mtu·局域网通信
老秦包你会1 天前
计算机网络第二课 ----Socket(套接字)编程预备
开发语言·计算机网络·php
say_fall2 天前
【Linux网络编程】计算机网络基础:局域网与广域网、OSI七层模型与TCP/IP五层模型、封装解包与MAC/IP地址、端口号与socket编程接口
linux·网络·tcp/ip·计算机网络·信息与通信
流浪0012 天前
计算机网络篇21:网络层——网段划分与子网掩码,从分类地址到 CIDR 与可用主机数
计算机网络·子网划分·nat·子网掩码·cidr·网络层协议
咔_2 天前
有IPv6地址,为什么外面还是连不进来?让同一台服务分别卡在四个位置
linux·计算机网络
流浪0012 天前
计算机网络篇22:网络层——公网的三级地址划分与逐跳转发,从私网出口替换到 IP 分片组装
tcp/ip·计算机网络·路由器·公网搭建·报文分篇
Java成神之路-3 天前
TCP Socket 与 UDP Socket
tcp/ip·计算机网络·udp
流浪0014 天前
计算机网络篇20:网络层——IP 协议的定位与 IPv4 报头字段,从 20 字节首部到 TTL 防环
tcp/ip·计算机网络·ttl·网络层协议·ip报头
流浪0015 天前
计算机网络篇17:传输层——TCP 超时重传、三次握手与四次挥手,TIME_WAIT 为什么要等 2MSL
网络协议·tcp/ip·计算机网络·三次握手·四次挥手·超时重传
流浪0016 天前
计算机网络篇16:传输层——TCP 报头属性字段:16 位窗口大小撑起流量控制,六个标志位标识报文类型
网络协议·tcp/ip·计算机网络·urg紧急指针·tcp报头