【NVMe2.0b 1】介绍NVMe

1. 引言

1.1 概述

NVM Express® (NVMe®)接口允许主机软件与非易失性存储器子系统进行通信。该接口针对所有存储解决方案进行了优化,使用各种传输方式连接,包括PCI Express®、以太网、InfiniBandTM 和光纤通道。本文档中定义的扩展与特定 NVMe Transport 的映射在 NVMe Transport binding 规范中定义。光纤通道的 NVMe Transport binding 规范在INCITS 556 Fibre Channel – Non-Volatile Memory Express - 2(FC-NVMe-2) 中定义。

有关从 1.4 版到 2.0 版的更改概述,请参阅 http://nvmexpress.org/changes以获取描述新功能的文档,包括控制器遵守 2.0 版的强制性要求。

1.1.1 NVM Express® 规范系列

Figure 1显示了 NVM Express 规范在 NVMe™ 系列规范中的相互关系。

Figure 1: NVMe Family of Specifications

在这里插入图片描述

Figure 1 所示的 NVM Express 规范系列结构旨在展示 NVM Express 规范对彼此的适用性,而不是层次结构、协议栈或系统架构。

NVM Express Base (NVMe Base) 规范(即本规范)定义了主机软件通过各种基于内存的传输和基于消息的传输与非易失性内存子系统通信的协议。

NVM Express Management Interface (NVMe-MI) 规范为所有 NVM Express 子系统定义了一个可选的管理接口。

NVM Express I/O Command Set 规范定义了扩展 NVM Express Base 规范的数据结构、features、 log pages、commands 和 status 值。

NVM Express Transport 规范定义了 NVMe 协议(包括控制器属性)与特定传输的绑定。

1.2 范围

该规范定义了一组属性和命令,这些属性和命令组成了与 NVM 子系统中的控制器进行通信所需的接口。这些属性将由使用特定 NVMe 传输的控制器实例实现。该规范还定义了控制器可能支持的 NVMe I/O Sets 的常见方面。

共有三种具有不同功能的控制器(请参阅第3.1.2节):

  1. I/O controllers;

  2. Discovery controllers; and

  3. Administrative controllers.

在本文档中,当可以从上下文中确定适用的控制器类型时,通常使用通用术语控制器而不是枚举特定的控制器类型。

1.3 超出范围

除了 NVM 的使用模型之外,还指定了属性接口和Command Set ,但只是指定了 NVM 子系统的通信接口。因此,本规范没有规定非易失性存储器系统是否用作固态驱动器、主存储器、高速缓冲存储器、备份存储器、冗余存储器等。具体使用模型不在范围内,这是可选的,并且未获得许可。

该规范定义了与实现无关的需求和行为。这些要求和行为的实现超出了本规范的范围。例如,遵循此规范的NVM 子系统可以由直接连接到 fabric 的 SSD、在 fabric 和 PCIe NVMe SSD 之间转换的设备或在通用服务器上运行的软件来实现。

此接口在任何非易失性内存管理(如磨损均衡)之上指定。NVM 技术(如 NAND)的擦除和其他管理任务被抽象化。

本规范不包含有关缓存算法或技术的任何信息。

本规范中提及的其他已发布规范的实现或使用,即使需要符合规范,也超出了本规范的范围(例如 PCI、PCI Express 和 PCI-X)。这包括本文档或任何 NVMe Transport binding 规范提及的 fabric 和其他技术的已发布规范。

1.4 公约

1.4.1 Keywords/关键词

几个关键字用于区分不同级别的需求。

1.4.1.1 mandatory/强制

一个关键字,表示按照本规范定义的要实现的项目。

1.4.1.2 may/可以

一个关键字,表示选择的灵活性,没有隐含的偏好。

1.4.1.3 obsolete/废弃

一个关键字,表示在先前版本的 NVM Express 规范中定义并已从本规范中删除的功能。

1.4.1.4 optional/可选

描述本规范不需要的功能的关键字。但是,如果实现了规范定义的任何可选特性,则该特性应以规范定义的方式实现。

1.4.1.5 R

当图形或表格没有为完整的单词“reserved”提供足够的空间时,“R”用作“reserved”的缩写。

1.4.1.6 reserved/保留

