| NVME(4) | Device Drivers Manual | NVME(4) | 
nvme —
nvme* at pci? dev ? function ?
nvme driver provides support for NVMe, or NVM
  Express, storage controllers conforming to the Non-Volatile Memory Host
  Controller Interface specification. Controllers complying to specification
  version 1.1 and 1.2 are known to work. Other versions should work too for
  normal operation with the exception of some pass-through commands.
The driver supports the following features:
On systems supporting MSI/MSI-X, the nvme
    driver uses per-CPU IO queue pairs for lockless and highly parallelized I/O.
    Interrupt handlers are scheduled on distinct CPUs. The driver allocates as
    many interrupt vectors as available, up to number of CPUs + 1. MSI supports
    up to 32 interrupt vectors within the system, MSI-X can have up to 2k. Each
    I/O queue pair has a separate command circular buffer. The
    nvme specification allows up to 64k commands per
    queue, the driver currently allocates 1024 entries per queue, or controller
    maximum, whatever is smaller. Command submissions are done always on the
    current CPU, the command completion interrupt is handled on the CPU
    corresponding to the I/O queue ID - first I/O queue on CPU0, second I/O
    queue on CPU1, etc. Admin queue command completion is handled by CPU0 by
    default. To keep lock contention to minimum, it is recommended to keep this
    assignment, even though it is possible to reassign the interrupt handlers
    differently using
  intrctl(8).
On systems without MSI, the driver uses a single HW interrupt handler for both admin and standard I/O commands. Command submissions are done on the current CPU, the command completion interrupt is handled on CPU0 by default. This leads to some lock contention, especially on command ccbs.
The driver offloads command completion processing to soft interrupt, in order to increase the total system I/O capacity and throughput.
NVM Express, Inc., NVM Express - scalable, efficient, and industry standard, http://nvmexpress.org/, 2016-06-12.
NVM Express, Inc., NVM Express Revision 1.2.1, http://www.nvmexpress.org/wp-content/uploads/NVM_Express_1_2_1_Gold_20160603.pdf, 2016-06-05.
nvme driver first appeared in
  OpenBSD 6.0 and in NetBSD 8.0.
nvme driver was written by David
  Gwynne
  <dlg@openbsd.org> for
  OpenBSD and ported to NetBSD
  by NONAKA Kimihiro
  <nonaka@NetBSD.org>.
  Jaromir Dolecek
  <jdolecek@NetBSD.org>
  contributed to making this driver MPSAFE.
nvme adapter cards are known to
  require PCIe Generation 3 slot. Such cards do not even probe when plugged into
  older generation slot.
The driver was also tested and confirmed working fine for emulated
    nvme devices under QEMU 2.8.0 and Oracle VirtualBox
    5.1.20.
| April 27, 2017 | NetBSD 10.1 |