NVMe 原理 - 命令的处理

低功耗蓝牙项目,需要一块懂省电的板

思澈 SF32LB52 芯片,BLE 协议栈深度优化,上手即开发

蛋蛋读NVMe之一 (ssdfans.com)

NVMe 所处层次

img

NVMe是一种Host与SSD之间通讯的协议,它在协议栈中隶属高层。NVMe在协议栈中处于应用层或者命令层。

NVMe是为SSD所生的。NVMe出现之前,SSD绝大多数走的是AHCI和SATA的协议,后者其实是为传统HDD服务的。与HDD相比,SSD具有更低的延时和更高的性能,AHCI已经不能跟上SSD性能发展的步伐了,已经成为制约SSD性能的瓶颈。既然SATA接口速度太慢,我用PCIe好了,不过上层协议还是AHCI。AHCI只有一个命令队列,最多同时只能发32条命令。SSD需要PCIe,更需要NVMe。

NVMe 传输模型分类

主机和NVM子系统之间有两个定义的通信结构:

  • 一个是基于内存的传输模型
  • 一个是基于消息的传输模型。基于消息的传输模型有两种子类型:
    • 仅消息传输模型
    • 消息/内存传输模型

不同模型在命令、响应、数据传输方式的不同:

  • 在基于内存的传输模型中,命令、响应和数据通过显式的内存读写操作在主机和NVM子系统之间输。
  • 基于消息的传输模型是指在主机和NVM子系统之间发送包含命令胶囊和响应胶囊的消息。
    • 在纯消息传输模型中,数据仅使用胶囊或消息在主机和NVM子系统之间发送。
    • 基于消息/内存的传输模型使用消息和显式内存读写操作的组合来在主机和NVM子系统之间传输命令胶囊、响应胶囊和数据。数据可以选择性地包含在命令胶囊和响应胶囊中

img

NVMe 命令

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

NVMe有两种命令

  • 一种叫Admin Command,用以Host管理和控制SSD;

  • 另外一种就是

    I/O Command

    ,用以Host和SSD之间数据的传输。

    • namespace 命名空间是主机可以访问的一组格式化的非易失性内存。与每个命名空间相关联的是在该命名空间上操作的I/O命令集。一个NVM Express控制器可以支持使用命名空间ID引用多个命名空间。

在NVMe 2.0规范中命令集分为了三种:

NVMe 2.0 规范

  • Fabrics Command:fabric命令集命令用于特定于NVMe over fabric的操作,包括建立连接、NVMe带内认证、获取或设置属性。

NVMe 命令的发送

Host又是怎么把这些命令发送给SSD执行呢?

NVMe协议中的三种队列:Submission Queue (SQ),Completion Queue(CQ)和Doorbell Register (DB)

SQ和CQ位于Host的内存中,DB则位于SSD的控制器内部。

SSD作为一个PCIe Endpoint通过PCIe连着Root Complex (RC), 然后RC连接着CPU和内存

NVMe 命令的处理

img

说,NVMe处理命令需要几步?答:八步:

第一步:Host写命令到SQ;

第二步:Host写DB,通知SSD取指;

第三步:SSD收到通知,于是从SQ中取指;

第四步:SSD执行指令;

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

第六步:然后SSD发短信通知Host指令完成;

第七步:收到短信,Host处理CQ,查看指令完成状态;

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

低功耗蓝牙项目,需要一块懂省电的板

思澈 SF32LB52 芯片,BLE 协议栈深度优化,上手即开发

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值