一个关键字,指的是为将来的标准化预留的位、字节、字、字段和操作码值。它们的使用和解释可能会在未来对该规范或其他规范的扩展中指定。保留位、字节、字、字段、属性或寄存器应清除为 0h,或根据本规范的未来扩展。命令或寄存器写入的接收者不需要检查保留位、字节、字或字段。接收到命令中定义字段中的保留编码值应报告为错误。将保留的编码值写入控制器属性字段会产生未定义的结果。

1.4.1.7 shall/将

表示强制性要求的关键字。设计人员必须实施所有此类强制性要求,以确保与符合规范的其他产品的互操作性。

1.4.1.8 should/应该

一个关键字,表示选择的灵活性以及强烈首选的替代方案。相当于词语“推荐”。

1.4.2 数值说明

基于 0 的值是一种编号方案,其中数字 0h 表示 1h 的值,1h 表示 2h,2h 表示 3h,等等。在这种编号方案中,没有方法来表示 0h的值。除非另有说明,否则本规范中的值是从 1 开始的(即,数字 1h 表示 1h 的值,2h 表示 2h 等)。

大小值以二进制单位或十进制单位显示。用于表示这些值的符号如 Figure 2 所示。

Figure 2: Decimal and Binary Units
DecimalBinary
SymbolPower (base-10)SymbolPower (base-2)
kilo / k103kibi / Ki210
mega / M106mebi / Mi220
giga / G109gibi / Gi230
tera / T1012tebi / Ti240
peta / P1015pebi / Pi250
exa / E1018exbi / Ei260
zetta / Z1021zebi / Zi270
yotta / Y1024yobi / Yi280

^ 运算符用于表示该数字、符号或表达式的幂。

一些参数被定义为 ASCII 字符串。ASCII 字符串应仅包含 20h 到 7Eh 的代码值。对于字符串“Copyright”,字符“C”是第一个字节,字符“o”是第二个字节,依此类推。字符串左对齐,必要时应在右侧填充空格(ASCII 字符 20h) .十六进制 ASCII 字符串是使用代码值子集的 ASCII 字符串:“0”到“9”,“A”到“F”大写,“a”到“f”小写。

十六进制(即以 16 为基数)数字以小写“h”后缀书写(例如 0FFFh、80h)。大于八位的十六进制数用下划线字符表示,每组八位数字之间分开(例如,1E_DEADBEEFh)。

二进制(即以 2 为底)数字以小写“b”后缀书写(例如 1001b、10b)。大于四位的二进制数用下划线字符分隔每组四位数字(例如,1000_0101_0010b)。

所有其他数字都是十进制的(即以 10 为底)。在本规范中,十进制数由任何仅由西方阿拉伯数字 0 到 9 组成的数字序列表示,而不是紧跟小写 b 或小写 h(例如 175)。本规范使用以下约定来表示十进制数:

  1. 小数分隔符(即,分隔数字的整数部分和小数部分)是句点;

  2. 千位分隔符(即,在数字的一部分中分隔三个十进制数字组)是逗号;

  3. 千位分隔符仅用于数字的整数部分,而不用于数字的小数部分;

  4. 一年的十进制表示不包括逗号(例如,2019 而不是 2,019)。

1.4.3 Byte, Word, 和 Dword 的关系

Figure 3 说明了bytes、words和dwords之间的关系。一个 qword(四字节)是一个数据单元,其大小是一个word的四倍;
由于篇幅限制,未图示。除非另有说明,否则本规范以 little endian 格式指定数据。

Figure 3: Byte, Word, and Dword Relationships

在这里插入图片描述

1.5 定义

1.5.1 Admin Queue

Admin Queue 是标识符为 0 的 Submission Queue 和 Completion Queue 。Admin Submission Queue 和相应的 Admin Completion Queue 分别用于提交 administrative commands 和接收这些administrative commands 的完成。

Admin Submission Queue 与 Admin Completion Queue 唯一关联。

1.5.2 Administrative controller

公开允许主机管理 NVM 子系统的 capabilities 的控制器。Administrative 控制器不实现 I/O 队列,不提供对与非易失性内存存储介质上的用户数据相关的数据或元数据的访问,也不支持命名空间(即,从来没有任何active NSID)附加到 Administrative 控制器。

