NVMe-oF协议在结构上可以分为控制面(Control Plane)和数据面(Data Plane)两个部分。控制面主要负责连接建立、队列创建以及设备管理等操作,而数据面则负责实际的数据读写传输。
控制面主要通过管理命令实现。例如,在NVMe-oF建立连接时,Initiator需要首先发送Discover命令获取可用Target信息,然后通过Connect命令建立NVMe-oF会话,如图1所示。在连接建立过程中,双方需要协商队列数量、队列深度以及其他协议参数。在这之后可能会进入认证阶段。完成这些操作后,Initiator才能够通过I/O队列发送读写请求。

图1 建立连接示意图
数据面则负责NVMe I/O命令的传输和执行。在NVMe-oF数据传输过程中,Initiator通过I/O队列向Target发送NVMe命令,而Target在执行命令后返回完成信息。对于数据读写操作,NVMe-oF通常通过RDMA或TCP传输数据。例如,在RDMA模式下,数据可以通过RDMA READ或RDMA WRITE操作在Initiator与Target之间直接传输,从而减少CPU参与度。
通过将控制面与数据面分离,NVMe-oF可以在保持系统灵活性的同时提高数据传输效率。控制面操作通常发生在连接建立或设备管理阶段,而数据面则主要处理高频率的I/O请求。
B站已给出之前的相关性能演示视频,如想进一步了解,请搜索B站用户:专注与守望