NVMe协议1.3c(一) 概述

刚开始接触NVMe,对此理解不深,如有错误敬请指出

 

1.1概述

NVM ExpressTM(NVMeTM)接口允许主机软件与非易失性存储器子系统通信。 此接口针对企业和客户端固态驱动器进行了优化,通常作为寄存器级接口连接到PCI Express接口。

注意:在开发期间,此规范称为Enterprise NVMHCI。 但是,在完成之前,该名称已修改为NVM Express基本规范。 此接口适用于客户端和企业系统。

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

 

1.2范围

该规范定义了用于与非易失性存储器子系统通信的寄存器接口。 它还定义了一个与NVM子系统一起使用的标准命令集。

 

1.3范围之外

寄存器接口和命令集是与任何使用NVM的模型分开指定的,这里仅指定与NVM子系统的通信接口。 因此,该规范没有规定非易失性存储器系统是用作固态驱动器,主存储器,高速缓冲存储器,备份存储器,冗余存储器等。具体的使用模型在范围之外,是可选的, 并且没有许可。
此接口在任何非易失性存储器管理之上指定,如损耗均衡。 擦除和其他针对NVM技术的操作进行了抽象。
此规范不包含有关缓存算法或技术的任何信息。
即使符合规范要求,本说明书中提及的其他已发布规范的实现或使用也不在本规范的范围内(例如,PCI,PCI Express和PCI-X)。

 

1.4操作理论

NVM Express可扩展主机控制器接口旨在满足使用基于PCI Express的固态驱动器的企业和客户端系统的需求。 该接口提供优化的命令提交和完成路径。 它支持并行操作,支持多达65,535个IO队列,每个IO队列具有高达64K的未完成命令。 此外,还增加了对端到端数据保护(兼容SCSI保护信息,通常称为T10 DIF和SNIA DIX标准),增强的错误报告和虚拟化等许多企业功能的支持。 该接口具有以下关键属性:

  •在命令提交或完成路径中不需要向uncacheable /MMIO寄存器读取;
  •在命令提交路径中最多需要写入一个MMIO寄存器;
  •支持多达65,535个IO队列,每个I O队列最多支持64K个未完成的命令;
  •具有明确定义的仲裁机制的每个IO队列的优先级;
  •完成4KB读取请求的所有信息都包含在64B命令本身中,确保了有效的小IO操作;
  •高效简化的命令集;
  •支持MSI/MSI-X和中断聚合;
  •支持多个名称空间;
  •对SR-IOV等IO虚拟化架构的高效支持;
  •强大的错误报告和管理功能; 
  •支持多路径IO和命名空间共享。

该规范定义了一组简化的寄存器,其功能包括:

  •指示控制器功能;
  •控制器故障状态(命令状态通过CQ直接处理);
  •管理队列配置(通过Admin命令处理I / O队列配置);
  • Doorbell registers可扩展数量的提交和完成队列。

NVM Express控制器与单个PCI功能相关联。适用于整个控制器的功能和设置在控制器Capabilities (CAP)寄存器和识别控制器数据结构中指示。

命名空间是一系列的非易失性存储器,可以格式化为逻辑块。 NVM Express控制器可以支持使用相同的命名空间ID引用的多个命名空间。可以使用命名空间管理和命名空间附加命令创建和删除命名空间。 Identify Namespace数据结构指示具体的命名空间的功能和设置。功能和设置对所有名称空间通用,由名称空间ID为FFFFFFFFh的Identify Namespace数据结构报告。

NVM Express基于配对的提交和完成队列机制。命令由主机软件放入提交队列。完成由控制器放入相关的完成队列中。多个提交队列可以使用相同的完成队列。提交和完成队列在内存中分配。

一个管理员提交关联一个已存在的完成队列以用于控制器管理和控制(例如,IO提交和完成队列的创建和删除,中止命令等)。 只有属于Admin命令集的命令才可以提交给Admin Submission Queue。

IO命令集与IO队列对一起使用。 该规范定义了一个名为NVM命令集的IO命令集。 主机选择一个用于所有IO队列对的IO命令集。