1.5.3 arbitration burst/仲裁突发

仲裁机制一次可以从 Submission Queue 中获取的最大命令数。

1.5.4 arbitration mechanism/仲裁机制

用于确定接下来选择哪个 Submission Queue 以获取命令以供控制器执行的方法。请参阅第 3.4.4 节。

1.5.5 association/关联

特定控制器和特定主机之间的排他通信关系,包含该控制器的 Admin Queue 和所有 I/O Queues。

1.5.6 audit/审查

访问media以确定 sanitize 操作的正确操作的过程。请参阅第 8.21 节和 ISO/IEC 27040。

1.5.7 authentication commands/认证命令

用于指代 Fabrics Authentication Send 或 Authentication Receive 命令。

1.5.8 cache/缓存

NVM 子系统使用的数据存储区域,host 不可访问,并且可能包含存储在非易失性介质中的user data的子集,或者可能包含未提交到非易失性介质的user data。

1.5.9 candidate command/候选命令

候选命令是已提交的命令,它已被传输到控制器并且控制器认为已准备好进行处理。

1.5.10 capsule/胶囊

NVMe over Fabrics 中使用的 NVMe 信息交换单元。胶囊包含命令或响应,并且可以选择包含命令/响应数据和 SGL。

1.5.11 Channel/通道

通道表示控制器和 NVM 子系统中的一个或多个Media Units之间的通信路径。

1.5.12 command completion

当控制器已完成对命令的处理、已更新完成队列条目中的状态信息并将完成队列条目发布到相关的Completion Queue 时,命令完成。

1.5.13 command submission

对于基于Memory的传输模型(例如 PCIe)实现,当 Submission Queue Tail Doorbell 写入完成时提交命令,该写入将 Submission Queue Tail Pointer 值移动到放置命令的 Submission Queue slot 之外。

对于基于Message的传输模型(例如 NVMe over Fabrics)实现,当主机将胶囊添加到 Submission Queue 时会提交命令。

1.5.14 controller/控制器

控制器是主机和 NVM 子系统之间的接口。控制器分为三种类型:

  1. I/O controllers;

  2. Discovery controllers; 和

  3. Administrative controllers.

控制器在 Submission Queue 上执行主机提交的命令,并在 Completion Queue 上发布完成。所有控制器都实现了一个 Admin Submission Queue 和一个 Admin Completion Queue。根据控制器类型,控制器还可以实现一个或多个 I/O Submission Queues和 I/O Completion Queues。当 PCI Express 用作传输时,控制器就是 PCI Express function。

1.5.15 directive/指令

主机与 NVM 子系统或控制器之间的一种信息交换方法。可以使用 Directive Send 和 Directive Receive 命令传输信息。I/O 命令的子集可以包括 Directive Send 字段和 Directive Specific 字段,以传达更多特定于关联 I/O 命令的信息。请参阅第 8.7 节。

1.5.16 Discovery controller

公开允许主机检索 Discovery Log Page 的 capabilities 的控制器。Discovery controller 不实现 I/O 队列或提供对非易失性内存存储介质的访问。请参阅第 3.1.2.3 节。

1.5.17 Discovery Service

仅支持 Discovery controllers 的 NVM 子系统。Discovery Service 不应支持公开命名空间的控制器。

1.5.18 dynamic controller/动态控制器

控制器是按需分配的,没有从先前的关联中保留状态(例如,Feature settings)。

1.5.19 Domain/域

domain 是共享状态(例如 power state、容量信息)的最小不可分割单元。

1.5.20 emulated controller/仿真控制器

在软件中定义的 NVM Express 控制器。仿真控制器可能有也可能没有底层物理 NVMe 控制器(例如,物理的 PCIe function)。

1.5.21 Endurance Group/ Endurance Group

NVM 子系统中 NVM 的一部分,其耐久性作为一个组进行管理。请参阅第 3.2.3 节。

1.5.22 fabric (network fabric)

一种网络拓扑,其中节点相互传递数据。

1.5.23 firmware/boot partition image update command sequence

一个或多个 Firmware Image Download 命令的序列,用于下载固件映像或引导分区映像,然后是接 Firmware Commit 命令,该命令将下载的映像提交到 firmware slot 或 boot partition。

