NVMe之命令

来源:互联网 发布:java安装环境变量设置 编辑:程序博客网 时间:2024/05/21 05:20

         NVMe有两种命令:admin命令和I/O命令。admin命令时用以Host管理和控制SSD的,而I/O命令用于Host与SSD之间的数据传输。

        NVMe Driver支持以下admin处理和命令:DeleteI/O Submission Queue,CreateI/O Submission Queue,GetLog Page,DeleteI/O Completion Queue,CreateI/O Completion Queue,Identify,NamespaceAttachment,Abort,SetFeatures,GetFeatures,AsynchronousEvent Request,NamespaceManagement,FirmwareCommit,FirmwareImage Download,KeepAlive,FormatNVM。

        NVMe Driver支持以下的I/O命令:Flush,WRITE,READ,WRITE_ZEROES,DATASET_MANAGEMENT,RESERVATION_REGISTER,RESERVATION_REPORT,RESERVATION_ACQUIRE,RESERVATION_RELEASE

        Host是如何将这些命令发送给SSD呢?

        这里涉及到我们下一篇中要说的队列管理。这里我们首先需要知道三个概念:SQ(Submission Queue,提交队列),CQ(Completion 队列)以及门铃寄存器DB。SQ与CQ组成了一个队列对,熟悉InfiniBand的童鞋应该觉得很熟悉,是的,这里的队列对与InfiniBand中的队列对作用十分相似。在NVMe中,SQ和CQ其实是在Host的内存中创建的,而DB则是SSD端的一个寄存器。


       命令的执行过程如下图所示:

       


          简单来说,上述步骤如下:

第一步:Host写命令到SQ

第二步:HostDB通知Controller指;

第三Controller收到通知,于是从SQ中取指;

第四Controller执行指令

第五步:指令执行完成 ControllerCQ中写指令执行结果;

第六Host轮询monitor检查指令执行结果

第七:状态变化时,Host处理CQ,查看指令完成状态;

       第八步:Host处理完CQ中的指令执行结果,通过DB回复SSD:指令执行结果已处理

参考:http://www.ssdfans.com/?p=1086


0 0