NVMe RDMA协议阅读

以下内容基于NVMe RDMA Transport Specification 1.0a-2021.7.6-ratified-1. pdf

RDMA命令列表:

RDMA Local Invalidate

RDMA Read

RDMA Send

RDMA Send Invalidate

RDMA Write

传输绑定

设置与初始化

管理命令中的Get log Page命令DWord10里有一项Log Page Identifier,指明了要查询的log page类型,其中有一种Discovery Log Page类型。

只有Discovery controllers支持Discovery Log Page。其他暴露namespace的controller都不能支持Discovery Log Page。

Discovery Log Page的具体格式详见NVMe Base version 5.16.1.23

在Discovery Log Page Entry中有一个TSAS字段(Transport Specific Address Subtype),占了256字节:

 Discovery Log Page Entry中根据RDMA_CMS(RDMA Connection Management Service)而定的字段解释如下:

在RDMA传输中,必须使用RDMA_IP_CM,也必须在TRSVCID字段给出一个TCP端口号,主机和NVM子系统必须有IP地址,否则无法建立连接。

IANA组织中已经将UDP端口号4420和TCP端口号4420分配给NVMe-oF。NVMe/RoCEv2控制器默认使用UDP port 4420,NVMe/iWARP控制器默认使用TCP port 4420。

Fabric相关的设置:

IRD( Inbound RDMA Read Queue Depth)

RNR_RETRY_COUNT

(RDMA_CM private data在哪个命令里?)

队列

一个IO SQ和CQ对与一个RDMA QP相对应。不支持多对一、一对多、多对多的情况。

数据传输

主机和控制器之间通过RDMA_SEND或者RDMA_SEND_INVALIDATE传输Command capsules。一次RDMA_SEND操作只能携带一个命令或一个回复。

所有的RDMA_READ和RDMA_WRITE操作都只能由控制器发起。

数据也可能和命令一起,包含在同一个RDMA_SEND里,这种数据是in-capsule数据。

主机缓存可以通过SGL entries表示,包括memory key, offset和length。

Capsule中可以携带SGL(s),也可以携带data,但是只能携带,一种,不能既有SGL(s)又有data。

RDMA_WRITE数据都传输完成后才能给相应的RDMA QP发送回复包。命令、RDMA_WRITE/RDMA_READ、回复都使用相同的QP。

RDMA Capsule:

RDMA传输不支持主机内存中的SGL,所有的SGL都要包含在command capsule中。SQE后面紧跟SGL。

Fabrics和Admin命令只有一个Transort SGL Block descriptor或者keyed SGL Data Block descriptor。IO命令可以有多个SGL descriptor。

控制器应该支持SGL,并且不能强制要求对齐以及数据块的粒度。(??待考证,Identify Controller中的SGL Support字段可以指定dward alignment和granularity,参考NVMe Base Specification Figure 121。)

RDMA Capsule是长度和支持的SGL:

(这个IOCCSZ是Identify命令里的一个字段,指示IO command的长度)

Command Capsule

Command Capsule中SQE与data和SGL的关系:

SGL必须紧跟在SQE后面;Identify Controller结构中的ICDOFF字段规定了最多可以容纳的SGL entry数量;

如果ICDOFF字段不为0,那么data与SQE之间间隔与ICDOFF有关

MR的管理

主机负责注册MR。

RKEY有两种方式作废:本地失效和远程失效。

主机通过将Keyed SGL Data Block descriptor的Sub Type字段设为Fh来设置远程失效。Sub Type字段的含义如下图:

如果控制器不支持这种远程失效放, 那么就会忽略这个设置。

如果一个command capsule中包含了多个SGL entry,那么控制器只会将最后一个Keyed SGL Data descriptor的RKEY失效。

控制器通过发送RDMA_SEND_INVALIDATE类型的回复包来设置RKEY失效。

如果主机设置了远程失效,但是控制器没有对这个RKEY做invalidate设置,那么主机要在本地设置失效。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值