续上一篇,在RDMA连接建立完成后,Initiator可发起NVMe-oF命令请求。本文系统采用基于RDMA Send + RDMA Read的命令执行机制,其具体流程如图3所示。

图3 NVMe-oF建链流程
(1)NVMe-oF Request发送
Initiator通过RDMA Send操作向Target发送NVMe-oF Request Capsule,其中包含NVMe命令信息(如读写类型、逻辑块地址LBA、数据长度等)以及本端数据缓冲区的远程地址与RKey信息。
(2)Target发起 RDMA Read
Target接收到NVMe-oF Request后,解析Capsule内容,提取数据缓冲区的远程地址与RKey。随后,Target中的NVMe-oF模块向RDMA模块发送RDMA Read指令,从Initiator内存中读取Submission Queue Entry(SQE)或数据负载内容。该方式避免了额外的数据拷贝,实现零拷贝传输。
(3)Initiator返回Read Response
在RDMA Read操作过程中,Initiator作为被动方返回RDMA Read Response,将指定内存区域的数据传输至Target。本阶段数据直接写入Target本地内存缓冲区。
(4)Target执行NVMe-oF命令
NVMe-oF模块在获得完整的SQE及数据内容后,在NVMe-oF控制器内创建虚拟队列。
(5)CQE封装与发送
NVMe-oF模块解析SQE信息后,将完成指令NVMe-oF Completion Capsule写入本地缓冲区,并通过RMDA模块将RDMA Send操作发送至Initiator。至此,一次NVMe-oF命令交互完成。
B站已给出之前的相关性能演示视频,如想进一步了解,请搜索B站用户:专注与守望