Skip to download

hesela.dev

Storage glossary · datasets · llms.txt · hesela.com

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 columns

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

MiB = 2^20 bytes. The combined row overlaps the first two rows; it must not be added to them. Downloads retain integer byte deltas.
WindowSecondsHost reads, MiBHost writes, MiBNAND programs, MiBByte WAF
write-window36000102412801.25
read-window3600655360128Undefined
combined-write-and-read720065536102414081.375
idle-window3600000Undefined

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

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.

  1. SNIA dictionary: write amplification factor. Operation-count convention, not the byte convention used in our examples.
  2. Hesela: SSD read reclaim and read-only accounting

Concepts: read reclaim, read disturb and write amplification.