第6章 NVMe 介绍 6.1-6.3

6.1 AHCI 到 NVMe

        AHCI协议。NVMe协议。

        HDD 和早期的 SSD 绝大多数都是使用SATA接口,跑的是AHCI,它是一种系统接口标准。

        后来,AHCI 和 SATA 不能满足高性能和低时延 SSD 的需求,SSD 需要更快、更高效的协议和接口。因此 NVMe 出现了。

        NVMe 出现之前,SSD 绝大多数用的是 AHCI + SATA 的组合。

  1. 什么是NVMe???

  答:NVMe,即Non-Volatile Memory Express,是非易失性存储器标准,是跑在PCIe接口上的协议标准。

  2. NVMe 和 AHCI 相比,它的优势体现在哪里???

  (1)低时延(Latency)

第6章 NVMe 介绍 6.1-6.3_第1张图片

   (2)高性能(Throughput&IOPS)

第6章 NVMe 介绍 6.1-6.3_第2张图片

   (3)低功耗

        NVMe加入了自动功耗状态切换和动态能耗管理功能。第八章具体介绍。

6.2 NVMe 综述

      NVMe是一种主机(Host) SSD 之间通信的协议,它在协议栈中隶属高层。

第6章 NVMe 介绍 6.1-6.3_第3张图片

       NVMe 作为命令层和应用层协议,理论上可以适配在任何接口协议上。但 NVMe 协议的原配是 PCIe,因此,后续章节都是基于NVMe + PCIe。

        NVMe 所制定的任何命令,都交给PCIe去完成。虽然也可以交给别的接口完成,但交给PCIe的性能好。

        NVMe定制了主机和 SSD 之间通信的命令以及命令是如何执行的NVMe有两种命令:一种是Admin命令,用以主机管理和控制 SSD;一种是 I / O 命令,用以主机和 SSD之间数据的传输。

 第6章 NVMe 介绍 6.1-6.3_第4张图片

命令有了,主机是如何把这些命令发送给 SSD 执行的呢???

答:NVMe有三宝:Submission Queue(SQ)、Completion Queue(CQ)和 Doorbell Register(DB)。SQ 和 CQ 位于主机的内存中,DB 位于 SSD 的控制器内部。

        图中,NVMe子系统一般就是SSD。

第6章 NVMe 介绍 6.1-6.3_第5张图片

第6章 NVMe 介绍 6.1-6.3_第6张图片

即,SQ 是用来放命令的,并通知SSD来取命令;CQ 是命令执行完之后存放命令的执行状态的;DB 是用来通知 SSD 来获取命令并执行的。 

NVMe 是如何处理命令的???

答:一共需要八步。

        第一步:主机写命令到 SQ;

        第二步:主机通过写 SQ 的 Tail DB,通知 SSD 来取命令;

        第三步:SSD 收到命令后,到 SQ 中取命令;

        第四步:SSD 执行指令;

        第五步:指令执行完成,SSD往CQ中写指令执行的结果;

        第六步:SSD发中断通知主机指令完成;

        第七步:收到中断,主机处理CQ,查看指令的完成状态;

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

6.3 SQ、CQ 和 DB

      主机往 SQ 中写入命令,SSD 往 CQ 中写入命令完成的结果。SQ 和 CQ 的关系,可以是一对一,也可以是多对一。

SQ 和 CQ 的种类:

(1)Admin 类型。放 Admin 命令,用以主机管理控制 SSD;

(2)IO 类型。放 IO 命令,用以主机和 SSD 之间的数据传输。

IO SQ / CQ 是通过 Admin 命令创建的。

        主机端每个 CPU 核(Core)可以有一个或多个 SQ,但只有一个 CQ。为什么一个CPU核中要分配多个SQ呢?原因如下:

 原因一:性能需求。一个CPU核中有多线程,可以做到一个线程独享一个SQ;

 原因二:QoS,Quality of Service,即服务质量。

可以有一个或多个 SQ,但只有一个 CQ。为什么一个 CPU 核中要分配多个 SQ 呢?

SQ/CQ小结:

第6章 NVMe 介绍 6.1-6.3_第7张图片

DB 小结:

第6章 NVMe 介绍 6.1-6.3_第8张图片

你可能感兴趣的:(SSD入门学习,嵌入式硬件)