NVME_IDENTIFY_NAMESPACE_DATA 结构 (nvme.h)

包含指示特定于特定命名空间的功能和设置的值。

所有命名空间通用的功能和设置包含在命名空间 的NVME_IDENTIFY_NAMESPACE_DATA 数据结构中,命名空间标识符为 0xFFFFFFFF

nvme.h 头文件定义值为 0xFFFFFFFF的常量NVME_NAMESPACE_ALL

如果控制器支持命名空间管理,并且NVME_COMMAND结构的“命名空间标识符 (NSID) ”字段设置为NVME_NAMESPACE_ALL,则控制器将返回一个NVME_IDENTIFY_NAMESPACE_DATA数据结构,该结构指定所有命名空间中通用的功能。

语法

typedef struct {
  ULONGLONG                    NSZE;
  ULONGLONG                    NCAP;
  ULONGLONG                    NUSE;
  struct {
    UCHAR ThinProvisioning : 1;
    UCHAR NameSpaceAtomicWriteUnit : 1;
    UCHAR DeallocatedOrUnwrittenError : 1;
    UCHAR SkipReuseUI : 1;
    UCHAR NameSpaceIoOptimization : 1;
    UCHAR Reserved : 3;
  } NSFEAT;
  UCHAR                        NLBAF;
  struct {
    UCHAR LbaFormatIndex : 4;
    UCHAR MetadataInExtendedDataLBA : 1;
    UCHAR Reserved : 3;
  } FLBAS;
  struct {
    UCHAR MetadataInExtendedDataLBA : 1;
    UCHAR MetadataInSeparateBuffer : 1;
    UCHAR Reserved : 6;
  } MC;
  struct {
    UCHAR ProtectionInfoType1 : 1;
    UCHAR ProtectionInfoType2 : 1;
    UCHAR ProtectionInfoType3 : 1;
    UCHAR InfoAtBeginningOfMetadata : 1;
    UCHAR InfoAtEndOfMetadata : 1;
    UCHAR Reserved : 3;
  } DPC;
  struct {
    UCHAR ProtectionInfoTypeEnabled : 3;
    UCHAR InfoAtBeginningOfMetadata : 1;
    UCHAR Reserved : 4;
  } DPS;
  struct {
    UCHAR SharedNameSpace : 1;
    UCHAR Reserved : 7;
  } NMIC;
  NVM_RESERVATION_CAPABILITIES RESCAP;
  struct {
    UCHAR PercentageRemained : 7;
    UCHAR Supported : 1;
  } FPI;
  struct {
    UCHAR ReadBehavior : 3;
    UCHAR WriteZeroes : 1;
    UCHAR GuardFieldWithCRC : 1;
    UCHAR Reserved : 3;
  } DLFEAT;
  USHORT                       NAWUN;
  USHORT                       NAWUPF;
  USHORT                       NACWU;
  USHORT                       NABSN;
  USHORT                       NABO;
  USHORT                       NABSPF;
  USHORT                       NOIOB;
  UCHAR                        NVMCAP[16];
  USHORT                       NPWG;
  USHORT                       NPWA;
  USHORT                       NPDG;
  USHORT                       NPDA;
  USHORT                       NOWS;
  USHORT                       MSSRL;
  ULONG                        MCL;
  UCHAR                        MSRC;
  UCHAR                        Reserved2[11];
  ULONG                        ANAGRPID;
  UCHAR                        Reserved3[3];
  struct {
    UCHAR WriteProtected : 1;
    UCHAR Reserved : 7;
  } NSATTR;
  USHORT                       NVMSETID;
  USHORT                       ENDGID;
  UCHAR                        NGUID[16];
  UCHAR                        EUI64[8];
  NVME_LBA_FORMAT              LBAF[16];
  UCHAR                        Reserved4[192];
  UCHAR                        VS[3712];
} NVME_IDENTIFY_NAMESPACE_DATA, *PNVME_IDENTIFY_NAMESPACE_DATA;

成员

NSZE

指示逻辑块中命名空间的总大小。

大小 n 的命名空间由逻辑块地址 (LBA) 0 通过 (n - 1)组成。 逻辑块的数量基于格式化的 LBA 大小。 在格式化命名空间之前,此字段未定义。

NCAP

指示在任何时间点可在命名空间中分配的最大逻辑块数。

逻辑块的数量基于格式化的 LBA 大小。 在格式化命名空间之前,此字段未定义。

NCAP 字段用于精简预配,并报告小于或等于命名空间大小 (NSZE) 的值。

备用 LBA 不作为此字段的一部分进行报告。 命名空间容量 (NCAP) 的值0h指示命名空间 ID 是非活动命名空间 ID。 使用 Write 或 Write Uncorrectable 命令写入逻辑块时,将分配逻辑块。 可以使用 数据集管理 命令解除分配逻辑块。

