发布时间:2019-08-23
浏览次数:12416次
NVMe 协议是一种Host与SSD之间通讯的协议,它在协议栈中隶属高层:
NVMe协议是在PCIe SSD开始大量出现在市场上后,因为各个厂家的私有协议不具有兼容性,无法和现有操作系统无缝衔接,INTEL为了统一接口协议建立生态,而在2011年发布了NVMe协议。NVMe的官方定义将其描述为“一个开放的标准和信息集合,以充分释放非易失性存储在从移动端到数据中心的所有类型的计算环境中能够提供的优势。NVMe从底层开始设计,为当前和未来的NVM技术提供高带宽和低延迟存储访问。
NVMe采用了多命令队列 (最大65536个命令队列),每个命令可变数据长度(512B到2MB),同时数据在host端内存支持Physical Region Page和Scatter Gather List。NVMe协议支持命令间的乱序执行,也支持命令内数据块的乱序传输,同时支持命令队列间的可变权重处理。
和基于传统ATA(基于PC时代硬盘的接口协议)的SATA协议相比,NVME协议做了很多针对多核host以及NAND存储介质的协议优化。
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:指令执行结果已处理。
结语:NVMe代表非易失性存储接口规范,它是专门为NAND 闪存等非易失性存储设计的(尽管它也可以用于较新的非易失性内存,比如3D XPoint),系统可以同时从许多不同的位置读取数据。仅有SSD可以利用NVMe提供的并行性。
以上就是本文对NVME协议的介绍和应用范围,希望对大家会有所帮助。想了解更多存储产品需要合作与咨询搭建方案请联系官网上的在线客服,CEACENT -- 嘉华众力自2000年成立以来一直在网络存储、传输这方面积累、沉淀;经过多年发展与全新的品牌定位,( CEACENT )嘉华众力品牌已成为国内外极具实力的数据通讯产品及方案提供商。,请关注嘉华众力官网:www.unicaca.com
文章资料来源于:IT168\CNDS博客、网络等
下一篇:剖析阵列卡的RAID技术