Protocol

NVMe Controller

An NVMe controller is the hardware or software entity that manages access to one or more NVMe namespaces. In a local SSD it is a physical chip on the drive; in NVMe-oF it is a logical construct exposed by the target software to each connected initiator.

Controller Types

The NVMe specification defines several controller types:

  • I/O Controller — The standard type. Exposes namespaces for data read/write operations. Most NVMe devices are I/O controllers.
  • Discovery Controller — Used in NVMe-oF to advertise available subsystems and targets. Initiators query the discovery controller to find where to connect.
  • Administrative Controller — Provides management functions without I/O access.

Controller in NVMe-oF

In an NVMe-oF deployment, the target software (e.g. Linux kernel target, SPDK) creates a virtual NVMe controller per connected initiator host. Each controller has its own queue pairs and can be granted access to specific namespaces. This per-host controller model enables multi-tenant namespace isolation without hardware partitioning.

Queue Pairs

Each NVMe controller supports up to 65,535 I/O queue pairs plus one admin queue pair. A queue pair consists of a Submission Queue (SQ) where the host places commands, and a Completion Queue (CQ) where the controller returns results. The parallel queue model is the key reason NVMe outperforms SCSI-based protocols at high concurrency.