{
  "slug": "nvme-command-identifier",
  "term": "NVMe Command Identifier",
  "aliases": [
    "NVMe CID"
  ],
  "definition": "An NVMe Command Identifier is a host-assigned 16-bit value that distinguishes outstanding commands within a submission queue.",
  "note": "Scope: CID is queue-scoped, not globally unique. On the memory-based path, SQID and CID together identify the completed command. SQID is reserved in NVMe over Fabrics. [base-2-0d]\n\nLifetime: SPDK v24.09 assigns a tracker CID to a request and, after non-retry completion processing, returns the tracker to its free list for reuse. A CID is therefore not a permanent request identifier. [spdk-24-09]\n\nReuse: Do not infer CID retirement from SQHD; that field reports consumed command slots, not command completion. A driver tracker index also does not make CID the submission-ring slot number. [base-2-0d] [spdk-24-09]",
  "related": [
    "nvme",
    "nvme-submission-queue",
    "nvme-completion-queue",
    "nvme-phase-tag"
  ],
  "citations": [
    {
      "id": "base-2-0d",
      "title": "NVM Express Base 2.0d, sections 3.3.1.2, 3.3.2.1.1-2 and 3.3.3; copyright 2008-2024 NVM Express, Inc., all rights reserved",
      "url": "https://nvmexpress.org/wp-content/uploads/NVM-Express-Base-Specification-2.0d-2024.01.11-Ratified.pdf",
      "accessed": "2026-10-23"
    },
    {
      "id": "spdk-24-09",
      "title": "SPDK v24.09: PCIe tracker completion, retirement and CID assignment",
      "url": "https://github.com/spdk/spdk/blob/v24.09/lib/nvme/nvme_pcie_common.c",
      "accessed": "2026-10-23"
    }
  ],
  "status": "shipping",
  "advantages": [],
  "limitations": [],
  "supersedes": [],
  "supersededBy": [],
  "firstSeen": null,
  "lastSeen": null,
  "updated": "2026-10-23",
  "provenance": [
    "Versioned sources explain protocol and implementation behavior; no hardware experiment or performance claim."
  ]
}
