NVMe Flexible Data Placement: Placement, Reclaim Units, and Events
00.01.FDP translates the host’s knowledge of which data expires together into placement choices the SSD can use. This report connects reclamation cost, configuration, namespace mappings, Writes, RUH updates, and the status, statistics and events used to assess the result. Follow a PID to its current RU and distinguish changes to a reference, logical data, or the group configuration.
- namespace
- Namespace, a formatted quantity of non-volatile memory accessed by a host through a controller.
- Host
- The system running the operating system and issuing NVMe commands.
- FDP
- Flexible Data Placement; host-directed organization of placement to reduce reclamation relocation.
- PID
- Placement Identifier; A 16-bit PID containing PHNDL and, according to the configuration, RGID.
- RUH
- Reclaim Unit Handle; A handle, abbreviated RUH, referencing one current RU in each RG.
- RU
- Reclaim Unit; A media unit, abbreviated RU, that receives a group of data in the FDP model.
The main ideas
Why place data together?
01-01Start with valid-data relocation cost, then separate RG, RUH and RU and compare initial versus persistent isolation. These define grouping and relocation constraints.
- RG
- Reclaim Group; A group, abbreviated RG, containing Reclaim Units.
From configuration to one Write
02-01A configuration defines resources and PID layout. The namespace maps PHNDL to RUH, and the Data Placement Directive lets a Write choose RG and PHNDL.
- PHNDL
- Placement Handle; a namespace-local mapping index that selects a RUHID.
Data lifetime and host control
03-01Status observes available writes, Update selects an empty RU, and DSM describes expired LBAs. Their distinct roles work together to reduce reclamation cost.
- DSM
- Dataset Management: host hints about use and allocation of data ranges.
Observe actual behavior
04-01Usage shows allocation origin, Statistics measures cumulative work, and Events records causes and locations. Check scope, interval and validity before interpreting values.
00.02.Assumes operating systems, computer organization and basic SSD knowledge. Examples use PCIe and the NVM Command Set. Counts and encodings are illustrative; device responses define actual capabilities. Necessary references explain the fields and conditions needed for FDP without expanding into unrelated topics.
- PCIe
- PCI Express, the transport and device interconnect used by an NVMe memory-based controller.
- NVM
- Non-Volatile Memory, memory that retains data without power.
Connecting the main ideas
00.03.Follow one data batch: group by expected expiration, configure resources and mappings, and use a PID to select the current RU. Filling it or issuing Update moves future writes to another RU. When the old data expires and the host describes deallocation is a separate, equally important part of the lifecycle.
00.04.The explanation follows this data path before returning each specification structure to the question it answers. Data sizes, resource counts, list indices and zero-based count encodings are kept distinct.
- zero-based
- zero-based: numbering starts at zero, so raw=3 can mean the fourth item or four units; the field definition still decides which.
A forward route through the specifications
R-1Establish the overall picture with the examples, then move forward through the actual PDF viewer pages below. Switch from Base to NVM once. On shared pages, use the start section and stop heading. The Chinese tutorial explains necessary background so the live report need not jump to every reference.
| Page sequence | Primary scope | What to explain and where to stop |
|---|---|---|
| R1 · Base PDF 110–111 | §3.2.4 | Use Figure 70 to establish RG/RUH/RU relationships. Stop before §3.2.5. |
| R2 · Base PDF 319–327 | §5.2.13.1.29–5.2.13.1.32 | Start at FDP Configurations: configuration/PID → Usage → Statistics → Events. Flag the NVM event extension for the final document switch. Stop before §5.2.13.1.33. |
| R3 · Base PDF 506–509 | §5.2.30.1.21–5.2.30.1.22 | Use 1Dh for the group configuration, then 1Eh for events on RUHs. Stop before §5.2.30.1.23. |
| R4 · Base PDF 594–597 | §7.3–7.4 | Compare Receive/Status with Send/Update and work through the two-PID count and buffer. Stop before §7.5. |
| R5 · Base PDF 653 | §8.1.9.4 | Read only under Data Placement and confirm that no direct Directive Send/Receive operations exist. Stop before §8.1.10. |
| R6 · Base PDF 673–678 | §8.1.12 | Start at the Flexible Data Placement heading near the page bottom. Tie together 730→731→732, then enablement, reset recovery and Writes. Stop before §8.1.13. |
| R7 · NVM PDF 26 | §3.2 | Switch once to NVM and complete Figure 21: PID/RUHID/EARUTR/RUAMW. Stop before §3.3. |
| R8 · NVM PDF 79 | §4.1.4.6–4.1.4.7 | Confirm the commands counted in Statistics, then use Figure 116 for the Media Reallocated ETSP. Stop before §4.1.4.8. |
- EARUTR
- Estimated Active Reclaim Unit Time Remaining in seconds.
- buffer
- Host memory prepared to supply or receive command data.
- RUAMW
- Reclaim Unit Available Media Writes; currently writable logical blocks.
- RUHID
- Reclaim Unit Handle Identifier within an Endurance Group.
- ETSP
- Event Type Specific; sixteen bytes interpreted by event type.
01 Why group data for reclamation
- NSID
- Namespace Identifier, a controller-visible numeric handle for a namespace; the identifier is not the namespace object itself.
- RGID
- Reclaim Group Identifier; selects a Reclaim Group.
- RGIF
- Reclaim Group Identifier Format; the number of high PID bits allocated to RGID.
01.01.FDP lets the host organize writes around data usage to reduce valid-data movement during reclamation. It operates within an Endurance Group. LBA selects a logical address, while a Placement Identifier follows a namespace mapping to the Reclaim Unit currently receiving data.
- Placement Identifier
- Placement Identifier; A 16-bit PID containing PHNDL and, according to the configuration, RGID.
- Endurance Group
- The media-management scope to which an FDP configuration applies.
- Reclaim Unit
- Reclaim Unit; A media unit, abbreviated RU, that receives a group of data in the FDP model.
Sources: Base 2.4 §8.1.12.1
Source: NVME-BASE-2.4, Rev. 2.4, §8.1.12.1, printed pages 647-650, PDF pages 673-676
02 Isolation before and after internal relocation
| RUH type | New data from X and Y | After relocating old X/Y data |
|---|---|---|
| Initially Isolated | Separate RUs | May share a destination RU |
| Persistently Isolated | Separate RUs | Must retain separate destination RUs |
- Persistently Isolated
- After relocation a destination RU contains only data originally written through the same RUH.
- Initially Isolated
- New writes are separated; relocation may combine data from different handles of this type.
02.01.An RU is referenced by at most one RUH, so new writes using different handles start separately. Initially Isolated handles allow relocated data from different handles of that type to be combined within the same Reclaim Group. Persistently Isolated handles require a destination RU containing only data written through the same handle.
- Reclaim Group
- Reclaim Group; A group, abbreviated RG, containing Reclaim Units.
Sources: Base 2.4 §8.1.12.1
Source: NVME-BASE-2.4, Rev. 2.4, §8.1.12.1, printed pages 649-650, PDF pages 675-676
03 Read configurations and the PID layout
03.01.LID 20h lists configurations for an Endurance Group. Use the log size and each DSZE, then inspect FDPCV, NRG, NRUH, RUHT, RUNS, and related fields. RGIF assigns the high bits of the 16-bit PID to RGID and the remaining low bits to PHNDL. A configuration index is not a byte offset.
- offset
- A displacement from a structure’s start; check the unit, usually bytes here.
- FDPCV
- FDP Configuration Valid; whether the candidate is currently available.
- index
- An item’s position in a list, distinct from its byte displacement.
- DSZE
- Descriptor Size; configuration-descriptor bytes including padding.
- NRUH
- Number of Reclaim Unit Handles; a direct count.
- RUHT
- Reclaim Unit Handle Type; selects the relocation-isolation rule.
- RUNS
- Reclaim Unit Nominal Size in bytes.
- LID
- Log Page Identifier: selects the type of log page to read.
- NRG
- Number of Reclaim Groups; a direct count.
Sources: Base 2.4 §5.2.13.1.29
Source: NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.29, printed pages 293-296, PDF pages 319-322
04 Enable the Endurance Group configuration
- Check FDPS and choose a currently valid configuration from LID20h.
- Prepare the Endurance Group: no namespaces may remain before changing FID1Dh.
- Set FID1Dh with SV=1, ENDGID, FDPCIDX and FDPE.
- Refresh data formats, then create namespaces with PHNDL→RUHID mappings.
- Configure events, enable the namespace Data Placement Directive, and inspect status/cache.
- Use PIDs in Writes; observe and manage with Status, Update, Statistics and Events.
- FDPCIDX
- FDP Configuration Index; a zero-based list index.
- ENDGID
- Endurance Group Identifier; identifies the target group.
- FDPE
- Flexible Data Placement Enable; the group enable bit in FID 1Dh.
- FDPS
- Flexible Data Placement Support; the controller capability bit.
- SV
- Save; requests saving a Set Features value.
04.01.Check FDPS and valid configurations, ensure the target Endurance Group has no namespaces, then set FID 1Dh with SV=1, FDPE and FDPCIDX. After a value change, refresh data-format information before creating namespaces. A successful feature-value change also clears that group’s FDP events and statistics.
- FID
- Feature Identifier: selects the Feature to read or configure.
Sources: Base 2.4 §8.1.12.2
Source: NVME-BASE-2.4, Rev. 2.4, §8.1.12.2, printed pages 651-652, PDF pages 677-678
05 Create the namespace handle mapping
05.01.NPHNDLS and the Placement Handle List define a namespace-local PHNDL→RUHID mapping. A host may list distinct RUHs; NPHNDLS=0 asks the controller to choose one for PHNDL 0. Namespaces sharing an RUH must use the same data format, and controller-selected and explicitly selected handles have allocation restrictions.
- controller
- Controller, the entity that implements the NVMe interface, fetches commands, and reports completions.
- NPHNDLS
- Number of Placement Handles explicitly supplied at namespace creation.
Sources: NVM Command Set 1.3 §4.1.6.3
Source: NVME-NVM-CS-1.3, Rev. 1.3, §4.1.6.3, printed pages 110-113, PDF pages 110-113
06 Two enablement steps and three Write cases
| Purpose | Command and selector | State changed or returned |
|---|---|---|
| Enable FDP for a group | Set Features / FID1Dh | Endurance Group configuration |
| Use explicit PIDs | Directive Send / Identify / Enable target02h | Data Placement enablement |
| Inspect PID state | I/O Management Receive / MO1 | Mapping, capacity, remaining time |
| Select an empty RU | I/O Management Send / MO1 | Current RU references of listed PIDs |
- I/O
- Input/Output, the class of data operations performed on a namespace.
06.01.Within an FDP-enabled group, enable the namespace’s Data Placement Directive before explicitly specifying a PID. Enable uses outer Identify DTYPE=00h and target DTYPE=02h in CDW12. Data Placement has no Send/Receive operations of its own. Writes without a directive use PHNDL 0 and a controller-selected Reclaim Group.
- DTYPE
- Directive Type; selects the management or I/O directive interpretation.
Sources: Base 2.4 §8.1.9.4
Source: NVME-BASE-2.4, Rev. 2.4, §8.1.9.4, printed pages 627, PDF pages 653
07 Follow one Write, including invalid PIDs
07.01.An explicit-placement Write uses DTYPE=02h and DSPEC=PID while LBA and block count define the logical data. If RGID or PHNDL is invalid, the controller chooses an accessible RG/RUH and records Invalid Placement Identifier if enabled on the selected RUH. This Write rule does not apply to Update.
- DSPEC
- Directive Specific; carries the PID for Data Placement I/O.
Sources: Base 2.4 §8.1.12.3
Source: NVME-BASE-2.4, Rev. 2.4, §8.1.12.3, printed pages 652, PDF pages 678
08 Inspect available writes and remaining time
| PID / PH / RG | RUHID | RUAMW (blocks) | EARUTR (s) |
|---|---|---|---|
| 0001h / 1 / 0 | 3 | 8 | 30 |
| 4001h / 1 / 1 | 3 | 4 | 15 |
| 8001h / 1 / 2 | 3 | 6 | 20 |
| C001h / 1 / 3 | 3 | 0 | 0 |
08.01.I/O Management Receive MO=01h reports each namespace PHNDL for each RG. NVM descriptors contain PID, RUHID, EARUTR in seconds, and RUAMW in logical blocks. Each descriptor reflects processing-time state, may not reflect outstanding commands, and need not match nominal RUNS.
- MO
- Management Operation in I/O Management commands.
Sources: NVM Command Set 1.3 §3.2.1.1
Source: NVME-NVM-CS-1.3, Rev. 1.3, §3.2.1.1, printed pages 26, PDF pages 26
09 Request a fresh RU without erasing old data
09.01.I/O Management Send MO=01h takes a PID list and moves a written RU reference to an empty RU; an already-empty RU may be retained or changed. Invalid PIDs or excess limits cause rejection, but partial updates may already have occurred. Writes processed concurrently may use the RU before or after the update.
Sources: Base 2.4 §7.4.1.1
Source: NVME-BASE-2.4, Rev. 2.4, §7.4.1.1, printed pages 570-571, PDF pages 596-597
10 Usage reports allocation, not remaining capacity
10.01.LID 21h reports RUHA by RUHID: zero unused by namespaces, one explicitly host-selected, and two controller-selected. The Endurance Group list has at most one type-2 entry. It does not report available writes per RG; use I/O Management Receive for that.
- RUHA
- Reclaim Unit Handle Attributes; allocation-origin classification in Usage.
Sources: Base 2.4 §5.2.13.1.30
Source: NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.30, printed pages 296-297, PDF pages 322-323
11 Measure writes over the same interval
11.01.LID 22h records host writes in HBMW, host plus internal controller writes in MBMW, and erased bytes in MBE, with the relevant data/metadata accounting. Compare deltas within the same configuration interval to observe write amplification as ΔMBMW/ΔHBMW. Do not add erased bytes to the numerator or subtract across a reset of the counters.
- metadata
- Additional stored information considered alongside data bytes in accounting and formats.
- HBMW
- Host Bytes with Metadata Written; host write accounting in bytes.
- MBMW
- Media Bytes with Metadata Written; includes relevant internal writes.
- MBE
- Media Bytes Erased; erased-byte accounting.
Sources: Base 2.4 §5.2.13.1.31
Source: NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.31, printed pages 297-298, PDF pages 323-324
11.02.For NVM, HBMW/MBMW include User Data Out Commands, Write Zeroes and Write Uncorrectable; an equal-size host payload is not the criterion for accounting.
- User Data Out Commands
- A command category writing user data to media, not necessarily an equal-size PCIe payload.
Sources: NVM Command Set 1.3 §4.1.4.6
Source: NVME-NVM-CS-1.3, Rev. 1.3, §4.1.4.6, printed pages 79, PDF pages 79
12 Enable events on handles before reading records
12.01.FID 1Eh selects an RUH through NSID plus PHNDL and enables or disables the listed event types. Get returns supported types and enablement; Set supplies a type list. Namespaces sharing the RUH share the effect of its settings. LID 23h contains events that actually occurred.
Sources: Base 2.4 §5.2.30.1.22
Source: NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.22, printed pages 481-483, PDF pages 507-509
13 Interpret event causes, locations and moved data
| Flag | Valid when one | Interpretation when zero |
|---|---|---|
| PIV | PID; original input for type03h | PID reserved |
| NSIDV | NSID | NSID zero and ignored |
| LV | RGID and RUHID | Both zero and ignored |
| LBAV (80h NVM extension) | One relocated LBA | LBA zero and ignored |
- NSIDV
- NSID Valid in an event.
- LBAV
- LBA Valid; validity of the example relocated LBA.
- PIV
- Placement Identifier Valid in an event.
- LV
- Location Valid; validity of event RGID and RUHID.
13.01.LID 23h selects either host or controller events and returns 64-byte records in occurrence order. Read ETYP, then PIV/NSIDV/LV to determine which identifiers are valid. The NVM Media Reallocated extension adds LBAV, NLBAM and one example LBA. Timestamp values are not guaranteed to increase.
- NLBAM
- Number of LBAs Moved; zero and FFFFh have special meanings.
- ETYP
- Event Type; the event code inside a record.
Sources: Base 2.4 §5.2.13.1.32
Source: NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.32, printed pages 298-301, PDF pages 324-327
14 Separate data invalidation, RU switching and reset
| Operation | Primary change | What it does not establish |
|---|---|---|
| RUH Update | RU reference for future writes | Old data invalidation or erasure |
| DSM / AD=1 | Ranges no longer needed by the host | Immediate erasure or a PH→RUH remapping |
| Change FID1Dh | Group configuration; clears events/statistics | Arbitrary reconfiguration with namespaces still present |
- AD
- Attribute–Deallocate in Dataset Management.
14.01.Reducing reclamation cost requires tracking the useful lifetime of data written into an RU. When no longer needed, Dataset Management AD=1 can identify its LBA ranges. RUH Update changes the reference for future writes. After reset, refresh configuration, event settings, PID state and cache information; preserved enablement does not imply unchanged RU state.
Sources: Base 2.4 §8.1.12
Source: NVME-BASE-2.4, Rev. 2.4, §8.1.12, printed pages 647-652, PDF pages 673-678
Where to continue in the specification
15.01.Use the flow above to frame the problem, then open the corresponding sections for fields and full conditions. The Chinese tutorial also explains every in-scope figure with its takeaway, example, and details.
| Concept to explain | Specification sections |
|---|---|
| Why group data for reclamation | Base 2.4 §8.1.12.1 |
| Isolation before and after internal relocation | Base 2.4 §8.1.12.1 |
| Read configurations and the PID layout | Base 2.4 §5.2.13.1.29 |
| Enable the Endurance Group configuration | Base 2.4 §8.1.12.2 |
| Create the namespace handle mapping | NVM 1.3 §4.1.6.3 |
| Two enablement steps and three Write cases | Base 2.4 §8.1.9.4 |
| Follow one Write, including invalid PIDs | Base 2.4 §8.1.12.3 |
| Inspect available writes and remaining time | NVM 1.3 §3.2.1.1 |
| Request a fresh RU without erasing old data | Base 2.4 §7.4.1.1 |
| Usage reports allocation, not remaining capacity | Base 2.4 §5.2.13.1.30 |
| Measure writes over the same interval | Base 2.4 §5.2.13.1.31 · NVM 1.3 §4.1.4.6 |
| Enable events on handles before reading records | Base 2.4 §5.2.30.1.22 |
| Interpret event causes, locations and moved data | Base 2.4 §5.2.13.1.32 |
| Separate data invalidation, RU switching and reset | Base 2.4 §8.1.12 |
Check your understanding
1. Where does PID 8001h point when PHNDL 1 maps to RUH 3 and RGIF=2?
16.01.The high two bits select RG 2 and the low fourteen select PHNDL 1. The namespace maps it to RUH 3, so the Write uses that handle’s current RU in RG 2. This is neither a physical address nor an LBA.
Sources
Source: NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.29, printed pages 293-296, PDF pages 319-322
Source: NVME-BASE-2.4, Rev. 2.4, §8.1.12.1, printed pages 647-650, PDF pages 673-676
2. Does the same invalid PID have the same effect in Write and RUH Update?
16.02.No. A Data Placement Write selects an accessible fallback location and logs under the enablement rules. Update rejects invalid PIDs, and partial updates may precede failure. The rules are not interchangeable.
Sources
Source: NVME-BASE-2.4, Rev. 2.4, §8.1.12.3, printed pages 652, PDF pages 678
Source: NVME-BASE-2.4, Rev. 2.4, §7.4.1.1, printed pages 570-571, PDF pages 596-597
3. How many items do NUMFDPC=1, NPHNDLS=2 and NPID=1 represent?
16.03.Two configurations, two explicitly supplied Placement Handles, and two Update PIDs. The first and last use count-minus-one encoding; NPHNDLS is direct.
Sources
Source: NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.29, printed pages 293-296, PDF pages 319-322
Source: NVME-NVM-CS-1.3, Rev. 1.3, §4.1.6.3, printed pages 110-113, PDF pages 110-113
Source: NVME-BASE-2.4, Rev. 2.4, §7.4.1.1, printed pages 570-571, PDF pages 596-597
4. Does sharing a Persistently Isolated RUH isolate two namespaces from each other?
16.04.No. Persistent isolation distinguishes originating RUHs. Two namespaces sharing one RUH are within the same isolation identity and also share the effect of its event settings.
Sources
Source: NVME-BASE-2.4, Rev. 2.4, §8.1.12.1, printed pages 649-650, PDF pages 675-676
Source: NVME-BASE-2.4, Rev. 2.4, §5.2.30.1.22, printed pages 481-483, PDF pages 507-509
5. Can NLBAM=8 and LBA=100 identify all relocated LBAs?
16.05.No. First check LBAV. LBA 100 is one example; the other seven may be disjoint and cannot be reconstructed from that single field.
Sources
Source: NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.32, printed pages 298-301, PDF pages 324-327
6. Can HBMW/MBMW deltas continue across an FDP configuration change?
16.06.Not directly. A successful feature-value change clears the counters. End the previous interval and establish a new baseline; also account for saturation and a zero host-write delta.
Sources
Source: NVME-BASE-2.4, Rev. 2.4, §5.2.13.1.31, printed pages 297-298, PDF pages 323-324
Source: NVME-BASE-2.4, Rev. 2.4, §8.1.12.2, printed pages 651-652, PDF pages 677-678


Comments