NVMe Keep Alive
NVMe Keep Alive is a watchdog mechanism for detecting loss of communication between a host and controller through command-based or traffic-based operation.
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. [1]
The 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. [1] [2]
Linux 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. [3]
In 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. [3]
Relations
Limitations
- Communication-loss detection does not establish the outcome or durability of an individual write. [1]
Citations
- 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.
- nvme-cli v2.11: nvme-connect options, keep-alive-tmo, reconnect-delay and ctrl-loss-tmo.
- Linux v6.12: nvme_keep_alive_work(), nvme_keep_alive_work_period() and nvme_update_keep_alive().