{
  "slug": "nvme-asynchronous-event-request",
  "term": "NVMe Asynchronous Event Request",
  "aliases": [
    "NVMe AER",
    "Asynchronous Event Request"
  ],
  "definition": "An NVMe Asynchronous Event Request is a host-submitted administrative command that a controller completes when it has an asynchronous event to report.",
  "note": "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. [nvme-base23-aer]\n\nNotification 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. [nvme-base23-aer]\n\nIn 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. [libnvme-get-log]",
  "status": "shipping",
  "advantages": [],
  "limitations": [
    {
      "text": "A notification stream alone does not establish a complete incident history.",
      "citationIds": [
        "nvme-base23-aer"
      ]
    }
  ],
  "related": [
    "nvme-smart-log",
    "nvme-error-information-log",
    "nvme-persistent-event-log"
  ],
  "supersedes": [],
  "supersededBy": [],
  "firstSeen": null,
  "lastSeen": null,
  "citations": [
    {
      "id": "nvme-base23-aer",
      "title": "NVM Express Base 2.3: section 5.2.2, Figure 201, sections 5.2.12.1.13 and 8.1.29",
      "url": "https://nvmexpress.org/wp-content/uploads/NVM-Express-Base-Specification-Revision-2.3-2025.08.01-Ratified.pdf",
      "accessed": "2026-11-06"
    },
    {
      "id": "libnvme-get-log",
      "title": "libnvme v1.16.2: nvme_get_log_page implementation",
      "url": "https://github.com/linux-nvme/libnvme/blob/07d6c32c10fd63fad141cd0120314a055695de32/src/nvme/ioctl.c",
      "accessed": "2026-11-06"
    },
    {
      "id": "rae-evidence",
      "title": "Hesela: pinned libnvme command traces and byte-coverage results",
      "url": "https://hesela.dev/research/nvme-rae/summary.json",
      "accessed": "2026-11-07"
    }
  ],
  "updated": "2026-11-07",
  "provenance": [
    "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. [rae-evidence]"
  ]
}
