{
  "schemaVersion": 1,
  "slug": "ssd-overprovisioning-model",
  "title": "SSD over-provisioning: analytical model values",
  "summary": "Seven computed reserve-to-write-amplification cases with explicit logical and physical capacity denominators. Analytical model evaluation, not SSD measurements.",
  "published": "2026-10-12",
  "updated": "2026-10-12",
  "generatedAt": "2026-10-11T23:22:54.787Z",
  "evidenceType": "analytical-model-evaluation",
  "license": "CC0-1.0 for Hesela's original implementation and computed rows; source papers retain their rights.",
  "licenseUrl": "https://creativecommons.org/publicdomain/zero/1.0/",
  "sourceUrl": "https://arxiv.org/abs/1110.4245v1",
  "humanPage": "https://hesela.com/analyses/ssd-overprovisioning-denominators/",
  "downloadPath": "/data/datasets/ssd-overprovisioning-model.csv",
  "codePath": "/research/ssd-overprovisioning.mjs",
  "rowCount": 7,
  "columns": [
    {
      "name": "opUserPercent",
      "type": "number",
      "description": "100*(P-L)/L; reserve divided by logical capacity."
    },
    {
      "name": "sparePhysicalPercent",
      "type": "number",
      "description": "100*(P-L)/P; the same reserve divided by physical capacity."
    },
    {
      "name": "physicalPerLogical",
      "type": "number",
      "description": "P/L = 1 + rho; dimensionless."
    },
    {
      "name": "waf",
      "type": "number",
      "description": "Model physical page writes per host page write; dimensionless, not measured."
    },
    {
      "name": "reclaimedFraction",
      "type": "number",
      "description": "Fraction q of victim pages freed for new host writes; 1/waf."
    },
    {
      "name": "validFraction",
      "type": "number",
      "description": "Fraction of victim pages relocated; 1-q."
    }
  ],
  "method": "Evaluate Xiang and Kurkoski arXiv:1110.4245v1 equation 12 by solving A*log(1-1/A)+(1+rho)=0 for finite A>1. Bisection uses log1p, an expanding upper bracket and at most 100 steps, stopping at floating-point resolution. rho=(P-L)/L; supported domain 0.01 to 1. Capacity units are identical. No random sampling or device I/O.",
  "limits": [
    "Uniform independent page writes and stationary simplified cleaning behavior; not commercial firmware.",
    "An asymptotic approximation to the paper's greedy model, not an exact finite-block greedy formula.",
    "No reproduction of either paper's simulator, trace evaluation or physical-device experiment.",
    "No metadata, parity, compression, wear-leveling or cache-folding traffic; no latency or lifetime prediction.",
    "No confidence interval: deterministic arithmetic uncertainty is distinct from model applicability.",
    "P denotes physical capacity available to this model, not all installed NAND including unavailable overhead."
  ],
  "citations": [
    {
      "id": "xiang",
      "title": "Luojie Xiang and Brian M. Kurkoski. An Improved Analytic Expression for Write Amplification in NAND Flash. arXiv:1110.4245v1 (19 October 2011), sections II-IV, equation 12 and Table I.",
      "url": "https://arxiv.org/abs/1110.4245v1",
      "accessed": "2026-10-11"
    },
    {
      "id": "desnoyers",
      "title": "Peter Desnoyers. Analytic Modeling of SSD Write Performance. SYSTOR 2012, sections 2-6, Tables 1-2. DOI: 10.1145/2367589.2367603.",
      "url": "https://www.ccs.neu.edu/home/pjd/papers/pjd-systor12.pdf",
      "accessed": "2026-10-11"
    }
  ],
  "artifacts": {
    "modelSha256": "823e0d83ea46548715cbc2eee23cdedcaab7c1148e57959d7999f0884a8aacc2",
    "csvSha256": "f2842db4d873ce3ddff59aa5367268a9c24c804412d5b615f6f92e2334addf9e"
  },
  "rows": [
    {
      "opUserPercent": 7.000000000000001,
      "sparePhysicalPercent": 6.542056074766355,
      "physicalPerLogical": 1.07,
      "waf": 7.8171596812364434,
      "reclaimedFraction": 0.12792370129016342,
      "validFraction": 0.8720762987098366
    },
    {
      "opUserPercent": 10,
      "sparePhysicalPercent": 9.09090909090909,
      "physicalPerLogical": 1.1,
      "waf": 5.677490913348391,
      "reclaimedFraction": 0.1761341436318097,
      "validFraction": 0.8238658563681903
    },
    {
      "opUserPercent": 20,
      "sparePhysicalPercent": 16.666666666666668,
      "physicalPerLogical": 1.2,
      "waf": 3.1877759651472513,
      "reclaimedFraction": 0.3136983310412178,
      "validFraction": 0.6863016689587822
    },
    {
      "opUserPercent": 25,
      "sparePhysicalPercent": 20,
      "physicalPerLogical": 1.25,
      "waf": 2.6927308399198964,
      "reclaimedFraction": 0.37137020350305344,
      "validFraction": 0.6286297964969465
    },
    {
      "opUserPercent": 30,
      "sparePhysicalPercent": 23.076923076923077,
      "physicalPerLogical": 1.3,
      "waf": 2.364234137972736,
      "reclaimedFraction": 0.4229699520612928,
      "validFraction": 0.5770300479387072
    },
    {
      "opUserPercent": 50,
      "sparePhysicalPercent": 33.333333333333336,
      "physicalPerLogical": 1.5,
      "waf": 1.7158202148587192,
      "reclaimedFraction": 0.5828116438658115,
      "validFraction": 0.4171883561341885
    },
    {
      "opUserPercent": 100,
      "sparePhysicalPercent": 50,
      "physicalPerLogical": 2,
      "waf": 1.255000974915975,
      "reclaimedFraction": 0.7968121300200203,
      "validFraction": 0.20318786997997973
    }
  ]
}