主机软件创建队列,最高可达控制器支持的最大值。 通常,创建的命令队列数基于系统配置和预期工作负载。 例如,在基于四核处理器的系统上,每个核心可能有一个队列对以避免锁定并确保在适当的处理器核心缓存中创建数据结构。 图1提供了队列对机制的图形表示,显示了提交队列和完成队列之间的1:1映射。 图2显示了一个示例,其中多个IO提交队列在Core B上使用相同的IO完成队列。图1和图2显示Admin Adminmission Queue和Admin Completion Queue之间始终存在1:1映射

提交队列(SQ)是具有固定大小的循环缓冲区,主机软件使用该缓冲区提交命令以供控制器执行。当有一到n个新命令要执行时,主机软件会更新相应的SQ Tail doorbell寄存器。当有新的doorbell寄存器值写入时,控制器中会覆盖先前的SQ Tail值。控制器按顺序从提交队列中提取SQ条目,然后,它可以按任何顺序执行这些命令。

每个Submission Queue条目都是一个命令。命令大小为64字节。用于数据传输的内存中的物理内存位置使用Physical Region Page (PRP)条目或Scatter Gather Lists 指定。每个命令可以包括两个PRP条目或一个Scatter Gather List(SGL)段。如果需要两个以上的PRP条目来描述数据缓冲区,则提供指向描述PRP条目列表的PRP列表的指针。如果需要多个SGL段来描述数据缓冲区,则SGL段提供指向下一个SGL段的指针。

完成队列(CQ)是一个循环缓冲区,具有固定大小,用于发布已完成命令的状态。完成的命令由关联的SQ标识符和由主机软件分配的命令标识符的组合唯一地标识。多个提交队列可以与单个完成队列相关联。这表示即使这些命令源自多个提交队列也可以使用此功能通过一个完成队列处理所有完成的命令。 CQ头指针在处理完成指示最后一个完成队列条目之后由主机软件更新。完成队列条目中定义了相位标记(P)位,以表示在未咨询寄存器的情况下加入了新条目。这使主机软件能够确定新条目是否作为上一轮或当前完成通知的一部分发布。控制器完成命令后反转相位标记位。

 

多路径IO和命名空间共享

本节概述多路径IO和命名空间共享。 多路径IO是指单个主机和命名空间之间的两个或多个完全独立的PCI Express路径,而命名空间共享是指两个或多个主机使用不同的NVM Express控制器访问公共共享命名空间的能力。 多路径IO和命名空间共享都要求NVM子系统包含两个或更多控制器。 两个或多个主机同时访问共享命名空间需要在主机之间进行某种形式的协调。 用于协调这些主机的过程超出了本规范的范围。

图3显示了一个NVM子系统,它包含一个NVM Express控制器和一个PCI Express端口。 由于这是单个功能PCI Express设备,因此NVM Express控制器应与PCI功能0相关联。控制器可支持多个命名空间。 图3中的控制器支持两个标记为NS A和NS B的名称空间。与每个控制器名称空间相关联的是名称为NSID 1和NSID 2的名称空间ID,控制器使用该名称空间ID来引用特定名称空间。 命名空间ID与命名空间本身不同,是主机和控制器用于在命令中指定特定命名空间的句柄。 控制器命名空间ID的选择超出了本规范的范围。 在此示例中,名称空间ID 1与名称空间A相关联,名称空间ID 2与名称空间B相关联。两个名称空间都是控制器专用的,并且此配置既不支持多路径IO,也不支持名称空间共享。

图4显示了一个多功能NVM子系统,其中一个PCI Express端口包含两个控制器,一个控制器与PCI功能0相关联,另一个控制器与PCI功能1相关联。每个控制器支持私有的命名空间并共享命名空间 B.命名空间ID在所有可访问特定共享命名空间的控制器中应相同。 在此示例中,两个控制器都使用命名空间ID 2来访问共享命名空间B.

每个控制器都有一个唯一的Identify Controller数据结构,每个命名空间都有唯一的Identify Namespace数据结构。 可以访问共享命名空间的控制器返回与该共享命名空间相关联的Identify Namespace数据结构(即,所有可访问同一共享命名空间的控制器返回相同的数据结构内容)。 存在与命名空间本身相关联的全局唯一标识符,并且可以用于定位当多条路径同时访问到同一共享命名空间。 请参阅第7.10节

