NVME-Express-1.4-2019.06.10 :第六章NVM Command Set 6.1 Namespaces

NVME Command Set

NVM子系统由若干控制器组成,其中每个控制器可以访问若干名称空间,其中每个名称空间由若干逻辑块组成。逻辑块是可从控制器读取或写入的最小数据单元。以字节为单位报告的逻辑块数据大小始终是2的幂。逻辑块大小可以是512字节、1 KiB、2 KiB、4 KiB、8 KiB等。支持的逻辑块大小在标识命名空间数据结构中报告。
NVM命令集包括图346中列出的命令。有关各种控制器类型的强制、可选和禁止命令,请参阅第7.1节。下面的小节描述了每个命令的定义。只有当控制器状态寄存器(CSTS.RDY)中指示的控制器准备就绪时,并且在创建了适当的I/O提交队列和I/O完成队列之后,主机才能提交命令。
提交队列条目(SQE)结构和所有NVM命令通用的字段在第4.2节中定义。第4.6节定义了完成队列条目(CQE)结构和所有NVM命令通用的字段。NVM命令集的SQE和CQE结构(即SQE命令Dword 10-15和CQE Dword 0)中的命令特定字段在本节中定义。
在Compare、Read、Verify、Write和Write Zeroes命令的情况下,主机可以通过在命令中设置Limited Retry(LR)位来指示是否应该对操作的错误恢复应用时间限制。时间限制在第5.21.1.5节规定的错误恢复功能中规定。如果主机未指定时间限制,则控制器应应用所有错误恢复方法来完成操作。
在这里插入图片描述

6.1 Namespaces

6.1.1 Namespace Overview

命名空间是逻辑块地址范围从0到命名空间大小(1)的逻辑块的集合。命名空间ID(NSID)是控制器用于提供对命名空间的访问的标识符。

6.1.2 Valid and Invalid NSIDs

有效NSID是可能用于引用NVM子系统中存在的名称空间的NSID的范围。任何NSID都是有效的,除非NSID是0h或大于Identify Controller数据结构中报告的Namespaces字段的数量(参见图247)。NSID FFFFFFFFh是用于指定所有名称空间的广播值。无效NSID是指任何不是有效NSID且也不是广播值的值。
有效的NSID是:
a) 在NVM子系统中分配或未分配;和
b) 特定控制器的激活或非激活状态。

6.1.3 Allocated and Unallocated NSID Types

在NVM子系统中,有效的NSID为:
a) 分配的NSID;或
b) 未分配的NSID。
已分配NSID指NVM子系统中存在的名称空间。未分配NSID不引用NVM子系统中存在的任何名称空间。

6.1.4 Active and Inactive NSID Types

对于特定控制器,分配的NSID是:
a) 一个活跃的NSID;或
b) 非活动NSID。
控制器的活动nsid是指附加到该控制器的名称空间。为控制器分配的非活动NSID指的是未连接到该控制器的命名空间。
未分配的NSID是NVM子系统中所有控制器的非活动NSID。
如果NSID引用的名称空间附加到NVM子系统中的某些控制器(而不是所有控制器),则分配的NSID可以是同一NVM子系统中的某些控制器的活动NSID和其他控制器的非活动NSID。
请参阅第8.12节,了解与正在分离或删除的命名空间相关的操作。

6.1.5 NSID and Namespace Relationships

除非另有说明,在使用名称空间标识符(NSID)字段的命令中指定非活动NSID将导致控制器在命令中使用status Invalid字段中止命令。在使用NSID字段的命令中指定无效的NSID将导致控制器中止状态为invalid Namespace或Format的命令。
下表总结了有效的NSID类型,图347直观地显示了NSID类型及其关系。
在这里插入图片描述

6.1.6 NSID and Namespace Usage

如果支持名称空间管理(请参阅第8.12节)、ANA报告(请参阅第8.20节)或NVM集(请参阅第4.9节),则NSID在NVM子系统中应是唯一的(例如,NSID为3时应引用相同的物理名称空间,而不考虑访问控制器)。如果不支持命名空间管理、ANA报告和NVM集,则NSID:
a) 共享名称空间应是唯一的;和
b) 对于私有名称空间,不需要唯一。
Identify命令(参考第5.15节)可用于确定控制器的活动nsid和NVM子系统中分配的nsid。
如果MNAN字段(参见图247)被清除为0h,则分配的nsid的最大数量与NN字段中报告的值相同(参见图247)。如果MNAN字段为非零,则分配的NSID的最大数目可以小于名称空间的数目(例如,NVM子系统可以支持设置为1000000的最大有效NSID值(即NN字段),但是支持最多10个分配的NSID值)。

要确定特定控制器的活动nsid,主机可以遵循以下方法之一:
1.发出一个Identify命令,将每个有效NSID的CNS字段清除为0h(基于Identify Controller数据结构中的Namespaces值(即MNAM字段或NN字段)的个数)。如果为特定NSID返回非零数据结构,则该NSID是活动NSID;或
2.发出Identify命令,CNS字段设置为2h,以检索最多1024个活动nsid的列表。如果有1024个以上的活动nsid,则继续发出Identify命令,CNS字段设置为2h,直到检索到所有活动nsid。

为了确定NVM子系统中分配的nsid,主机可以发出一个Identify命令,CNS字段设置为10h,以检索最多1024个分配的nsid的列表。如果分配的nsid超过1024个,则继续发出Identify命令,CNS字段设置为10h,直到检索到所有分配的nsid。

命名空间ID可能会在断电情况下发生变化。但是,建议命名空间标识符在断电情况下保持静态,以避免EFI或OSE出现问题。要确定是否遇到相同的命名空间,主机可以使用:
a)名称空间标识描述符中的UUID字段(参见图249),如果存在;
b)标识名称空间数据(参见图245)或名称空间标识描述符(如果存在)中的NGUID字段;或
c)标识命名空间数据或命名空间标识描述符(如果存在)中的EUI64字段。
NSFEAT字段中的bit 3(参见图245)表示NGUID和EUI64重用特性。

Identify Namespace数据结构中的Namespace Size(NSZE)字段以逻辑块(LBA 0到n-1)的形式定义命名空间的总大小。Identify Namespace数据结构中的Namespace Utilization(NUSE)字段定义了当前在命名空间中分配的逻辑块的数量。Identify数据结构中的Namespace Capacity(NCAP)字段定义了在精简配置使用模型中一次可以作为命名空间的一部分分配的最大逻辑块数。以下关系成立:命名空间大小>=命名空间容量>=命名空间利用率。

如果控制器支持非对称命名空间访问报告(即,在Identify controller数据结构的CMIC字段中将位3设置为“1”(参见图247)),如果控制器和命名空间之间的关系处于ANA不可访问状态(参见第8.20.3.3节)或ANA持续丢失状态(参见第8.20.3.4节),则NUSE字段(参见图245)和NVMCAP字段(参见图245)被清除为0h。命名空间属性Changed事件不会为这些字段的更改生成,这些更改是由图147中所述的ANA状态更改引起的。主机使用非对称命名空间访问更改通知作为这些更改的指示。

命名空间可能与提交队列有关系,也可能没有关系;这种关系由主机软件实现决定。控制器应支持从任何I/O提交队列访问任何活动命名空间。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值