NVMe Asynchronous Event Request
An NVMe Asynchronous Event Request is a host-submitted administrative command that a controller completes when it has an asynchronous event to report.
For events cleared through an associated log, successful Get Log Page completion with Retain Asynchronous Event (RAE)=0 clears the event, while RAE=1 retains it. An unsuccessful command retains the event. Immediate events require an outstanding request when they occur; one-shot events clear when reported. Identical reports may be coalesced, so notification counts are not incident counts. [1]
Notification receipt, complete log acquisition and acknowledgement are separate outcomes. RAE does not guarantee a consistent snapshot: multi-command ANA retrieval checks its change count, while controller-initiated telemetry checks generation and continued availability. [1]
In libnvme 1.15 and 1.16.2, nvme_get_log_page modifies the supplied length, offset, buffer pointer and RAE fields. Reusing that structure after a failed chunk can successfully retrieve less than the original request. A deliberate full retry reconstructs the original arguments and checks capture completeness. [2]
Relations
Limitations
- A notification stream alone does not establish a complete incident history. [1]
Citations
- NVM Express Base 2.3: section 5.2.2, Figure 201, sections 5.2.12.1.13 and 8.1.29
- libnvme v1.16.2: nvme_get_log_page implementation
- Hesela: pinned libnvme command traces and byte-coverage results
Sources & caveats
- The library experiment uses synthetic payloads and a mocked ioctl, not an NVMe controller or io_uring. Its 336 constructed cases are not field incident frequencies. [3]