与共享命名空间相关联的控制器可以同时在命名空间上操作。 各个控制器执行的操作对于提交命令的控制器的写入原子级别的共享命名空间是原子的(参见第6.4节)。 在共享命名空间的控制器之间,写入原子性级别不需要相同。 如果发布到访问共享命名空间的不同控制器的命令之间存在任何排序要求,则需要主机软件或相关应用程序来强制执行这些排序要求。

 图5显示了一个带有两个PCI Express端口的NVM子系统,每个端口都有一个相关的控制器。 两个控制器都映射到相应端口的PCI功能0。 此示例中的每个PCI Express端口都是完全独立的,并具有自己的PCI Express基本复位和参考时钟输入。 重置端口只会影响与该端口关联的控制器,并且不会影响其他控制器,共享命名空间或共享命名空间上其他控制器执行的操作。 此示例的功能行为与图4中所示的相同。两个端口可以连接到一个RC,或者不同的RC上。也能用于多路径IO或IO共享架构。系统级体系结构方面以及PCI Express结构中多个端口的使用超出了本规范的范围

 

图6说明了支持Single Root I/O Virtualization (SR-IOV)的NVM子系统,它具有一个物理功能和四个虚拟功能。 NVM Express控制器与每个Function相关联,每个控制器具有私有命名空间,并且可以访问由所有控制器共享的命名空间,标记为NS F.本例中控制器的行为与本节中其他示例的行为相似。 有关SR-IOV的更多信息,请参见第8.5.4节。

本节中提供的示例旨在说明概念,而不是为了枚举所有可能的配置。 例如,NVM子系统可以包含多个PCI Express端口,每个端口支持SR-IOV。

 

1.5 Conventions 

对于标记为保留的寄存器的所有位,硬件应返回'0',主机软件应写入值为'0'给所有保留位和寄存器。
在寄存器部分(即第2部分和第3部分)中,使用以下术语和缩写:
 
RO        只读
RW        读写
R/W        读写。 读取的值可能不是写入的最后一个值。
RWC        读/写'1'清除
Impl Spec     Implementation Specific - 控制器可以自由选择
HwInit      默认状态取决于NVM Express控制器和系统配置。 该值在重置时初始化,例如扩展ROM,或者在集成设备的情况下由平台BIOS执行。
reset       此列指示重置后字段的值。
 
