nvm 协议是一种h与ssd之间通讯的协议,它在协议栈中隶属高层服务器网卡
nvm协议是在ci ssd开始大量出现在市场上后,因为各个厂家的私有协议不具有兼容性,无法和现有操作系统无缝衔接,intel为了统一接口协议建立生态,而在2011年发布了nvm协议。nvm的官方定义将其描述为一个开放的标准和信息集合,以充分释放非易失性存储在从移动端到数据中心的所有类型的计算环境中能够提供的优势。nvm从底层开始设计,为当前和未来的nvm技术提供高带宽和低延迟存储访问。
nvm采用了多命令队列 (最大65536个命令队列),每个命令可变数据长度(512b到2mb),同时数据在端内存支持 r 和s g l。nvm协议支持命令间的乱序执行,也支持命令内数据块的乱序传输,同时支持命令队列间的可变权重处理。
和基于传统ata(基于c时代硬盘的接口协议)的sata协议相比,nvme协议做了很多针对多核以及nand存储介质的协议优化。
nvm制定了h与ssd之间通讯的命令,以及命令如何执行的。
nvm有两种命令,一种叫a c,用以h管理和控制ssd;另外一种就是io c,用以h和ssd之间数据的传输。下面是nvm12支持的命令列表:
nvm支持的a c:
nvm支持的io c:
跟ata 中定义的命令相比,nvm的命令个数少了很多,完全是为ssd量身定制的。大家现在别纠结于具体的命令,了解一下就好。
nvm有三种队列命令:s q (sq),c q(cq)和d r (db)。 sq和cq位于h的内存中,db则位于ssd的控制器内部。如下图所示:
sq位于h内存中,h要发送命令时,先把准备好的命令放在sq中,然后通知ssd来取;cq也是位于h内存中,一个命令执行完成,成功或失败,ssd总会往cq中写入命令完成状态。db则是在h发送命令时,不是直接往ssd中发送命令的,而是把命令准备好放在自己的内存中,h就是通过写ssd端的db寄存器来告知ssd命令已经处理完毕,可以前来检阅。流程如下图所示:
①h写命令到sq;
②h写db,通知ssd取指;
③ssd收到通知,于是从sq中取指;
④ssd执行指令;
⑤指令执行完成,ssd往cq中写指令执行结果;
⑥然后ssd发短信通知h指令完成;
⑦收到短信,h处理cq,查看指令完成状态;
⑧h处理完cq中的指令执行结果通过db回复ssd:指令执行结果已处理。
结语:nvm代表非易失性存储接口规范,它是专门为nand 闪存等非易失性存储设计的(尽管它也可以用于较新的非易失性内存,比如3d x),系统可以同时从许多不同的位置读取数据。仅有ssd可以利用nvm提供的并行性。
以上就是本文对nvme协议的介绍和应用范围,希望对大家会有所帮助。想了解更多存储产品需要合作与咨询搭建方案请联系上的在线客服,自2000年成立以来一直在络存储、传输这方面积累、沉淀;经过多年发展与全新的品牌定位,(unicaca)品牌已成为国内外极具实力的数据通讯产品及方案提供商。,请关注: 文章资料来源于:\cnds博客、络等