NVME简单理解(一)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/leishen1992/article/details/79970511

         NVMe是什么:NVMe是一种Host与SSD之间通讯的协议,它在协议栈中隶属高层。

 

NVMe制定了Host与SSD之间通讯的命令,以及命令如何执行的。

NVMe有两种命令,一种叫Admin Command,用以Host管理和控制SSD;另外一种就是I/O Command,用以Host和SSD之间数据的传输。下面是NVMe1.2支持的命令列表:

NVMe支持的Admin Command:

NVMe支持的I/O Command:

跟ATA spec中定义的命令相比,NVMe的命令个数少了很多,完全是为SSD量身定制的。大家现在别纠结于具体的命令,了解一下就好。

NVMe有三种队列命令:Submission Queue (SQ),Completion Queue(CQ)和Doorbell Register (DB)。 SQ和CQ位于Host的内存中,DB则位于SSD的控制器内部。如下图所示:

SQ位于Host内存中,Host要发送命令时,先把准备好的命令放在SQ中,然后通知SSD来取;CQ也是位于Host内存中,一个命令执行完成,成功或失败,SSD总会往CQ中写入命令完成状态。DB则是在Host发送命令时,不是直接往SSD中发送命令的,而是把命令准备好放在自己的内存中,Host就是通过写SSD端的DB寄存器来告知SSD命令已经处理完毕,可以前来检阅。流程如下图所示:

             ①Host写命令到SQ;

             ②Host写DB,通知SSD取指;

             ③SSD收到通知,于是从SQ中取指;

             ④SSD执行指令;

             ⑤指令执行完成,SSD往CQ中写指令执行结果;

             ⑥然后SSD发短信通知Host指令完成;

             ⑦收到短信,Host处理CQ,查看指令完成状态;

             ⑧Host处理完CQ中的指令执行结果通过DB回复SSD:指令执行结果已处理。

 

 

 

 

 

阅读更多

没有更多推荐了,返回首页