NUSE

指示命名空间中分配的当前逻辑块数。

此字段的值小于或等于命名空间容量 NCAP 字段的值。

逻辑块的数量基于格式化的 LBA 大小。 使用 NVM 命令集时:使用 Write 或 Write Uncorrectable 命令写入逻辑块时,将分配逻辑块。 可以使用 数据集管理 命令解除分配逻辑块。

如果产品不面向精简预配环境,控制器可能随时报告 NUSE 值等于 NCAP 值。

NSFEAT

命名空间功能 (NSFEAT) 结构,其中包含定义命名空间特征的字段。

NSFEAT.ThinProvisioning

NSFEAT 结构的位 0 指示命名空间是否支持精简预配。

当此值设置为 1时,命名空间支持精简预配。 具体而言,报告的命名空间容量 (NCAP) 可能小于 NSZE) (命名空间大小。 如果支持此功能并支持数据集管理命令,则解除分配 BA 将反映在“命名空间利用率” (NUSE) 字段中。

将此值清除为 0时,表示不支持精简预配, NSZENCAP 字段报告相同的值。

NSFEAT.NameSpaceAtomicWriteUnit

NSFEAT 结构的位 1 指示是否为此命名空间定义了命名空间原子边界参数。

当此值设置为 1时,字段 NAWUNNAWUPFNACWU 将为此命名空间定义,主机应使用此命名空间,而不是标识控制器数据结构中的 AWUNAWUPFACWU 字段。

将此值清除为 0时,控制器不支持此命名空间的 字段 NAWUNNAWUPFNACWU 。 在这种情况下,主机应使用标识控制器数据结构中定义的 AWUNAWUPFACWU 字段。

NSFEAT.DeallocatedOrUnwrittenError

NSFEAT 结构的位 2 指示控制器是否支持此命名空间的“已解除分配”或“未写逻辑块”错误。

当此值设置为 1时,控制器支持释放 或未写入的逻辑块 (为此命名空间NVME_STATUS_NVM_DEALLOCATED_OR_UNWRITTEN_LOGICAL_BLOCK) 错误。 将此值清除为 0时,控制器不支持此命名空间 的NVME_STATUS_NVM_DEALLOCATED_OR_UNWRITTEN_LOGICAL_BLOCK 错误。

NSFEAT.SkipReuseUI

NSFEAT 结构的位 3 是跳过重用 UI 功能的一个设置。

NSFEAT.NameSpaceIoOptimization

NSFEAT.Reserved

保留 NSFEAT 结构的位 4:7。

NLBAF

定义命名空间支持的 LBA 数据大小和元数据大小组合的数目。

LBA 格式按 (从 0) 开始的顺序进行分配,并按顺序打包。 这是基于 0 的值。 可指示为支持的 LBA 格式的最大数目为 16。

支持的 LBA 格式在 LBAF 字段中指示,) 此数据结构 (字节 128 – 191。 元数据可以作为 LBA 的一部分传输, (创建向应用程序公开的更大 LBA 大小的扩展 LBA) ,也可以作为单独的连续数据缓冲区传输。 元数据不能在 LBA 和单独的元数据缓冲区之间拆分。

建议软件和控制器转换为 4KB 或更大的 LBA 大小,以便在控制器上实现 ECC 效率。 如果提供元数据,则建议每个逻辑块至少提供 8 个字节,以便与端到端数据保护一起使用。

FLBAS

格式化 LBA 大小 (FLBAS) 结构,其中包含指示命名空间格式化的 LBA 数据大小和元数据大小组合的字段。

FLBAS.LbaFormatIndex

FLBAS 结构的位 0:3 指定此数据结构中指示的 16 种支持的 LBA 格式之一。

FLBAS.MetadataInExtendedDataLBA

FLBAS 结构的位 4 指示是否在数据 LBA 末尾传输元数据,从而创建扩展数据 LBA。

如果此值设置为 1,则会在数据 LBA 末尾传输元数据,从而创建扩展数据 LBA。 将此值清除为 0时,指示命令的所有元数据都作为单独的连续数据缓冲区传输。

没有元数据时,第 4 位不适用。

FLBAS.Reserved

保留 FLBAS 结构的位 5:7。

MC

元数据功能 (MC) 结构,其中包含指示元数据功能的字段。

MC.MetadataInExtendedDataLBA

MC 结构的位 0 指示命名空间是否支持作为扩展数据 LBA 的一部分传输的元数据。

当此值设置为 1时,命名空间支持作为扩展数据 LBA 的一部分传输的元数据。 将此值清除为 0时,表示命名空间不支持作为扩展数据 LBA 的一部分传输的元数据。

MC.MetadataInSeparateBuffer

MC 结构的位 1 指示命名空间是否支持作为单独缓冲区的一部分传输的元数据。

当此值设置为 1时,命名空间支持将元数据作为在 Command 结构的“元数据指针 (MPTR) ”字段中指定的单独缓冲区的一部分进行传输。 将此值清除为 0时,命名空间不支持作为单独缓冲区的一部分传输的元数据。

MC.Reserved

保留 MC 结构的位 7:2。

DPC

端到端数据保护功能 (DPC) 结构,其中包含指示端到端数据保护功能功能的字段。

可以在此字段中设置多个位。

DPC.ProtectionInfoType1

DPC 结构的位 0 指示命名空间是否支持保护信息类型 1。

当此值设置为 1时,命名空间支持保护信息类型 1。 将此值清除为 0时, 命名空间不支持保护信息类型 1。

DPC.ProtectionInfoType2

DPC 结构的位 1 指示命名空间是否支持保护信息类型 2。

当此值设置为 1时,命名空间支持保护信息类型 2。 将此值清除为 0时, 命名空间不支持保护信息类型 2。

DPC.ProtectionInfoType3

DPC 结构的位 2 指示命名空间是否支持保护信息类型 3。

当此值设置为 1时,命名空间支持保护信息类型 3。 将此值清除为 0时, 命名空间不支持保护信息类型 3。

DPC.InfoAtBeginningOfMetadata

DPC 结构的位 3 指示命名空间是否支持作为元数据的前 8 个字节传输的保护信息。

当此值设置为 1时,命名空间支持作为元数据的前八个字节传输的保护信息。 将此值清除为 0时,命名空间不支持作为元数据的前八个字节传输的保护信息。

DPC.InfoAtEndOfMetadata

DPC 结构的位 4 指示命名空间是否支持作为元数据的最后八个字节传输的保护信息。

当此值设置为 1时,命名空间支持作为元数据的最后八个字节传输的保护信息。 将此值清除为 0时,命名空间不支持作为元数据的最后八个字节传输的保护信息。

DPC.Reserved

保留 DPC 结构的位 7:5。

DPS

端到端数据保护类型设置 (DPS) 结构,其中包含指示端到端数据保护功能的类型设置的字段。

NVME_PROTECTION_INFORMATION_TYPES

DPS.ProtectionInfoTypeEnabled

DPS 结构的位 2:0 是一个NVME_PROTECTION_INFORMATION_TYPES值,该值指示是否启用保护信息以及是否启用了保护信息的类型。

DPS.InfoAtBeginningOfMetadata

DPS 结构的位 3 指示是否将保护信息(如果已启用)作为元数据的前 8 个字节传输。

如果此值设置为 1,则保护信息(如果已启用)将作为元数据的前八个字节传输。 将此值清除为 0时,保护信息(如果已启用)将作为元数据的最后八个字节传输。

DPS.Reserved

DPS 结构的 7:4 位是保留的。

NMIC

命名空间多路径 I/O 和命名空间共享功能 (NMIC) 结构,其中包含指定命名空间的多路径 I/O 和命名空间共享功能的字段。

NMIC.SharedNameSpace

NMIC 结构的位 0 指示命名空间是否为共享命名空间。

当此值设置为 1时,NVM 子系统中的两个或更多个控制器可以访问命名空间。 将此值清除为 0时,命名空间是专用命名空间,只能由返回此命名空间数据结构的控制器访问。

NMIC.Reserved

保留 NMIC 结构的位 7:1。

RESCAP

预留功能 (RESCAP) 结构,其中包含指定命名空间的预留功能的字段。

此字段中的 00h 值指示此命名空间不支持预留。

FPI

格式进度指示器 (FPI) 结构,其中包含指示格式操作正在进行时仍要设置格式的命名空间百分比的字段。

FPI.PercentageRemained

FPI 结构的位 0:6 表示仍要格式化的命名空间的百分比。 例如,值 指示 25 75% 的命名空间已格式化,25% 仍有待格式化。

0 指示命名空间的格式由此数据结构中的 FLBASDPS 字段指定。

FPI.Supported

FPI 结构的位 7 指示命名空间是否支持 FPI 定义的格式进度指示器。PercentageRemained 字段。

当此值设置为 1时,命名空间支持 FPI 定义的格式进度指示器 。PercentageRemained 字段。 将此值清除为 0时,命名空间不支持格式进度指示器和 FPI。PercentageRemained 字段将被清除为 0h

DLFEAT

DLFEAT.ReadBehavior

DLFEAT.WriteZeroes

DLFEAT.GuardFieldWithCRC

DLFEAT.Reserved

NAWUN

指示在正常操作期间保证以原子方式写入 NVM 的写入操作的命名空间特定大小。

0h 指示此命名空间的大小与标识控制器数据结构的 AWUN 字段中报告的大小相同。 所有其他值使用与 AWUN 字段相同的编码指定逻辑块的大小。

NAWUPF

指示在电源故障或错误情况下保证以原子方式写入 NVM 的写入操作的命名空间特定大小。

0h 指示此命名空间的大小与标识控制器数据结构的 AWUPF 字段中报告的大小相同。 所有其他值使用与 AWUPF 字段相同的编码指定逻辑块的大小。

NACWU

指示为比较和写入融合命令保证以原子方式写入 NVM 的写入操作的命名空间特定大小。

0h 指示此命名空间的大小与标识控制器数据结构的 ACWU 字段中报告的大小相同。 所有其他值使用与 ACWU 字段相同的编码指定逻辑块的大小。

NABSN

指示 NAWUN 值的此命名空间的原子边界大小。

此字段在逻辑块中指定。 对于其他读取或写入命令,跨原子边界写入到此命名空间不保证对 NVM 是原子的。

值 指示 0h 正常写入操作没有原子边界。 所有其他值使用与 AWUN 字段相同的编码指定逻辑块的大小。

NABO

指示第一个原子边界开始的此命名空间上的逻辑块地址 (LBA) 。

如果将 NABSNNABSPF 字段清除为 0h,则 NABO 字段将清除为 0h。 NABO 的值应小于或等于 NABSNNABSPF

NABSPF

指示特定于命名空间原子写入单元 Power Fail 值的命名空间的原子边界大小。

此字段在逻辑块中指定。 对于其他读取或写入命令,无法保证跨原子边界写入此命名空间,也不保证在后续读取关联逻辑块时返回数据。

值 指示 0h 电源故障或错误条件没有原子边界。 所有其他值使用与 AWUPF 字段相同的编码指定逻辑块的大小。

NOIOB

指示命名空间最佳 IO 边界 (NOIOB) 。

NVMCAP[16]

指示分配给此命名空间的 NVM 的总大小。

此字段的值以字节为单位。 如果支持命名空间管理和命名空间附件命令,则支持此字段。

注意:此字段可能不对应于逻辑块大小乘以命名空间大小 (NSZE) 字段。 由于精简预配或其他设置 (如耐力) ,此字段可能大于或小于报告的 NSZE

NPWG

NPWA

NPDG

NPDA

NOWS

MSSRL

MCL

MSRC

Reserved2[11]

保留字段。

ANAGRPID

Reserved3[3]

保留字节 192:383A。

NSATTR

NSATTR.WriteProtected

NSATTR.Reserved

NVMSETID

指示关联的 NVM 集标识符 (NVMSETID) 。

ENDGID

指示 ENDGID) (关联的耐力组标识符。

NGUID[16]

包含全局唯一的 128 位值,并在创建命名空间时分配给命名空间。

命名空间全局唯一标识符 (NGUID) 字段在命名空间的整个生命周期内保持固定,并在命名空间和控制器操作 ((例如控制器重置和命名空间格式) )中保留。

此字段使用基于 EUI-64 的 16 字节指示符格式。

  • 字节 114:112 包含 IEEE 注册机构分配的 24 位company_id值。
  • 字节 119:115 包含由相应组织分配的扩展标识器。
  • 字节 111:104 包含相应组织分配的特定于供应商的扩展标识符。

有关详细信息,请参阅 IEEE EUI-64 指南。 创建命名空间时,控制器应在此字段或 EUI64 字段中指定全局唯一的命名空间标识符。

EUI64[8]

包含 64 位 IEEE 扩展唯一标识符 (EUI-64) ,该标识符在创建命名空间时全局唯一并分配给命名空间。

EUI64 字段在命名空间的整个生命周期内保持固定,并在命名空间和控制器操作 ((例如控制器重置和命名空间格式) )中保留。

EUI-64 是 IEEE 注册机构分配的 24 位或 36 位company_id值和相应组织分配的扩展标识符的串联。 有关详细信息,请参阅 IEEE EUI-64 指南。

创建命名空间时,控制器应在此字段或 NGUID 字段中指定全局唯一的命名空间标识符。 如果控制器无法分配全局唯一的 64 位标识符,则此字段将被清除为 0h

LBAF[16]

包含 16 个NVME_LBA_FORMAT 结构的数组。 数组中的每个结构指定 LBA 格式,并指示控制器支持它。

数组中结构的从零开始的位置对应于 LBA 格式的名称,这样 LBA Format 0 (LBAF0) 位于位置 0,LBA Format 1 (LBAF1) 位于位置 1,依此类而行,最高为 LBA Format 15 (LBAF15) 位置 15。

Reserved4[192]

VS[3712]

此字节范围 (384:4095) 分配给供应商特定 (VS) 使用情况。

要求

要求
最低受支持的客户端 Windows 10
标头 nvme.h