To compile this driver into your kernel, place the following line in your kernel configuration file:
device nvmeOr, to load the driver as a module at boot, place the following line in loader.conf(5):
nvme_load="YES"
Most users will also want to enable nvd(4) to surface NVM Express namespaces as disk devices which can be partitioned. Note that in NVM Express terms, a namespace is roughly equivalent to a SCSI LUN.
The nvme driver provides support for NVM
Express (NVMe) controllers, such as:
The nvme driver creates controller device
nodes in the format /dev/nvmeX and namespace device
nodes in the format /dev/nvmeXnsY. Note that the NVM
Express specification starts numbering namespaces at 1, not 0, and this
driver follows that convention.
By default, nvme will create an I/O queue
pair for each CPU, provided enough MSI-X vectors can be allocated. To force
a single I/O queue pair shared by all CPUs, set the following tunable value
in loader.conf(5):
hw.nvme.per_cpu_io_queues=0
To force legacy interrupts for all nvme
driver instances, set the following tunable value in
loader.conf(5):
hw.nvme.force_intx=1
Note that use of INTx implies disabling of per-CPU I/O queue pairs.
The following controller-level sysctls are currently implemented:
The following queue pair-level sysctls are currently implemented. Admin queue sysctls take the format of dev.nvme.0.adminq and I/O queue sysctls take the format of dev.nvme.0.ioq0.
The nvme driver first appeared in
FreeBSD 9.2.
The nvme driver was developed by Intel and
originally written by Jim Harris
⟨jimharris@FreeBSD.org⟩, with contributions from Joe Golio at
EMC.
This man page was written by Jim Harris ⟨jimharris@FreeBSD.org⟩.