{
  "slug": "nvme-keep-alive",
  "term": "NVMe Keep Alive",
  "aliases": [
    "NVMe Keep Alive Timeout",
    "KATO",
    "Traffic Based Keep Alive"
  ],
  "definition": "NVMe Keep Alive is a watchdog mechanism for detecting loss of communication between a host and controller through command-based or traffic-based operation.",
  "note": "Base 2.3 distinguishes command-based Keep Alive from traffic-based Keep Alive. In traffic-based operation, commands fetched by the controller can satisfy its activity check; this is not proof that a particular write completed. [nvme-keep-alive-23]\n\nThe protocol's Keep Alive Timeout (KATO) uses milliseconds; the controller rounds KATO upward to its reported granularity when necessary. In contrast, nvme-cli v2.11's nvme connect --keep-alive-tmo uses seconds. Its reconnect-delay and ctrl-loss-tmo are separate connection-recovery settings, also in seconds. [nvme-keep-alive-23] [nvme-cli-keep-alive]\n\nLinux v6.12 can skip issuing a Keep Alive command when traffic-based support and observed completion activity permit it. Absence of periodic Keep Alive commands in a busy trace therefore does not by itself prove that the watchdog is disabled. This is a source-code inference, not a device experiment. [linux-keep-alive]\n\nIn the same function, a failed request allocation logs keep-alive failed and requests a controller reset before submitting that Keep Alive command. That message alone is not evidence of an unanswered on-wire command; retain its error value and surrounding recovery context. [linux-keep-alive]",
  "related": [
    "nvme-of",
    "io-timeout",
    "nvme-command-quiesce-time"
  ],
  "limitations": [
    {
      "text": "Communication-loss detection does not establish the outcome or durability of an individual write.",
      "citationIds": [
        "nvme-keep-alive-23"
      ]
    }
  ],
  "citations": [
    {
      "id": "nvme-keep-alive-23",
      "title": "NVM Express Base 2.3 (2025): sections 3.9, 5.2.1.1 and 9.6.2.1; Figures 328 and 416, Keep Alive, KATO and Command Quiesce Time.",
      "url": "https://nvmexpress.org/wp-content/uploads/NVM-Express-Base-Specification-Revision-2.3-2025.08.01-Ratified.pdf",
      "accessed": "2026-11-08"
    },
    {
      "id": "nvme-cli-keep-alive",
      "title": "nvme-cli v2.11: nvme-connect options, keep-alive-tmo, reconnect-delay and ctrl-loss-tmo.",
      "url": "https://raw.githubusercontent.com/linux-nvme/nvme-cli/v2.11/Documentation/nvme-connect.txt",
      "accessed": "2026-11-08"
    },
    {
      "id": "linux-keep-alive",
      "title": "Linux v6.12: nvme_keep_alive_work(), nvme_keep_alive_work_period() and nvme_update_keep_alive().",
      "url": "https://raw.githubusercontent.com/torvalds/linux/v6.12/drivers/nvme/host/core.c",
      "accessed": "2026-11-08"
    }
  ],
  "status": "shipping",
  "advantages": [],
  "supersedes": [],
  "supersededBy": [],
  "firstSeen": null,
  "lastSeen": null,
  "updated": "2026-11-08"
}