对于某些寄存器字段,它是关于字段是RW,RWC还是RO的具体实现;这是通常显示为RW/RO或RWC/RO,表示如果该字段不支持该功能只读。
当在文档中引用寄存器字段时,使用的约定是“Register Symbol.Field Symbol”。例如,PCI命令寄存器奇偶校验错误响应启用字段由名称引用CMD.PEE。如果寄存器字段是位数组,则该字段称为“寄存器符号.字段符号”(数组偏移到元素)“。
基于0的值的编号方案,其中数字0h表示值1h并因此产生0h的模式代表1h,1h代表2h,2h代表3h等。在此编号中方案,没有方法来表示0h的值。本说明书中的值是基于1的(即,除非另有说明,否则数字1h表示值1h,2h表示2h等。
当文档中的大小以KB表示时,使用的约定是1KB = 1024字节。
^运算符用于表示要引发该数字,符号或表达式的幂。
某些参数定义为ASCII字符串。 ASCII字符串应仅包含代码值20h到7EH。对于字符串“Copyright”,字符“C”是第一个字节,字符“o”是第二个字节,等等。
该字符串是左对齐的,如有必要,应在右侧填充空格(ASCII字符20h)。
十六进制ASCII字符串是使用代码值子集的ASCII字符串:“0”到“9”,“A”到“F”大写,“a”到“f”小写。
 

1.6 一些定义

1.6.1 Admin Queue 

Admin Queue是标识为0的提交队列和完成队列。管理员提交队列和相应的管理完成队列分别用于提交管理命令和接收这些管理命令的完成。 Admin Submission Queue与Admin Completion Queue唯一关联。

1.6.2 arbitration burst 

可以从使用循环法或加权循环法且具有紧急优先级仲裁的提交队列一次提交的最大命令数。

1.6.3 arbitration mechanism 

用于确定选择哪个提交队列以供控制器发送命令的方法。 定义了三种仲裁机制,包括循环,具有紧急优先级的加权循环和特定于供应商。 请参阅4.11节。

1.6.4 cache

NVM子系统使用的数据存储区域,主机无法访问该数据存储区域,并且可能包含存储在非易失性介质中的用户数据的子集,或者可能包含未提交给非易失性介质的用户数据。

1.6.5 candidate command

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

1.6.6 command completion 

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

1.6.7 command submission

对于NVMe over PCIe实现,当完成提交队列尾doorbell寄存器写入时,将提交命令,并更新该命令将提交队列尾指针。
对于NVMe over Fabrics实现,请参阅NVMe over Fabrics 1.0版规范中的1.4.14节。

1.6.8 controller

实现NVM Express接口的PCI Express功能

1.6.9 directive

主机和NVM子系统或控制器信息交换的方法。 可以使用Directive Send和Directive Receive命令传输信息。 IO命令的子集可以包括指令类型字段和指令特定字段,以传达特定于关联的IO命令。更多信息,请参阅第9节。

1.6.10 emulated controller

由软件定义的NVM Express控制器。 仿真控制器可以具有或不具有底层物理NVMe控制器(例如,物理PCIe功能)。

1.6.11 extended LBA

扩展LBA是当与LBA关联的元数据与LBA数据连续传输时创建的较大LBA。

1.6.12 firmware slot

固件插槽是控制器中用于存储固件映像的位置。 控制器存储一到七个固件映像。 将新固件下载到控制器时,主机软件可以选择通过指示固件插槽编号来指定要替换的映象

1.6.13 I/O command

IO命令是提交给IO提交队列的命令

1.6.14 I/O Completion Queue

完成队列用于指示命令完成并与一个或多个I/O提交队列相关联。 IO完成队列标识符为1到65535。

1.6.15 I/O Submission Queue

提交队列用于提交I / O命令以供控制器执行(例如,读取,写入NVM命令集)。 I / O提交队列标识符的范围是1到65535。

1.6.16 LBA range

由起始LBA和多个逻辑块指定的连续逻辑块的集合

1.6.17 logical block

读写命令的最小可寻址数据单元

1.6.18 logical block address (LBA)

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

1.6.19 metadata

元数据是关于特定LBA数据的上下文信息。 如果控制器提供存储空间,则主机可以包括由NVM子系统存储的元数据。

1.6.20 namespace

可以格式化一定数量的逻辑块的非易失性存储器。 格式化后,命名空间是大小为n的逻辑块的集合,逻辑块地址从0到(n-1)

1.6.21 Namespace ID (NSID) 

控制器用于提供对命名空间的访问的标识符。 有效的NSID,无效的NSID,活动的NSID,非活动的NSID,分配的NSID和未分配的NSID相关定义请参阅第6.1节

1.6.22 NVM

NVM是非易失性存储器(non-volatile memory )的首字母缩写

1.6.23 NVM subsystem

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

1.6.24 primary controller

NVM Express控制器支持Virtualization Management命令。 NVM子系统可能包含多个主控制器。 NVM子系统中的辅助控制器依赖于主控制器进行动态资源管理(参见第8.5节)。
PCI Express SR-IOV物理功能支持NVM Express,例如虚拟化增强功能(请参阅第8.5.4节)。

1.6.25 private namespace

一个名称空间,一次只能附加到一个控制器。 主机可以通过命名空间的Identify Namespace数据结构中的多路径I / O和命名空间共享功能(NMIC)字段的值来确定命名空间是私有命名空间还是可以是共享命名空间

1.6.26 Runtime D3 (Power Removed)

在运行时D3(RTD3)中,主电源从控制器中移除。 辅助电源可以提供或不提供

1.6.27 sanitize operation

修改NVM子系统中的所有用户数据,使得不可能从任何高速缓存或非易失性介质恢复先前的用户数据。

1.6.28 secondary controller

NVM Express控制器,它依赖于NVM子系统中的主控制器来管理某些控制器资源(请参阅第8.5节)。
支持NVM Express并从主控制器接收资源的PCI Express SR-IOV虚拟功能是辅助控制器的一个示例(参见第8.5.4节)。

1.6.29 shared namespace

在NVM子系统中可以同时附加到两个或多个控制器的的命名空间。 主机可以通过Identify Namespace数据结构中的Namespace多路径I / O和命名空间共享功能(NMIC)字段的值来确定命名空间是私有命名空间还是可以是共享命名空间。

1.6.30 user data

由逻辑块数据,元数据和保护信息组成的数据

 

1.7 Keywords

几个关键字用于区分不同级别的需求。
1.7.1强制性(mandatory
指示由本说明书定义的要实现的项目。
1.7.2可以(may
表示选择的灵活性,没有隐含的偏好。
1.7.3可选(optional
描述此规范不需要的功能的关键字。但是,如果实现了规范定义的任何可选特性,则该特征应以规范定义的方式实现。
1.7.4 R.
当图或表没有为完整单词“reserved”提供足够的空间时,“R”用作“reserved”的缩写。
1.7.5保留(reserved
一个关键字,指的是为将来的标准化而预留的位,字节,字,字段和操作码值。它们的使用和解释可以通过未来对此规范或其他规范的扩展来规定。保留位,字节,字,字段或寄存器应清零,或者根据本规范的未来扩展。接收方不需要检查保留位,字节,字或字段。在命令中定义的字段中接收保留的编码值应报告为错误。将保留的编码值写入控制器寄存器字段会产生不确定的结果。
1.7.6应(shall
表明强制要求。设计人员必须实施所有此类强制性要求,以确保与符合规范的其他产品的互操作性。
1.7.7应该(should
通过强烈优选的替代方案表明选择的灵活性。相当于“建议使用”这一短语。

 

1.8 Byte, word and Dword 的关系

图7说明了字节,字和Dword之间的关系。 Qword(四字)是一个数字单位,是字大小的四倍; 由于空间限制,未示出。 该规范以小端格式指定数据。

 

 

1.9 References

INCITS 501-2016, Information technology – Security Features for SCSI Commands (SFSC). Available from http://webstore.ansi.org.
INCITS 514-2014, Information technology – SCSI Block Commands - 3 (SBC-3). Available from http://webstore.ansi.org.
INCITS 522-2014, Information technology – ATA/ATAPI Command Set - 3 (ACS-3). Available from http://webstore.ansi.org.
JEDEC JESD218B-01: Solid State Drive (SSD) Requirements and Endurance Test Method standard. Available from http://www.jedec.org.

NVM Express over Fabrics Specification, Revision 1.0. Available from http://www.nvmexpress.org.
NVM Express Management Interface Specification, Revision 1.0. Available from http://www.nvmexpress.org.
PCI Local Bus Specification, Revision 3.0. Available from http://www.pcisig.com.
PCI Express Base Specification,Revision 3.1a. Available from http://www.pcisig.com.
PCI Bus Power Management Interface Specification Revision 1.2. Available from http://www.pcisig.com.
PCI Single Root I/O Virtualization and Sharing Specification, revision 1.1. Available from http://www.pcisig.com/specifications/iov/single_root/.
PCI Firmware Specification Revision 3.2. Available from http://www.pcisig.com.
PCI Code and ID Assignment Specification Revision 1.9, 18 May, 2017. Available from http://www.pcisig.com.
RFC 4122, P. Leach, M. Mealling, and R. Salz, “A Universally Unique Identifier (UUID) URN Namespace”, July 2005. Available from https://www.ietf.org/rfc.html.
RFC 6234, D. Eastlake 3rd and T. Hansen, "US Secure Hash Algorithms (SHA and SHA-based HMAC and HKDF)", May 2011. Available from https://www.ietf.org/rfc.html.
UEFI Specification Version 2.7A, September 2017. Available from http://www.uefi.org.
TCG Storage Architecture Core Specification, Version 2.01 Revision 1.00. Available from http://www.trustedcomputinggroup.org.
TCG Storage Interface Interactions Specification, Version 1.05 Revision 1.00. Available from http://www.trustedcomputinggroup.org

 

1.10 References Under Development

ATA/ATAPI Command Set - 4 (ACS-4) [BSR INCITS 529]. Available from http://www.t13.org.
INCITS 506-201x, SCSI Block Commands - 4 (SBC-4)

 

posted @ 2018-09-27 17:09  陆小呆  阅读(4204)  评论(0编辑  收藏  举报