NVMe Figures and Scenarios 03 · Identify, Namespaces, and Data Formats
LOOKUP · FIELD INTERPRETATION · SOURCE LOCATIONS
NVMe Figures and Scenarios 03 · Identify, Namespaces, and Data Formats
CNS selects the Identify structure. Look up controller capabilities, namespace configuration and selected-format sizes separately, then combine them into a valid configuration.
- CNS
- Controller or Namespace Structure, selecting Identify data
Follow a worked scenario through the specification
The returned data below are hypothetical. Start with the need and assumptions, follow the reading route to the relevant fields, then work through the interpretation. Explanations are visible; detailed sources can be expanded.
EXERCISE 01How many more namespaces can be created?
A management tool treats NN as the namespace creation limit. How should it answer how many more can be created now?
Hypothetical observations and assumptions
- OACS.NMS=1; NN=1000; MNAN=16; MAXCNA=8.
- The complete allocated list has 10 entries; this controller’s active list has 6. Remaining capacity and creation parameters have not been checked.
Which figures connect this scenario?
This is a specification reading route. The scenario separately explains action order and wait conditions.
- Select the Identify structure
Use the CNS table to select controller information, the allocated list and the active list before comparing counts.
Base 2.4 · Figure 336 - Read count and attachment limits
Find NN, MNAN and MAXCNA with their validity conditions, then combine them with the two list counts.
Base 2.4 · Figure 338 - Check creation resources
The Namespace Management operation and host-specified fields identify additional creation requirements beyond the count limit.
Base 2.4 · Figure 446 NVM Command Set 1.3 · Figure 134
Follow the field interpretation
Lookup sequence: Identify CNS=01h → complete allocated list with CNS=10h → this controller’s active list with CNS=02h; then inspect capacity and Namespace Management parameters.
Step 1NN is the largest valid NSID; MNAN gives the subsystem namespace count limit in this example. Sparse IDs mean a highest valid ID of 1000 does not imply 1000 namespaces. MAXCNA=8 separately limits attachments to this I/O controller.
- NSID
- Namespace Identifier
Step 2The count limits leave 16−10=6 creation slots and 8−6=2 attachment slots on this controller. Creation and attachment are distinct: creating a third new namespace would not establish that it can also attach here.
Step 3This does not guarantee six successful creations. Required capacity, formats, resources and concurrent management operations still matter. If MNAN=0, NN still bounds the allocated namespace count; for example, NN=1000 does not allow an unlimited namespace count.
Detailed source locations
- Base 2.4 · §5.2.14.2.1 · Figure 338 · Identify – Identify Controller Data Structure, I/O Command Set Independent · Printed pages 353, 370, 378 · PDF 379, 396, 404
- Base 2.4 · §3.2.1 · Printed pages 78–80 · PDF 104–106
- Base 2.4 · §5.2.14 · Figure 336 · Identify – CNS Values · Printed pages 338–339 · PDF 364–365
- Base 2.4 · §5.2.25 · Figure 446 · Namespace Management – Command Dword 10 · Printed pages 446–447 · PDF 472–473
- NVM Command Set 1.3 · §4.1.6 · Figure 134 · Namespace Management – Host Specified Fields · Printed pages 112–113 · PDF 112–113
Continue with the other scenarios
EXERCISE 02Why is an existing namespace absent from this controller?
Inventory finds NSID=27 in the subsystem but no accessible namespace on this controller. Does that establish data loss?
- NSID
- Namespace Identifier
Hypothetical observations and assumptions
- NN=100; CNS=10h returns [2, 9, 27]; CNS=02h returns [2, 9]. Both lists are complete.
- Namespace Management is supported, and inventory remains stable during the queries.
Follow the field interpretation
Lookup sequence: Identify CNS=01h for bounds and capability; CNS=10h and 02h for the two lists; CNS=12h with NSID=27 to inspect its controller attachments.
Step 127 is valid and allocated, so the namespace exists. Its absence from this controller’s active list means it is not attached here; it does not establish nonexistence or media data loss.
Step 2CNS=12h identifies the controllers to which it is attached. This distinguishes attachment elsewhere from creation without attachment. Whether to change that configuration is a separate decision.
Step 3For large inventories, a list holds at most 1024 NSIDs. Continue from the last nonzero NSID to obtain greater IDs; absence from the first page alone does not establish absence from the inventory.
Detailed source locations
- Base 2.4 · §3.2.1 · Printed pages 78–80 · PDF 104–106
- Base 2.4 · §5.2.14 · Figure 336 · Identify – CNS Values · Printed pages 338 · PDF 364
- Base 2.4 · §5.2.14.2.2 · Printed pages 387 · PDF 413
- Base 2.4 · §5.2.14.2.9 · Printed pages 395 · PDF 421
- Base 2.4 · §5.2.14.2.11 · Printed pages 395 · PDF 421
EXERCISE 03Did a changed NSID identify the same namespace?
A namespace used NSID=3 before a power cycle and NSID=9 afterward. Would you compare capacity, NSID or another identifier?
Hypothetical observations and assumptions
- CNS=03h returns the same nonzero Namespace UUID before and after, from the same verified subsystem.
- Capacity matches, but user data has not been read.
Follow the field interpretation
Lookup sequence: Identify CNS=03h for the respective NSIDs; parse identifier descriptors using NIDT and NIDL and retain the identifier values.
Step 1An NSID selects a namespace in commands and may change across power loss. The matching Namespace UUID supports identifying the same namespace; a changed NSID alone does not make it a new object.
Step 2Use NIDT to select the identifier type and NIDL to extract its bytes. Do not compare a descriptor header as part of a UUID. When using NGUID or EUI64, account for the reuse characteristics reported through UIDREUSE.
Step 3Identity does not prove unchanged contents or integrity of every LBA. Data-change questions need separate verification. If no usable unique identifier is available, matching capacity alone is insufficient.
- LBA
- Logical Block Address
Detailed source locations
- Base 2.4 · §3.2.1 · Printed pages 80 · PDF 106
- Base 2.4 · §5.2.14.2.3 · Figure 342 · Identify – Namespace Identification Descriptor · Printed pages 388 · PDF 414
- Base 2.4 · §5.2.14.2.8 · Figure 346 · Identify – I/O Command Set Independent Identify Namespace Data Structure · Printed pages 391–394 · PDF 417–420
EXERCISE 04Which capacity does each namespace field describe?
A capacity report adds NSZE, NCAP and NUSE. Explain why that is incorrect using these observations.
Hypothetical observations and assumptions
- The selected LBAF has LBADS=12 and MS=0; NSZE=8192, NCAP=4096 and NUSE=1024.
- This is a thin-provisioned NVM namespace with valid values, not values cleared by an inaccessible state.
Follow the field interpretation
Lookup sequence: Identify CNS=00h for the target NSID → select the LBAF through FLBAS → read NSZE, NCAP and NUSE together.
Step 1LBADS=12 means 2^12=4096 data bytes per LBA. NSZE=8192 describes a 32 MiB addressable data range, with LBAs 0 through 8191, not through 8192.
- LBA
- Logical Block Address
Step 2NCAP=4096 represents at most 16 MiB of allocatable logical blocks; NUSE=1024 represents 4 MiB currently allocated. These are different properties of one namespace, not three independent spaces to add.
Step 3NUSE is not filesystem used space. File deletion, deallocation, allocation granularity and update timing can make them differ. Filesystem free-space questions require filesystem evidence, not a reinterpretation of NSZE.
Detailed source locations
- NVM Command Set 1.3 · §4.1.5.1 · Figure 123 · Identify – Identify Namespace Data Structure, NVM Command Set · Printed pages 85–87 · PDF 85–87
- NVM Command Set 1.3 · §4.1.5.1 · Figure 125 · LBA Format Data Structure, NVM Command Set Specific · Printed pages 94 · PDF 94
EXERCISE 05How can 128 KiB of data exceed MDTS?
The host plans to transfer 32 logical blocks of 4 KiB each. Can interleaved metadata make the command exceed its limit?
Hypothetical observations and assumptions
- CAP.MPSMIN=0; CC.MPS=1; Identify Controller reports MDTS=5 and CTRATT.MEM=0.
- Selected LBAF: LBADS=12, MS=16. Metadata is interleaved, with all 16 metadata bytes per LBA included in this transfer.
Follow the field interpretation
Lookup sequence: Read CAP.MPSMIN → Identify CNS=01h for MDTS/CTRATT.MEM → CNS=00h for the active format; also check command-specific limits.
Step 1MDTS uses the minimum memory page size, not current CC.MPS. The limit is 2^5 × 2^(12+0)=131072 bytes, or 128 KiB. Selecting 8 KiB host pages does not raise it to 256 KiB.
Step 2With MEM=0, MDTS includes interleaved metadata. 32 × (4096+16)=131584 bytes exceeds 131072; under these assumptions, only 31 complete blocks fit this limit.
Step 3With MEM=1, this MDTS comparison excludes metadata, so 32 blocks pass this check while other command and buffer rules still apply. MDTS=0 removes this reported limit, not every limit on every command.
Detailed source locations
- Base 2.4 · §3.1.4.1 · Figure 36 · Offset 0h: CAP – Controller Capabilities · Printed pages 55–58 · PDF 81–84
- Base 2.4 · §5.2.14.2.1 · Figure 338 · Identify – Identify Controller Data Structure, I/O Command Set Independent · Printed pages 342, 345 · PDF 368, 371
- NVM Command Set 1.3 · §4.1.5.1 · Figure 123 · Identify – Identify Namespace Data Structure, NVM Command Set · Printed pages 86–87 · PDF 86–87
- NVM Command Set 1.3 · §4.1.5.1 · Figure 125 · LBA Format Data Structure, NVM Command Set Specific · Printed pages 94 · PDF 94
EXERCISE 06Do zero Dataset Management limits mean unsupported?
Two controllers both report DMRL=0. Is that enough to disable Dataset Management in software?
Hypothetical observations and assumptions
- A: ONCS.NVMDSMSV=1; DMRL=0, DMRSL=0, DMSL=0.
- B: ONCS.NVMDSMSV=0; DMRL=0, DMRSL=0, DMSL=0.
Follow the field interpretation
Lookup sequence: Identify CNS=01h for ONCS; CNS=06h with CSI=00h for NVM-specific controller data; interpret DMRL/DMRSL/DMSL with the support variant.
- CSI
- Command Set Identifier
Step 1A reports command support through NVMDSMSV=1; the three zero fields do not specify corresponding processing limits. DMRL=0 does not mean zero ranges are allowed.
Step 2B uses the other support interpretation: with NVMDSMSV=0, support depends on the nonzero limit conditions. This all-zero combination does not indicate Dataset Management support; A’s conclusion cannot be reused.
Step 3Even on A, command encoding, namespace bounds and range definitions still apply. The key is to interpret the capability variant before its numeric fields; zero has no universal meaning across fields.
Detailed source locations
- Base 2.4 · §5.2.14.2.1 · Figure 338 · Identify – Identify Controller Data Structure, I/O Command Set Independent · Printed pages 372 · PDF 398
- NVM Command Set 1.3 · §4.1.5.4 · Figure 129 · I/O Command Set Specific Identify Controller Data Structure for the NVM Command Set · Printed pages 103–106 · PDF 103–106
- NVM Command Set 1.3 · §3.3.3.1 · Printed pages 45–47 · PDF 45–47
EXERCISE 07Does a defined LID guarantee an available log?
Software recognizes an LID, but a controller may not support it. What evidence separates a known name from an implemented log?
Hypothetical observations and assumptions
- The target entry in Supported Log Pages has LSUPP=0; another entry has LSUPP=1.
- Assume Supported Log Pages can be retrieved successfully; target-specific namespace, CSI and LSP rules still require checking.
Follow the field interpretation
Lookup sequence: Get Log Page with LID=00h; locate the supported-and-effects entry indexed by the target LID, then consult that log’s retrieval rules.
Step 1LSUPP reports this controller’s support for the log. A software decoder does not turn a zero entry into support; a one entry passes that support check.
Step 2Support does not imply existing events or measurements. An empty log, a capture not yet generated and an unsupported log are different states that a report should distinguish.
Step 3Subsequent requests must follow the log’s NSID, CSI, LSP, LSI, length and offset rules. LSUPP=1 does not legalize incorrect selectors or replace payload-format and revision checks.
- CSI
- Command Set Identifier
Detailed source locations
- Base 2.4 · §5.2.13.1.1 · Figure 211 · LID Supported and Effects Data Structure · Printed pages 217–218 · PDF 243–244
- Base 2.4 · §5.2.13 · Figure 204 · Get Log Page – Command Dword 10 · Printed pages 213 · PDF 239
- Base 2.4 · §5.2.13 · Figure 205 · Get Log Page – Command Dword 11 · Printed pages 214 · PDF 240
- Base 2.4 · §5.2.13 · Figure 208 · Get Log Page – Command Dword 14 · Printed pages 214–215 · PDF 240–241
01Identify – Command Dword 10
Base 2.4 · Figure 333 · Identify – Command Dword 10
§5.2.14 · Printed pages 337 · PDF 363
01.1 · UseIf Identify data appears to contain impossible capacities or capabilities, check which structure the command selected. Equal buffer sizes do not imply identical byte meanings.
01.2 · Fields and relationshipsCNS bits 7:0 selects the returned structure; CNTID bits 31:16 is used by only some operations; bits 15:8 are reserved. Clear unused CNTID as specified rather than treating it as a universal controller selector.
01.3 · Interpretation and exampleCNS=01h returns information for the controller processing the command; CNS=00h returns NVM namespace data. Applying 01h byte offsets to 00h can produce meaningless results despite a correct buffer length.
Back to this volume’s figure index02Identify – CNS Values
Base 2.4 · Figure 336 · Identify – CNS Values
§5.2.14 · Printed pages 338–339 · PDF 364–365
02.1 · UseChoose an Identify operation by the object being queried. Each row also states whether NSID, CNTID and CSI are used; copying only the CNS value is insufficient.
02.2 · Fields and relationshipsCommon values are 01h controller, 02h active NSID list, 03h namespace identifiers, 05h/06h command-set-specific namespace/controller and 08h command-set-independent namespace.10h lists allocated NSIDs; 16h granularity and 17h UUID-list rows provide further entry points.
02.3 · Interpretation and exampleActive and allocated lists can differ: a created but unattached namespace need not appear in this controller’s active list. Check the selected list before concluding that the namespace does not exist.
Back to this volume’s figure index03Identify – Identify Controller Data Structure, I/O Command Set Independent
Base 2.4 · Figure 338 · Identify – Identify Controller Data Structure, I/O Command Set Independent
§5.2.14.2.1 · Printed pages 340–382 · PDF 366–408
03.1 · UseThis 43-page table is the main source for controller identity, capabilities and limits. Select a question first and use the field-page map below instead of scanning from beginning to end.
03.2 · Fields and relationshipsUse MDTS for transfer size, OACS for Admin commands, ONCS for I/O capabilities, LPA/ELPE for logs, FRMW for firmware and SANICAP for sanitization. SQES/CQES describes entry sizes and SGLS pointer support. Interpret NPSS together with Power State Descriptors.
03.3 · Interpretation and exampleFor nonzero MDTS, multiply the minimum page size from CAP.MPSMIN by 2^MDTS:4 KiB and MDTS=5 gives 128 KiB. MDTS=0 removes this field’s limit, not every command or namespace limit. O/M/R markings, controller type and footnotes remain part of applicability.
Field locations within the large table
| Fields | Information to find | PDF pages |
|---|---|---|
| MDTS | Transfer size limit | 368 |
| OACS | Admin command support | 378–380 |
| FRMW | Firmware slots and update capabilities | 380–381 |
| LPA | Log-page capabilities | 381–382 |
| ELPE / NPSS | Error-entry limit / power-state count | 382 |
| SANICAP | Sanitize capabilities | 387–388 |
| SQES / CQES | Queue-entry sizes | 396 |
| ONCS | I/O command and feature support | 397–399 |
| VWC / AWUN / AWUPF | Cache and atomicity fields | 400 |
| SGLS | SGL types and alignment | 403–404 |
- SGL
- Scatter Gather List
04Identify – Namespace Identification Descriptor
Base 2.4 · Figure 342 · Identify – Namespace Identification Descriptor
§5.2.14.2.3 · Printed pages 388 · PDF 414
04.1 · UseUse identification descriptors to compare namespace identity across queries or controllers. An NSID used to address commands is not a substitute for persistent identity information.
04.2 · Fields and relationshipsNIDT byte 0 chooses the type; NIDL byte 1 gives NID length; bytes 3:2 are reserved and NID begins at byte 4. Types 1/2/3/4 contain 8-byte EUI64, 16-byte NGUID, 16-byte UUID and 1-byte CSI. Total size is NIDL+4; NIDL=0 ends the list.
04.3 · Interpretation and exampleAn entry with NIDL=16 occupies 20 bytes, so the next starts at the old offset plus 20, not 16. CSI identifies a command set, not a globally unique namespace despite occupying the NID field.
Back to this volume’s figure index05Identify – I/O Command Set Independent Identify Namespace Data Structure
Base 2.4 · Figure 346 · Identify – I/O Command Set Independent Identify Namespace Data Structure
§5.2.14.2.8 · Printed pages 391–394 · PDF 417–420
05.1 · UseUse this command-set-independent structure for namespace readiness, write protection and resource membership. Its byte layout differs from NVM CNS=00h.
05.2 · Fields and relationshipsCommon fields are NSFEAT byte 0, NMIC byte 1, RESCAP byte 2, FPI byte 3, ANAGRPID bytes 7:4 and NSATTR byte 8, followed by NVMSETID, ENDGID and NSTAT. FPI reports remaining Format percentage; NSATTR.CWP reports current write protection; NSTAT.NRDY reports namespace readiness.
05.3 · Interpretation and exampleCSTS.RDY=1 with namespace NRDY=0 can describe different readiness levels during media-independent initialization rather than a contradiction. Use ENDGID to select the corresponding Endurance Group health log.
Back to this volume’s figure index06Identify – Identify Namespace Data Structure, NVM Command Set
NVM Command Set 1.3 · Figure 123 · Identify – Identify Namespace Data Structure, NVM Command Set
§4.1.5.1 · Printed pages 85–93 · PDF 85–93
06.1 · UseThis is the primary NVM namespace lookup for capacity, format and alignment behavior. Distinguish the active format, supported-format list and performance recommendations.
06.2 · Fields and relationshipsNSZE bytes 7:0 counts addressable blocks; NCAP bytes 15:8 gives maximum allocation; NUSE bytes 23:16 current allocation. FLBAS byte 26 selects a format, DPS byte 29 selects PI settings and DLFEAT byte 33 describes deallocation behavior. NAWUN/NAWUPF and boundaries qualify atomicity; LBAF entries provide format sizes.
- PI
- Protection Information
06.3 · Interpretation and exampleNSZE=1000 means LBAs 0–999. With selected LBADS=12, data capacity is 1000×4096=4,096,000 bytes. FLBAS=12h is not an 18-byte format: it selects index 2 and metadata placement, with sizes obtained from that LBAF.
Field locations within the large table
| Fields | Information to find | PDF pages |
|---|---|---|
| NSZE / NCAP / NUSE / NSFEAT | Capacity and feature conditions | 85–86 |
| FLBAS / MC / DPC / DPS | Format and protection configuration | 86–87 |
| DLFEAT / NAWUN / NAWUPF | Deallocation behavior and atomic units | 88–89 |
| NABSN / NABO / NABSPF | Atomicity boundaries | 89 |
| NPWG / NPWA / NPDG / NPDA | Recommended performance granularity and alignment | 90 |
| LBAF | Format-list location and count | 93 |
07LBA Format Data Structure, NVM Command Set Specific
NVM Command Set 1.3 · Figure 125 · LBA Format Data Structure, NVM Command Set Specific
§4.1.5.1 · Printed pages 94 · PDF 94
07.1 · UseAfter FLBAS selects a format index, decode its four-byte LBAF entry here. It gives per-block data and metadata sizes.
07.2 · Fields and relationshipsMS bits 15:0 directly counts metadata bytes. LBADS bits 23:16 is the data-size exponent; zero means the format is currently unavailable. RP bits 25:24 ranks relative performance for the specified workload, not IOPS.
07.3 · Interpretation and exampleLBADS=12 and MS=8 mean 4096 data bytes plus 8 metadata bytes. Extended-LBA placement occupies 4104 bytes per block. LBADS excludes metadata, and RP=0 does not guarantee the fastest result for every workload.
Back to this volume’s figure index08NVM Command Set I/O Command Set Specific Identify Namespace Data Structure
NVM Command Set 1.3 · Figure 127 · NVM Command Set I/O Command Set Specific Identify Namespace Data Structure
§4.1.5.3 · Printed pages 97–101 · PDF 97–101
08.1 · UseFor 32/64-bit Guard, Storage Tags and extended formats, supplement CNS=00h with this CNS=05h/CSI=00h structure. It adds format capabilities rather than replacing FLBAS/DPS.
08.2 · Fields and relationshipsLBSTM supplies a Storage Tag mask, PIC reports protection-format capabilities, and the ELBAF array describes Guard format and tag width for each format index. Mask applicability also depends on PI enablement, PIC and masking-level capabilities.
- PI
- Protection Information
08.3 · Interpretation and exampleMatch the same index in LBAF and ELBAF: one supplies data/metadata sizes, the other PI layout. Sixteen metadata bytes alone do not establish a 64-bit Guard format.
Back to this volume’s figure index09Extended LBA Format Data Structure, NVM Command Set Specific
NVM Command Set 1.3 · Figure 128 · Extended LBA Format Data Structure, NVM Command Set Specific
§4.1.5.3 · Printed pages 101–102 · PDF 101–102
09.1 · UseUse ELBAF to resolve Guard format and the split between Storage and Reference Tags. STS here means Storage Tag Size, not status.
09.2 · Fields and relationshipsSTS bits 6:0 gives Storage Tag width. PIF bits 8:7 selects 16/32/64-bit Guard or a qualified format. QPIF bits 12:9 applies only with PIF=11b and the required capability. These fields do not establish transmitted PI when PI is disabled.
09.3 · Interpretation and examplePIF=10b and STS=16 selects 64-bit Guard with 16 high bits of its 48-bit Storage/Reference space assigned to Storage Tag and 32 remaining for Reference Tag. Allowed STS ranges differ across Guard formats.
Back to this volume’s figure index10I/O Command Set Specific Identify Controller Data Structure for the NVM Command Set
NVM Command Set 1.3 · Figure 129 · I/O Command Set Specific Identify Controller Data Structure for the NVM Command Set
§4.1.5.4 · Printed pages 103–106 · PDF 103–106
10.1 · UseConsult this CNS=06h/CSI=00h structure when Verify, Write Zeroes or Dataset Management encounters a size limit. Base MDTS is not every command’s sole constraint.
10.2 · Fields and relationshipsVSL/WZSL/WUSL use minimum-memory-page-based exponential sizes. DMRL counts ranges, DMRSL blocks per range and DMSL total blocks. ONCS support-variant bits determine whether limits are mandatory or recommended and change zero semantics.
10.3 · Interpretation and exampleDMRL=0 with NVMDSMSV=1 means no recommended range-count limit is reported. With NVMDSMSV=0, DMRL=0 means Dataset Management is unsupported. Do not translate every zero as unlimited.
Field locations within the large table
| Fields | Information to find | PDF pages |
|---|---|---|
| VSL / WZSL | Verify / Write Zeroes sizes | 103 |
| WUSL / DMRL / DMRSL | Write Uncorrectable and DSM range limits | 104 |
| DMSL / KPIOCAP / WZDSL | Total blocks, key capabilities, deallocate size | 105 |
| AOCS / VER / RLA | Admin support, version and rate-limit capabilities | 106 |


Comments