今天小编要和大家分享的是接口,总线,驱动相关信息,接下来我将从一文读懂NVMe的基本原理,micron m600 sata client ssd for mobile computers这几个方面来介绍。
接口,总线,驱动相关技术文章一文读懂NVMe的基本原理
任何新技术的出现都是为了解决当前情况存在的问题。NVMe的出现也是为了解决当前存在的问题。这个问题就是日益快速增长的存储介质性能与传输通道性能太差之间的矛盾。基于SSD的存储设备性能都要上天了,但SAS和SATA接口的性能却没有本质的提升。
目前基于SCSI协议的SAS和SATA只能是单个队列而且每个队列的深度也比较低,分别是254和32的队列深度。而NVMe协议设计之初就考虑了该问题,它的***队列数量可以是64K(65535个命令队列和1个管理队列),而每个队列的深度可以高达64K。与SCSI协议相比,就好比一个乡村的羊肠小路和一个双向八车道的高速公路的差别。
图1 美丽的乡村下路和京港澳高速
NVMe基本原理
为了便于理解主机和NVMe设备的关系,我们这里简化NVMe设备的内部结构。如图2所示为NVMe白皮书中的配图,这里主机称为Host,而NVMe设备称为Controller(控制器)。主机和控制器之间通过共享内存的队列实现交互。
图2 NVMe多队列示意图
NVMe的队列分为2种,其中一种是用于管理的队列,称为Admin Queue(管理队列),仅有一个,另外一种是命令队列(Command Queue),最多可以有65535个。其中命令队列的数量和模式都是通过管理队列来设置的。其中每一个队列实际上是一个队列对,也就是包括两个队列,分别是提交队列(Submission Queue)和完成队列(Completion Queue)。提交队列用于主机端向NVMe设备发送NVMe命令,而完成队列则用于NVMe设备向主机反馈命令执行情况。实际上NVMe还有另外一种模式,就是多个提交队列共享同一个完成队列的情况,本文暂时不做介绍。
NVMe队列及命令的处理流程
上文我们知道NVMe是通过队列传递控制命令和命令等内容的,那么这里的队列实体到底是什么呢?其实这里提交队列和完成队列就是内存的一个区域。在数据结构原理上这里的队列其实是一个环形缓冲区,如图3所示。