内容概要
RDMAP的主要功能是提供RDMA语义,支撑上层用户的Send/RDMA Read/RDMA Write等请求。用户下发这些请求后,软硬件会根据其内容封装出RDMAP的报文发给对端,对端硬件再解析RDMAP报文执行对应的数据搬移操作。
RDMAP协议在iWARP协议栈中的位置
对上层用户的API接口,即之前我们介绍过的Verbs。目前iWARP跟RoCE和Infiniband一样使用libibverbs库提供的同一套接口。Verbs和协议栈的关系如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/2f3bf2c32889a3b8607aca8e7a27c1ce.png)
Verbs API和iWARP协议栈的关系
正文
原文:17. RDMA之RDMAP(Remote Direct Memory Access Protocol) - 知乎
本文欢迎非商业转载,转载请注明出处。
本文给大家介绍一下RDMAP协议,请注意它是iWARP协议族(栈)中的一层而不是指RDMA技术。RDMAP主要由RFC 5041描述,之后在2014年IETF又发布了RFC 7306,补充了Atomic和立即数等特性。阅读本文需要《DDP》一文中的前置知识。
概述
RDMAP的全称为Remote Direct Memory Access Protocol,是iWARP协议栈中最靠近用户的一层。向上为中间件或者应用程序提供基于RDMA技术的服务,向下使用DDP(Data Placement Protocol)提供的零拷贝特性。
RDMAP协议在iWARP协议栈中的位置
RDMAP的主要功能是提供RDMA语义,支撑上层用户的Send/RDMA Read/RDMA Write等请求。用户下发这些请求后,软硬件会根据其内容封装出RDMAP的报文发给对端,对端硬件再解析RDMAP报文执行对应的数据搬移操作。
DDP层不依赖于底层的协议,下面可以是TCP/SCTP甚至是UDP,而RDMAP必须依赖于下层的DDP。RDMAP会使用我们之前讲解的DDP报文格式中的ULP预留的域段,所以从报文来看它们之间并没有像TCP/IP协议族各层之间清晰的分界,比如Send with Invalidate操作的报文长这个样子(绿色为RDMAP层相关的域段):
![](https://i-blog.csdnimg.cn/blog_migrate/ea8a6b4a72c5c8b201ad99fee4597835.png)
Send with Invalidate操作的DDP + RDMAP报文格式
术语
Advertisement/Placement/Delivery/ULP/LLP/RNIC...
这些术语已经在《DDP》一文中做过介绍,不再赘述
Verbs
对上层用户的API接口,即之前我们介绍过的