Module Name:    src
Committed By:   jdolecek
Date:           Wed Sep 21 20:01:03 UTC 2016

Modified Files:
        src/share/man/man4: nvme.4

Log Message:
expand driver description


To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/share/man/man4/nvme.4

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/share/man/man4/nvme.4
diff -u src/share/man/man4/nvme.4:1.4 src/share/man/man4/nvme.4:1.5
--- src/share/man/man4/nvme.4:1.4	Fri Sep 16 12:43:37 2016
+++ src/share/man/man4/nvme.4	Wed Sep 21 20:01:03 2016
@@ -1,4 +1,4 @@
-.\"	$NetBSD: nvme.4,v 1.4 2016/09/16 12:43:37 wiz Exp $
+.\"	$NetBSD: nvme.4,v 1.5 2016/09/21 20:01:03 jdolecek Exp $
 .\"	$OpenBSD: nvme.4,v 1.2 2016/04/14 11:53:37 jmc Exp $
 .\"
 .\" Copyright (c) 2016 David Gwynne <d...@openbsd.org>
@@ -15,7 +15,7 @@
 .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 .\"
-.Dd September 16, 2016
+.Dd September 21, 2016
 .Dt NVME 4
 .Os
 .Sh NAME
@@ -29,10 +29,77 @@ The
 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 too for normal operation with exception of some
+passthrough commands.
+.Pp
+Driver supports following features:
+.Bl -bullet -compact -offset indent
+.It
+controller and namespace configuration and management using
+.Xr nvmectl 1
+.It
+highly parallel I/O using per-CPU I/O queues
+.It
+PCI MSI/MSI-X attachment, and INTx for legacy systems
+.El
+.Pp
+On systems supporting MSI/MSI-X,
+.Nm
+driver uses per-CPU IO queue pairs for lockless and highly parallelized I/O.
+Interrupt handlers are scheduled on distinct CPUs.
+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 separate command circular buffer.
+.Nm
+specification allows up to 64k commands per queue, driver currently allocates
+1024 items per queue by default.
+Command submissions are done always on current CPU, command completion
+interrupt is handled on CPU according to I/O queue ID - first I/O queue on CPU0,
+second I/O queue on CPU1 etc.
+Admin queue command completion is not tied to any CPU, it's handled by
+any CPU.
+To keep lock contention to minimum, it's recommended to keep this assignment,
+even thought it is possible to reassign the interrupt handlers differently,
+using
+.Xr intrctl 1 .
+Driver also uses soft interrupts to process command completions, in order to
+increase total system I/O capacity and throughput.
+.Pp
+On systems without MSI, driver uses single HW interrupt handler, for
+both admin and standard I/O commands.
+Command submissions are done on current CPU, command completion interrupt
+is handled on any available CPU. This leads to some lock contention,
+especially on command ccbs.
+Also, command completion handling must be done within the HW interrupt
+handler.
+.Sh FILES
+.Bl -tag -width /dev/nvmeX -compact
+.It Pa /dev/nvme*
+nvme device special files used by
+.Xr nvmectl 1 .
+.El
 .Sh SEE ALSO
 .Xr intro 4 ,
 .Xr ld 4 ,
-.Xr pci 4
+.Xr pci 4 ,
+.Xr nvmectl 1 ,
+.Xr MAKEDEV 8 ,
+.Xr intrctl 1
+.Rs
+.%A NVM Express, Inc.
+.%T "NVM Express \- scalable, efficient, and industry standard"
+.%D 2016-06-12
+.%U http://nvmexpress.org/
+.Re
+.Rs
+.%A NVM Express, Inc.
+.%T "NVM Express Revision 1.2.1"
+.%D 2016-06-05
+.%U http://www.nvmexpress.org/wp-content/uploads/NVM_Express_1_2_1_Gold_20160603.pdf
+.Re
 .Sh HISTORY
 The
 .Nm
@@ -54,24 +121,32 @@ and ported to
 by
 .An NONAKA Kimihiro
 .Aq Mt non...@netbsd.org .
-.Sh BUGS
-Emulated
-.Nm
-device under QEMU doesn't currently work - controller identify command times
-out.
+.An Jaromir Dolecek
+.Aq Mt jdole...@netbsd.org
+contributed to making this driver MPSAFE.
+.Sh NOTES
+At least some
+.Tn Intel
+.Nm
+adapter cards are known to require
+.Tn PCIe
+Generation 3 slot. Such cards do not even probe when plugged
+into older generation slot.
 .Pp
-Emulated
+Driver attaches and works fine also for emulated
 .Nm
-device under
+device under QEMU and
 .Tn Oracle
+.Tn VirtualBox .
+However,
+there seems to be some broken interaction between
 .Tn VirtualBox
-attaches and works fine, but sometimes after reboot device no longer works.
-When this happens, controller fails to properly disable/enable during probe,
-so the
-.Xr ld 4
-is not attached.
-Virtual machine must be completely powered off and started
-again to get the device working again.
+5.1.6
+and the driver, emulated
+.Nm
+controller responds to commands only first time it's attached, after reboot or
+module reload stops responding. Virtual machine must be completely powered off
+(or even killed) to fix.
 .Pp
 .Nm
 kernel module is currently only loadable for kernels configured with

Reply via email to