{
  "schemaVersion": 1,
  "slug": "ftl-mapping-footprint",
  "kind": "dataset",
  "title": "SSD mapping-table footprint: exact byte accounting",
  "summary": "Twelve constructed flat-map cases distinguish TB from TiB, mapping granularity from host sectors, and cache address coverage from cached user data.",
  "published": "2026-10-12",
  "updated": "2026-10-12",
  "evidenceType": "deterministic-arithmetic-examples",
  "method": "C in {10^12, 2^40, 4*2^40} logical bytes; G in {4096,16384} bytes per mapping; E in {4,8} bytes per entry; cache payload B=64*2^20 bytes. Entries=ceil(C/G), full map=entries*E, cached entries=min(floor(B/E),entries), cached address span=min(C,cached entries*G). These are selected assumptions, not measured firmware layouts.",
  "sourceUrl": "https://www.usenix.org/legacy/events/usenix08/tech/full_papers/agrawal/agrawal.pdf",
  "humanPage": "https://hesela.com/analyses/ssd-mapping-cache-hmb/",
  "downloadPath": "/data/datasets/ftl-mapping-footprint.csv",
  "codePath": "/research/ftl-mapping.mjs",
  "license": "CC0-1.0 for Hesela's original code and computed rows. Source publications retain their own rights.",
  "licenseUrl": "https://creativecommons.org/publicdomain/zero/1.0/",
  "columns": [
    {
      "name": "capacityBytes",
      "type": "number",
      "description": "Assumed logical capacity in bytes; decimal TB and binary TiB remain distinct."
    },
    {
      "name": "mappingUnitBytes",
      "type": "number",
      "description": "Logical bytes represented by one mapping; not necessarily a host sector or NAND page."
    },
    {
      "name": "entryBytes",
      "type": "number",
      "description": "Assumed flat-map entry payload in bytes; excludes cache tags and other metadata."
    },
    {
      "name": "cacheBytes",
      "type": "number",
      "description": "Assumed mapping-entry payload budget in bytes; not a measured HMB allocation."
    },
    {
      "name": "entryCount",
      "type": "number",
      "description": "Ceiling of logical capacity divided by mapping-unit size."
    },
    {
      "name": "fullMapBytes",
      "type": "number",
      "description": "Exact bytes in the flat mapping payload, excluding all ancillary structures."
    },
    {
      "name": "cachedEntries",
      "type": "number",
      "description": "Whole entries that fit, capped at the full map entry count."
    },
    {
      "name": "cachedLogicalBytes",
      "type": "number",
      "description": "Maximum logical address span represented by those entries, capped at logical capacity; not cached user data."
    }
  ],
  "limits": [
    "All inputs are constructed; no devices, firmware, address traces or HMB allocations were measured.",
    "Entry payload omits tags, replacement state, directories, validity bits, reverse maps, alignment and recovery metadata.",
    "No compression or hierarchical/block/hybrid mapping. Four-byte and eight-byte widths are assumptions, not universal encodings.",
    "Coverage is not hit ratio, RAM recommendation, throughput, latency or power-loss protection.",
    "Mapping-unit size is independent of host sector and NAND page size in this model.",
    "Exact integer arithmetic is deterministic; no statistical confidence interval applies."
  ],
  "citations": [
    {
      "id": "agrawal",
      "title": "Nitin Agrawal, Vijayan Prabhakaran, Ted Wobber, John D. Davis, Mark Manasse and Rina Panigrahy. Design Tradeoffs for SSD Performance. USENIX ATC 2008, pp. 57-70, sections 3.1, 3.4 and 4.",
      "url": "https://www.usenix.org/legacy/events/usenix08/tech/full_papers/agrawal/agrawal.pdf",
      "accessed": "2026-10-12"
    }
  ],
  "generatedAt": "2026-10-12T05:26:49.492Z",
  "runtime": {
    "node": "v24.21.0",
    "dependencies": "none",
    "seed": "not applicable: deterministic arithmetic"
  },
  "rows": [
    {
      "capacityBytes": 1000000000000,
      "mappingUnitBytes": 4096,
      "entryBytes": 4,
      "cacheBytes": 67108864,
      "entryCount": 244140625,
      "fullMapBytes": 976562500,
      "cachedEntries": 16777216,
      "cachedLogicalBytes": 68719476736
    },
    {
      "capacityBytes": 1000000000000,
      "mappingUnitBytes": 4096,
      "entryBytes": 8,
      "cacheBytes": 67108864,
      "entryCount": 244140625,
      "fullMapBytes": 1953125000,
      "cachedEntries": 8388608,
      "cachedLogicalBytes": 34359738368
    },
    {
      "capacityBytes": 1000000000000,
      "mappingUnitBytes": 16384,
      "entryBytes": 4,
      "cacheBytes": 67108864,
      "entryCount": 61035157,
      "fullMapBytes": 244140628,
      "cachedEntries": 16777216,
      "cachedLogicalBytes": 274877906944
    },
    {
      "capacityBytes": 1000000000000,
      "mappingUnitBytes": 16384,
      "entryBytes": 8,
      "cacheBytes": 67108864,
      "entryCount": 61035157,
      "fullMapBytes": 488281256,
      "cachedEntries": 8388608,
      "cachedLogicalBytes": 137438953472
    },
    {
      "capacityBytes": 1099511627776,
      "mappingUnitBytes": 4096,
      "entryBytes": 4,
      "cacheBytes": 67108864,
      "entryCount": 268435456,
      "fullMapBytes": 1073741824,
      "cachedEntries": 16777216,
      "cachedLogicalBytes": 68719476736
    },
    {
      "capacityBytes": 1099511627776,
      "mappingUnitBytes": 4096,
      "entryBytes": 8,
      "cacheBytes": 67108864,
      "entryCount": 268435456,
      "fullMapBytes": 2147483648,
      "cachedEntries": 8388608,
      "cachedLogicalBytes": 34359738368
    },
    {
      "capacityBytes": 1099511627776,
      "mappingUnitBytes": 16384,
      "entryBytes": 4,
      "cacheBytes": 67108864,
      "entryCount": 67108864,
      "fullMapBytes": 268435456,
      "cachedEntries": 16777216,
      "cachedLogicalBytes": 274877906944
    },
    {
      "capacityBytes": 1099511627776,
      "mappingUnitBytes": 16384,
      "entryBytes": 8,
      "cacheBytes": 67108864,
      "entryCount": 67108864,
      "fullMapBytes": 536870912,
      "cachedEntries": 8388608,
      "cachedLogicalBytes": 137438953472
    },
    {
      "capacityBytes": 4398046511104,
      "mappingUnitBytes": 4096,
      "entryBytes": 4,
      "cacheBytes": 67108864,
      "entryCount": 1073741824,
      "fullMapBytes": 4294967296,
      "cachedEntries": 16777216,
      "cachedLogicalBytes": 68719476736
    },
    {
      "capacityBytes": 4398046511104,
      "mappingUnitBytes": 4096,
      "entryBytes": 8,
      "cacheBytes": 67108864,
      "entryCount": 1073741824,
      "fullMapBytes": 8589934592,
      "cachedEntries": 8388608,
      "cachedLogicalBytes": 34359738368
    },
    {
      "capacityBytes": 4398046511104,
      "mappingUnitBytes": 16384,
      "entryBytes": 4,
      "cacheBytes": 67108864,
      "entryCount": 268435456,
      "fullMapBytes": 1073741824,
      "cachedEntries": 16777216,
      "cachedLogicalBytes": 274877906944
    },
    {
      "capacityBytes": 4398046511104,
      "mappingUnitBytes": 16384,
      "entryBytes": 8,
      "cacheBytes": 67108864,
      "entryCount": 268435456,
      "fullMapBytes": 2147483648,
      "cachedEntries": 8388608,
      "cachedLogicalBytes": 137438953472
    }
  ],
  "rowCount": 12,
  "artifacts": {
    "codeSha256": "03b3ed420153aca47aaeb6c48ce38d0669a1ad91076fa3092e56343f535c6630",
    "csvSha256": "9da3bc8aed15182fe9a434da3472770822d426a9772d43b1909f3bba5511d6d1"
  }
}
