{
  "slug": "nvme-device-self-test",
  "term": "NVMe Device Self-test",
  "aliases": [
    "NVMe DST",
    "NVMe short self-test",
    "NVMe extended self-test"
  ],
  "definition": "NVMe Device Self-test is an optional controller-executed diagnostic capability with short and extended operations whose namespace scope is selected by the initiating command.",
  "note": "Support is advertised by Identify Controller OACS bit 4, not inferred from a readable SMART log. For short and extended operations (codes 1h and 2h), NSID 0 excludes namespaces, a valid active specific NSID includes that namespace, and 0xffffffff includes attached namespaces accessible through the controller at start. Base 2.3 also defines Host-Initiated Refresh (code 3h), which ignores NSID; this record focuses on diagnostic short/extended tests. [base23-self-test] Command acceptance starts an operation; obtain its result from log 06h. nvme-cli v2.13 defaults to all namespaces and its --wait does not evaluate the newest result. The CLI treats omitted code or --self-test-code=0 as a log read, not submission of protocol-reserved code 0h; its status/wait paths inspect progress rather than a diagnostic verdict. [nvme-cli-self-test] Background testing can affect performance. Base 2.3 requires a short operation to abort on a controller-level reset affecting the testing controller but an extended operation to persist and resume. [base23-self-test]",
  "status": "shipping",
  "advantages": [],
  "limitations": [
    {
      "text": "Segments are vendor-specific; a completed result without detected error does not certify all application data or future reliability.",
      "citationIds": [
        "base23-self-test"
      ]
    }
  ],
  "related": [
    "nvme",
    "nvme-smart-log",
    "nvme-device-self-test-log"
  ],
  "supersedes": [],
  "supersededBy": [],
  "firstSeen": null,
  "lastSeen": null,
  "citations": [
    {
      "id": "base23-self-test",
      "title": "NVM Express Base 2.3: sections 5.2.5, 5.2.12.1.7 and 8.1.8; Figures 174-177, 215-216 and 328",
      "url": "https://nvmexpress.org/wp-content/uploads/NVM-Express-Base-Specification-Revision-2.3-2025.08.01-Ratified.pdf",
      "accessed": "2026-10-15"
    },
    {
      "id": "nvme-cli-self-test",
      "title": "nvme-cli v2.13: device_self_test and wait_self_test implementation",
      "url": "https://github.com/linux-nvme/nvme-cli/blob/v2.13/nvme.c",
      "accessed": "2026-10-15"
    },
    {
      "id": "nvme-cli-self-test-manual",
      "title": "nvme-cli v2.13: Device Self-test command, result retrieval and SIGINT behavior",
      "url": "https://github.com/linux-nvme/nvme-cli/blob/v2.13/Documentation/nvme-device-self-test.txt",
      "accessed": "2026-10-15"
    },
    {
      "id": "hesela-self-test",
      "title": "Hesela: NVMe self-test scope, result validity and diagnostic boundaries",
      "url": "https://hesela.com/analyses/nvme-health-log-coverage/#device-self-test",
      "accessed": "2026-10-15"
    }
  ],
  "updated": "2026-10-15"
}
