NVMe Flexible Data Placement: Placement, Reclaim Units, and Events

37 minute read

繁體中文

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

01

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.
02

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.
03

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.
04

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 sequencePrimary scopeWhat to explain and where to stop
R1 · Base PDF 110–111§3.2.4Use 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.32Start 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.22Use 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.4Compare 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.4Read 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.12Start 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.2Switch 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.7Confirm 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

The two choices within one WriteLBA selects the logical address. PID follows the namespace mapping to a current RU. RU A is an illustrative label, not a command address. Sources: Base 70/730.Write · NSID A · LBA 128 · PID 8001hLBA 128Namespace logical addressRGIF = 2 → RGID 2 / PHNDL 1A mapping: PH1 → RUH3RUH3 / RG2 → RU ACurrent write destination
LBA selects the logical address. PID follows the namespace mapping to a current RU. RU A is an illustrative label, not a command address. Sources: Base 70/730.
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

Same RG: changing only the isolation type
RUH typeNew data from X and YAfter relocating old X/Y data
Initially IsolatedSeparate RUsMay share a destination RU
Persistently IsolatedSeparate RUsMust retain separate destination RUs
Both allow relocation within the same RG. The difference is whether data from different RUHs can be combined. Sources: Base 295/731/732.
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

How 8001h selects RG 2 and PH 1Illustrative RGIF=2. Box widths aid layout; labels define actual bit widths. PH still requires the namespace mapping. Sources: Base 294/297.PID = 8001h = 1000 0000 0000 0001bbits 15:1410b → RGID 2bits 13:000 0000 0000 0001b → PHNDL 1Look up A: PH1 → RUH3, then select RG2
Illustrative RGIF=2. Box widths aid layout; labels define actual bit widths. PH still requires the namespace mapping. Sources: Base 294/297.

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

Configure before using placement in Writes
  1. Check FDPS and choose a currently valid configuration from LID20h.
  2. Prepare the Endurance Group: no namespaces may remain before changing FID1Dh.
  3. Set FID1Dh with SV=1, ENDGID, FDPCIDX and FDPE.
  4. Refresh data formats, then create namespaces with PHNDL→RUHID mappings.
  5. Configure events, enable the namespace Data Placement Directive, and inspect status/cache.
  6. Use PIDs in Writes; observe and manage with Status, Update, Statistics and Events.
This is an ordering of configuration dependencies. Existing namespace data must be handled before reconfiguration. Source: Base §8.1.12.2.
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

Similar command names, different targets
PurposeCommand and selectorState changed or returned
Enable FDP for a groupSet Features / FID1DhEndurance Group configuration
Use explicit PIDsDirective Send / Identify / Enable target02hData Placement enablement
Inspect PID stateI/O Management Receive / MO1Mapping, capacity, remaining time
Select an empty RUI/O Management Send / MO1Current RU references of listed PIDs
Data Placement has no direct Directive Send/Receive operations; RU management uses I/O Management. Sources: Base §8.1.9.4 and §§7.3–7.4.
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

One PH can have different state across four RGs
PID / PH / RGRUHIDRUAMW (blocks)EARUTR (s)
0001h / 1 / 03830
4001h / 1 / 13415
8001h / 1 / 23620
C001h / 1 / 3300
Illustrative RGIF=2 snapshot, not a capacity reservation. In the last row, RUAMW=0 means no available blocks, while EARUTR=0 means no time reported. Source: NVM 21.

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

Same PID, a different current RUCoordinate and complete relevant I/O before Update, then await Update completion before the next batch. Concurrent Writes may use either RU. Old data retains its own lifecycle. Source: Base §7.4.1.1.PID 8001h → RU ACurrent batch writtenPID 8001h → RU BEmpty RU for next batchUpdate changes the reference; PH1 → RUH3 staysValid LBAs in RU A do not disappear on Update
Coordinate and complete relevant I/O before Update, then await Update completion before the next batch. Concurrent Writes may use either RU. Old data retains its own lifecycle. Source: Base §7.4.1.1.

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

Check validity before using values
FlagValid when oneInterpretation when zero
PIVPID; original input for type03hPID reserved
NSIDVNSIDNSID zero and ignored
LVRGID and RUHIDBoth zero and ignored
LBAV (80h NVM extension)One relocated LBALBA zero and ignored
A zeroed field does not identify object zero unless its validity permits that interpretation. Sources: Base 303 and NVM 116.
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

Three operations at a data-lifecycle boundary
OperationPrimary changeWhat it does not establish
RUH UpdateRU reference for future writesOld data invalidation or erasure
DSM / AD=1Ranges no longer needed by the hostImmediate erasure or a PH→RUH remapping
Change FID1DhGroup configuration; clears events/statisticsArbitrary reconfiguration with namespaces still present
Separate the object and effect of each operation rather than treating them as one reclamation action. Sources: Base §7.4, §8.1.12 and NVM §3.3.3.
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 explainSpecification sections
Why group data for reclamationBase 2.4 §8.1.12.1
Isolation before and after internal relocationBase 2.4 §8.1.12.1
Read configurations and the PID layoutBase 2.4 §5.2.13.1.29
Enable the Endurance Group configurationBase 2.4 §8.1.12.2
Create the namespace handle mappingNVM 1.3 §4.1.6.3
Two enablement steps and three Write casesBase 2.4 §8.1.9.4
Follow one Write, including invalid PIDsBase 2.4 §8.1.12.3
Inspect available writes and remaining timeNVM 1.3 §3.2.1.1
Request a fresh RU without erasing old dataBase 2.4 §7.4.1.1
Usage reports allocation, not remaining capacityBase 2.4 §5.2.13.1.30
Measure writes over the same intervalBase 2.4 §5.2.13.1.31 · NVM 1.3 §4.1.4.6
Enable events on handles before reading recordsBase 2.4 §5.2.30.1.22
Interpret event causes, locations and moved dataBase 2.4 §5.2.13.1.32
Separate data invalidation, RU switching and resetBase 2.4 §8.1.12
Open the complete Chinese tutorial and figure explanations →

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

Specification editions

NVM Express Base Specification, Revision 2.4

NVM Express NVM Command Set Specification, Revision 1.3

Jia-Chang

Jia-Chang

Human

Comments

  Write a comment ...