{
  "slug": "s-ftl",
  "term": "S-FTL",
  "aliases": [
    "Spatial-locality-aware Flash Translation Layer"
  ],
  "definition": "S-FTL is a research flash translation layer that caches translation pages and compresses their address mappings using physical-page contiguity.",
  "note": "The bitmap representation records run heads and reconstructs other physical page numbers from logical offsets. A second bit lets a base run survive an intervening local rewrite. This is exact address reconstruction, not approximate learned lookup. [sftl2011]\n\nFewer heads need not mean fewer bytes. In a synthetic 512-entry example with four-byte heads, one-bit storage needs 76 bytes for three heads, while two-bit storage needs 136 bytes for two. These counts cover only packed bitmaps and head addresses, not total controller RAM. [model]\n\nThe model derives the crossover explicitly: a second bit adds 64 bitmap bytes for 512 entries, so it must remove at least 17 four-byte heads for a strict payload saving. Supplied run labels and excluded metadata make this a conditional calculation, not a device result. [model]\n\nRepresentation also depends on history. While a page stays cached, the paper switches into bitmap form below 80% of flat size and out above 90%; equality keeps the current form. A conditional 1728-byte bitmap versus 2048-byte flat map can therefore retain either form at the same final content. This is a size-state example, not an observed SSD trace. [sftl2011] [packed] A fresh cache load instead selects bitmap only below 80%, even if an earlier residency used bitmap. Holding the candidate size fixed at 1728 bytes, reloading selects the 2048-byte flat form. Equality preserves the current form only for resident-page updates, not a remembered form across eviction. [sftl2011]\n\nThe original design also gives some small compressed pages another eviction chance and buffers sparse dirty entries separately. Bitmap bytes alone do not reproduce its replacement or writeback behavior. [sftl2011]",
  "status": "research",
  "advantages": [],
  "limitations": [
    {
      "text": "The original performance evaluation uses trace-driven FlashSim simulations; it does not establish a ranking for current commercial SSDs.",
      "citationIds": [
        "sftl2011"
      ]
    },
    {
      "text": "Compression cannot certify persistence, integrity or recovery behavior.",
      "citationIds": [
        "model"
      ]
    }
  ],
  "related": [
    "dftl",
    "mapping-cache",
    "translation-page",
    "global-translation-directory",
    "page-level-mapping",
    "leaftl"
  ],
  "supersedes": [],
  "supersededBy": [],
  "firstSeen": null,
  "lastSeen": null,
  "updated": "2026-11-09",
  "citations": [
    {
      "id": "sftl2011",
      "title": "Jiang et al. S-FTL: An Efficient Address Translation for Flash Memory by Exploiting Spatial Locality. MSST 2011, III.B and IV.",
      "url": "https://msstconference.org/MSST-history/2011/Papers/Research/4.Jiang.pdf",
      "accessed": "2026-11-09"
    },
    {
      "id": "model",
      "title": "Hesela: synthetic S-FTL bitmap accounting, method, limits and reproduction commands.",
      "url": "https://hesela.dev/research/sftl-bitmap/README.md",
      "accessed": "2026-11-09"
    },
    {
      "id": "code",
      "title": "Hesela: canonical representation model.",
      "url": "https://hesela.dev/research/sftl-bitmap/model.py",
      "accessed": "2026-11-09"
    },
    {
      "id": "tests",
      "title": "Hesela: exhaustive reconstruction and accounting tests.",
      "url": "https://hesela.dev/research/sftl-bitmap/test_model.py",
      "accessed": "2026-11-09"
    },
    {
      "id": "results",
      "title": "Hesela: generated synthetic mappings, bitmaps and payload counts.",
      "url": "https://hesela.dev/research/sftl-bitmap/results.json",
      "accessed": "2026-11-09"
    },
    {
      "id": "analysis",
      "title": "Hesela: SSD mapping caches and host memory.",
      "url": "https://hesela.com/analyses/ssd-mapping-cache-hmb/",
      "accessed": "2026-11-09"
    },
    {
      "id": "packed",
      "title": "Hesela: actual packed bytes, backward-search decoder and history-dependent size example.",
      "url": "https://hesela.dev/research/sftl-bitmap/packed-results.json",
      "accessed": "2026-11-09"
    },
    {
      "id": "packed-code",
      "title": "Hesela: independent packed-payload verifier.",
      "url": "https://hesela.dev/research/sftl-bitmap/packed.py",
      "accessed": "2026-11-09"
    },
    {
      "id": "packed-tests",
      "title": "Hesela: packed-format boundary and history-state tests.",
      "url": "https://hesela.dev/research/sftl-bitmap/test_packed.py",
      "accessed": "2026-11-09"
    }
  ],
  "provenance": [
    "Primary-source synthesis plus original synthetic arithmetic. No simulator reproduction, device benchmark or independent scientific peer review is claimed.",
    "The model's 68-byte one-head payload is narrower than the paper's reported 70-byte example; no implementation allocation or undocumented header is inferred."
  ]
}
