{
  "slug": "dm-delay",
  "term": "dm-delay",
  "aliases": [
    "Device-mapper delay target"
  ],
  "definition": "dm-delay is a Linux device-mapper target that delays block I/O submission using configurable read, write and flush classes.",
  "note": "Parameters: Each settings group supplies a device, sector offset and delay in milliseconds. Three arguments share one group across classes; six separate reads from writes and flushes; nine give flushes their own group. [delay-doc]\n\nSelection: In Linux v6.12, write-direction bios carrying REQ_PREFLUSH select the flush class. A write-direction bio carrying FUA but not REQ_PREFLUSH selects the write class. This concerns flags arriving at the target, not every physical command downstream; the block layer can transform flush and FUA requests. [delay-source] [cache-control]\n\nTiming: The target delays submission, not completion for a fixed application-visible interval. Presuspend disables delaying and releases queued bios without waiting for expiry. Record observed timing separately from configured delay. [delay-source]\n\nEngine: In v6.12, all configured class delays are below 50 ms for the kernel thread path; otherwise the target uses a timer and workqueue. Expiry uses jiffies. This implementation boundary is not an application latency guarantee. [delay-source]",
  "status": "shipping",
  "advantages": [],
  "limitations": [
    {
      "text": "Selective block delays do not establish the cause or field frequency of a hardware slowdown.",
      "citationIds": [
        "delay-doc"
      ]
    }
  ],
  "related": [
    "dm-flakey",
    "fault-injection",
    "fail-slow",
    "force-unit-access"
  ],
  "supersedes": [],
  "supersededBy": [],
  "firstSeen": null,
  "lastSeen": null,
  "citations": [
    {
      "id": "delay-doc",
      "title": "Linux v6.12: dm-delay parameters",
      "url": "https://github.com/torvalds/linux/blob/adc218676eef25575469234709c2d87185ca223a/Documentation/admin-guide/device-mapper/delay.rst",
      "accessed": "2026-11-11"
    },
    {
      "id": "delay-source",
      "title": "Linux v6.12: dm-delay mapping, delayed submission and presuspend",
      "url": "https://github.com/torvalds/linux/blob/adc218676eef25575469234709c2d87185ca223a/drivers/md/dm-delay.c",
      "accessed": "2026-11-11"
    },
    {
      "id": "cache-control",
      "title": "Linux v6.12: explicit volatile write-back cache control",
      "url": "https://github.com/torvalds/linux/blob/adc218676eef25575469234709c2d87185ca223a/Documentation/block/writeback_cache_control.rst",
      "accessed": "2026-11-11"
    },
    {
      "id": "hesela-failslow",
      "title": "Hesela: Fail-slow NVMe SSDs: what SMART and heartbeats miss",
      "url": "https://hesela.com/analyses/nvme-fail-slow-unseen-by-smart/#dm-delay",
      "accessed": "2026-11-11"
    }
  ],
  "updated": "2026-11-11",
  "provenance": [
    "Implementation reviewed at Linux v6.12 commit adc218676eef25575469234709c2d87185ca223a.",
    "Source review only: no device-mapper target was loaded, no I/O was delayed and no hardware failure rate was measured."
  ]
}
