刚开始接触NVMe,对此理解不深,如有错误敬请指出
NVM ExpressTM(NVMeTM)接口允许主机软件与非易失性存储器子系统通信。 此接口针对企业和客户端固态驱动器进行了优化,通常作为寄存器级接口连接到PCI Express接口。
注意:在开发期间,此规范称为Enterprise NVMHCI。 但是,在完成之前,该名称已修改为NVM Express基本规范。 此接口适用于客户端和企业系统。
有关从修订版1.2.1到修订版1.3的更改的概述,请参阅http://nvmexpress.org/changes以获取描述新功能的文档,包括控制器遵守修订版1.3的强制性要求。
该规范定义了用于与非易失性存储器子系统通信的寄存器接口。 它还定义了一个与NVM子系统一起使用的标准命令集。
NVM Express可扩展主机控制器接口旨在满足使用基于PCI Express的固态驱动器的企业和客户端系统的需求。 该接口提供优化的命令提交和完成路径。 它支持并行操作,支持多达65,535个IO队列,每个IO队列具有高达64K的未完成命令。 此外,还增加了对端到端数据保护(兼容SCSI保护信息,通常称为T10 DIF和SNIA DIX标准),增强的错误报告和虚拟化等许多企业功能的支持。 该接口具有以下关键属性:
该规范定义了一组简化的寄存器,其功能包括:
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是指单个主机和命名空间之间的两个或多个完全独立的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。

RO 只读
对于某些寄存器字段,它是关于字段是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 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
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
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
1.6.29 shared namespace
在NVM子系统中可以同时附加到两个或多个控制器的的命名空间。 主机可以通过Identify Namespace数据结构中的Namespace多路径I / O和命名空间共享功能(NMIC)字段的值来确定命名空间是私有命名空间还是可以是共享命名空间。
1.6.30 user data
由逻辑块数据,元数据和保护信息组成的数据
图7说明了字节,字和Dword之间的关系。 Qword(四字)是一个数字单位,是字大小的四倍; 由于空间限制,未示出。 该规范以小端格式指定数据。


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/186078.html