Constructed accounting examples / not SSD measurements
Read-only SSD intervals: when byte WAF is undefined
Four constructed counter-delta cases preserve zero-host-write intervals, distinguish ratios from rates, and show why sequential windows must be combined before division.
Download CSV4 cases / 8 columnsJSON and provenance / Evaluator code / Research explanation
Method
Invented consecutive write and read windows, each 3,600 seconds, plus their combined interval and an independent idle case. Byte WAF = nandProgramBytes/hostWriteBytes when hostWriteBytes>0, otherwise null. Program rate = nandProgramBytes/durationSeconds. Combine nonoverlapping sequential windows by adding byte deltas and duration, not averaging ratios.
The read window assumes 128 MiB of physical programming and zero host-written bytes. This is not zero write amplification: the denominator is zero, so WAF is undefined. Its programmed-bytes-per-read-byte ratio is 1/512. That separate ratio identifies neither the firmware policy nor the cause of the programming.
| Window | Seconds | Host reads, MiB | Host writes, MiB | NAND programs, MiB | Byte WAF |
|---|---|---|---|---|---|
| write-window | 3600 | 0 | 1024 | 1280 | 1.25 |
| read-window | 3600 | 65536 | 0 | 128 | Undefined |
| combined-write-and-read | 7200 | 65536 | 1024 | 1408 | 1.375 |
| idle-window | 3600 | 0 | 0 | 0 | Undefined |
Reproduce
The dependency-free Node.js module reproduces the CSV. Missing and invalid counters are errors, not zeros. JSON null and empty CSV fields mean an undefined denominator here; they do not mean a measured zero ratio. Combined integer totals are checked for overflow before conversion to numbers.
node --input-type=module -e 'import { toCsv } from "./read-reclaim-accounting.mjs"; process.stdout.write(toCsv())'Limits
- Constructed counter deltas, not hardware observations, firmware simulation or reproduced paper data.
- NAND programming may include reclaim, garbage collection, metadata and other work; these rows do not separate causes.
- Counter availability, units, scope, resets and saturation must be verified before applying arithmetic to actual telemetry.
- Only nonoverlapping consecutive intervals of the same device and measurement scope can be combined. The combined row is not an additional independent observation.
- No latency, failure probability, read-count threshold or lifetime prediction. Deterministic arithmetic has no sampling confidence interval.
Column definitions
- scenario
- Constructed window label; combined-write-and-read overlaps its component rows and must not be added to them.
- hostReadBytes
- Host-read byte delta in this interval; zero is an explicit observation, not missing data.
- hostWriteBytes
- Host-written byte delta; denominator of byte WAF.
- nandProgramBytes
- Assumed physical NAND-program byte delta; not inferred from host counters or attributed entirely to reclaim.
- durationSeconds
- Interval duration in seconds; positive integer.
- byteWaf
- NAND-programmed bytes divided by host-written bytes; null in JSON and empty in CSV when denominator is zero.
- nandProgramBytesPerSecond
- Mean physical-program rate, bytes/second, across the whole interval; not peak throughput.
- nandProgramBytesPerHostReadByte
- NAND-programmed bytes/host-read byte; not WAF or causal attribution; null/blank if no host reads.
Sources and license
CC0-1.0 for Hesela's original code and constructed examples. Source publications retain their own rights.
- SNIA dictionary: write amplification factor. Operation-count convention, not the byte convention used in our examples.
- Hesela: SSD read reclaim and read-only accounting
Concepts: read reclaim, read disturb and write amplification.