《NVM-Express-1_4-2019.06.10-Ratified》学习笔记(1)

材料说明:

文档《NVM-Express-1_4-2019.06.10-Ratified.pdf》来自于NVMe网站:https://nvmexpress.org/

笔记目的是学习NVMe基本概念,为学习NVMe over Fabric打基础,所以当前记录中与PCIe相关的内容,以及其他无关紧要的内容,都先跳过。

1 引言(入门简介)

1.2 内容范围

NVMe基础规格说明书为NVM subsystem中由controller负责的通信 定义寄存器接口。【注:对于NVMe over Fabric来说,使用软件仿真controller,不一定是物理寄存器】。它还定义了可能需要通过controller支持的标准命令集。

controller有三类型,分别具有不同的功能能力:

a)  I/O controllers;

b)  discovery controllers; 【注:NVMe over Fabric重点关注】

c)  administrative controllers.【注:NVMe基础规格说明书 v1.4新增内容,administrative controllers目的是仅提供NVM subsystem管理功能,不支持访非易失存储的逻辑块数据和元数据。实际上administrative controllers提供的NVM subsystem管理功能在I/O controllers上都具有】

在后边的描述中,通常使用术语controller而不是列举出相关controller类型,可能需要结合上下文来判断对应的类型。

1.4 操作原理

NVMe精心设计了有限的接口来解决企业和客户使用基于PCIe固态盘或网络连接设备的系统需求。这些接口提供最佳命令提交和完成路径。包括为便于并行操作而支持到65535个I/O队列,每个I/O队列最大可以支持64k个待处理的命令。另外,还添加了许多企业功能,例如端到端数据保护(兼容知名的T10 DIF和SNIA DIX标准),增强的错误报告,虚拟化。

接口具有如下关键属性特征:

  •  在命令提交或完成路径中无需读取不可缓存/MMIO寄存器;
  • 在命令提交路径中一个MMIO寄存器最大极限的写是非常有必要的;
  • 最大支持到65535个I/O队列,每个I/O队列支持存放65535个待处理的命令【即:每个I/O队列深度是64k】;
  • 每个I/O队列对应一个优先级,具有明确定义的仲裁机制;
  • 确保高效的小I/O操作,完成一个4KB读请求的所有信息都包含在64字节命令自身中;【?-待详细解释】
  • 高效和合理的命令集;
  • 支持MSI/MSI-X和中断聚合;
  • 支持多namespace;
  • 有效的支持像SR-IOV这样的I/O虚拟化架构;
  • 健壮的错误报告和管理能力;
  • 支持多路径I/O和共享namespace。

本NVMe基础规格说明书定义一个寄存器的改进的集,包括以下功能:

  • controller功能能力特征;
  • controller失败状态(命令状态是通过CQ被直接处理的);
  • Admin队列配置(I/O队列配置是用Admin命令处理的);
  • 为有限数量的提交和完成队列使用的门铃寄存器

一个NVMe controller关联单一的一个PCI Function。应用于整个controller的功能能力和设置在Controller Capabilities(CAP)寄存器和Identify Controller数据结构中被表示指出。

一个namespace是大量可以被格式化成多个逻辑块的非易失存储。一个NVMe controller可以支持多个namespace,使用namespace ID来引用。namespace可以使用Namespace Management和Namespace Attachment命令来创建和删除。Identify Namespace数据结构显示具体特定namespace的功能能力和设置。用于namespace ID FFFFFFFFh的所有namespace公共的功能能力和设置通过Identify Namespace数据结构来公告。

NVMe接口基于一个提交和完成队列对机制。命令Command被主机软件放入到一个提交队列Submission Queue(SQ)中,完成Completion被controller放入相应的完成队列Completion Queue(CQ)。多个提交队列可以使用同一个完成队列【注:多个SQ公用一个CQ仅限于NVMe over PCIe,在NVMe over Fabric中SQ和CQ是一对一的关系】。SQ和CQ从内存中申请。

Admin SQ和对应的CQ存在的目的是为了controller管理和控制(例如I/O SQ和CQ的创建和删除,异常终止命令等)。只有Admin Command S

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值