1.5.24 firmware slot/固件插槽

固件插槽是域中用于存储固件映像的位置。域存储一到七个固件映像。同一域中的控制器共享相同的固件插槽。

1.5.25 host/主机

通过一个或多个控制器与 NVM 子系统接口并将命令提交到 Submission Queues 并从 Completion Queues 检索命令完成的实体。

1.5.26 host-accessible memory/主机可访问内存

主机能够访问的内存(例如,主机内存、Controller Memory Buffer (CMB)、Persistent Memory Region (PMR))。

1.5.27 host memory

可由主机和控制器读取和写入且没有被控制器公开的内存(即,Controller Memory Buffer 或 Persistent Memory Region)。主机内存可以在主机内部或外部实现(例如,由既不是主机也不是控制器的设备公开的内存区域)。

1.5.28 Identify Controller data structures

能够通过 identify 命令检索的所有控制器数据结构:Identify Controller data structure (即,CNS 01h)和每个 I/O Command Set 特定的 Identify Controller data structure(即,CNS 06h)。

1.5.29 Identify Namespace data structures

能够通过 Identify 命令检索的所有命名空间数据结构:Identify Namespace data structure(即,CNS 00h)、I/O Command Set Independent Identify Namespace data structure(即,CNS 08h)和每个 I/O Command Set 特定的 Identify Namespace data structures(即 05h)。

1.5.30 I/O command

I/O 命令是提交到 I/O Submission Queue的命令。

1.5.31 I/O Completion Queue

I/O Completion Queue是一个 Completion Queue,用于指示命令完成并与一个或多个 I/O Submission Queues 相关联。

1.5.32 I/O controller

实现 I/O 队列的控制器,旨在用于访问非易失性内存存储介质。

1.5.33 I/O Submission Queue

I/O Submission Queue 是一个 Submission Queue,用于提交 I/O 命令以供控制器执行(例如,NVM Command Set 的Read、Write)。

1.5.34 Media Unit/介质单元

介质单元代表 NVM 子系统中底层媒体的一个组件。 Endurance Group 由介质单元组成。

1.5.35 metadata/元数据

元数据是与格式化的user data 相关的上下文信息(例如,特定的 LBA 数据)。如果存储空间由控制器提供,则主机可以包括要由 NVM 子系统存储的元数据。有关详细信息,请参阅适用的 I/O Command Set 规范。

1.5.36 namespace/命名空间

可以由主机直接访问的格式化的非易失性存储器的数量。

1.5.37 Namespace ID (NSID)

控制器用来提供对命名空间或 SQE 中包含namespace identifier的字段名称的访问标识符(参见Figure 87)。valid NSID、invalid
NSID、active NSID、inactive NSID、allocated NSID 和 unallocated NSID 的定义参见 3.2.1 节。

1.5.38 NVM

NVM 是 non-volatile memory 的首字母缩写。

1.5.39 NVM Set

来自 Endurance Group 的 NVM 的一部分。请参阅第 3.2.2 节。

1.5.40 NVM subsystem

NVM 子系统包括一个或多个域、一个或多个控制器、零个或多个命名空间以及一个或多个端口。NVM子系统可以包括非易失性存储器存储介质以及NVM子系统中的控制器与非易失性存储器存储介质之间的接口。

1.5.41 NVM subsystem port

NVM 子系统和 fabric 之间的 NVMe over Fabrics 协议接口。NVM 子系统端口是一个或多个物理 fabric 接口的集合,它们一起充当单个接口。

1.5.42 NVMe over Fabrics

NVM Express 接口的实现,它符合基于内存的传输模型定义的仅消息或消息/内存的实现(参见Figure 4 和第 2.2 节)。

1.5.43 NVMe Transport

在主机和 NVM 子系统之间提供可靠的数据、命令和响应传递的协议层。NVMe 传输层位于fabric 之上。它独立于 fabric 物理互连和底层 fabric 协议层。

1.5.44 NVMe Transport binding specification

用于 NVMe Transport的主机和 NVM 子系统之间可靠传递数据、命令和响应的规范。binding 可能会根据 NVMe Transport 的
capabilities 排除或限制功能。

1.5.45 physical fabric interface (physical ports)

NVM 子系统和 fabric 之间的物理连接。

