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
时,表示不支持精简预配, NSZE 和 NCAP 字段报告相同的值。
NSFEAT.NameSpaceAtomicWriteUnit
NSFEAT 结构的位 1 指示是否为此命名空间定义了命名空间原子边界参数。
当此值设置为 1
时,字段 NAWUN、NAWUPF 和 NACWU 将为此命名空间定义,主机应使用此命名空间,而不是标识控制器数据结构中的 AWUN、AWUPF 和 ACWU 字段。
将此值清除为 0
时,控制器不支持此命名空间的 字段 NAWUN、 NAWUPF 和 NACWU 。 在这种情况下,主机应使用标识控制器数据结构中定义的 AWUN、AWUPF 和 ACWU 字段。
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
指示命名空间的格式由此数据结构中的 FLBAS 和 DPS 字段指定。
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) 。
如果将 NABSN 和 NABSPF 字段清除为 0h
,则 NABO 字段将清除为 0h。
NABO 的值应小于或等于 NABSN 和 NABSPF。
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 |