1.5.46 Port ID

与 NVM 子系统端口关联的标识符。请参阅第 2.2.2 节。

1.5.47 primary controller/主控制器

支持 Virtualization Management 命令的 NVM Express 控制器。一个 NVM 子系统可能包含多个主控制器。NVM 子系统中的辅助控制器依赖于主控制器进行动态资源管理(请参阅第 8.26 节)。

支持 NVM Express 接口和 Virtualization Enhancements capability 的 PCI Express SR-IOV Physical Function 是主控制器的一个示例(请参阅第 8.26.4 节)。

1.5.48 private namespace/私有命名空间

一次只能附加到一个控制器的命名空间。请参阅 Figure 280 中的 Namespace Multi-path I/O 和 Namespace Sharing Capabilities (NMIC) 字段。

1.5.49 property/属性

为 NVMe over PCIe 定义的内存映射控制器寄存器的概括。属性用于配置低级控制器属性并获取低级控制器状态。

1.5.50 rotational media/旋转介质

将数据存储在旋转盘片上的介质(请参阅第 8.20 节)。

1.5.51 Runtime D3 (Power Removed)

在Runtime D3 (RTD3) 中,主power从控制器中移除。可以提供也可以不提供辅助power。对于 PCI Express,RTD3
是 D3cold power state(请参阅第 8.15.4 节)。

1.5.52 sanitize operation/sanitize 操作

更改 NVM 子系统中的所有 user data的过程,使得从任何缓存或非易失性介质中恢复先前的user data 对于给定努力水平是不不可行的(参见 ISO/IEC 27040)。

1.5.53 secondary controller/辅助控制器

一种 NVM Express 控制器,它依赖于 NVM 子系统中的主控制器来管理某些控制器资源(请参阅第 8.26 节)。

支持 NVM Express 接口并从主控制器接收资源的 PCI Express SR-IOV Virtual Function 是辅助控制器的示例(请参阅第 8.26.4 节)。

1.5.54 shared namespace/共享命名空间

可以同时附加到 NVM 子系统中的两个或多个控制器的命名空间。请参阅 Figure 280 中Namespace Multi-path I/O 和 Namespace Sharing Capabilities (NMIC) 字段。

1.5.55 spindown/降速

对于将数据存储在旋转介质上的 Endurance Group,将主轴从可操作的power state更改为不可操作的power state的过程(请参阅第 8.20 节)。

1.5.56 spinup/提速

对于与旋转介质相关的 Endurance Group,将主轴从不可操作的power state更改为可操作的power state的过程(请参阅第 8.20 节)。

1.5.57 static controller/静态控制器

控制器预先存在特定的 Controller ID,并且其状态(例如,Feature settings)在先前的关联中保留。

1.5.58 user data/用户数据

存储在命名空间中的数据,它由主机可以存储并稍后检索的数据组成,包括元数据(如果支持)。

1.6 I/O Command Set specific definitions used in the NVMe Base specification

本规范中使用的以下术语在每个 I/O Command Set 规范中定义。

1.6.1 Endurance Group Host Read Command

导致控制器读取 user data 的 I/O Command Set 特定命令,可能不会将数据返回到主机。

1.6.2 Format Index/格式索引

用于索引到 I/O Command Set Specific Format 表的值(即,User Data Format编号)。

1.6.3 SMART Data Units Read Command

导致控制器读取 user data 的 I/O Command Set 特定命令,可能不会将数据返回到主机。

1.6.4 SMART Host Read Command

导致控制器读取 user data 的 I/O Command Set 特定命令,可能不会将数据返回到主机。

1.6.5 User Data Format

描述 NVM 介质上数据布局的 I/O Command Set特定格式。

1.6.6 User Data Out Command

导致控制器写入用户数据的 I/O Command Set特定命令,可能不会将用户数据从主机传输到控制器。

1.7 NVM Command Set specific definitions used in this specification

本规范中使用的以下术语在 NVM Command Set 规范中定义。这些术语在整个文档中用作特定 I/O Command Set 的示例。

1.7.1 logical block/逻辑块

Read和Write命令的最小可寻址数据单元。

1.7.2 logical block address (LBA)/逻辑块地址

逻辑块的地址,通常称为 LBA。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值