1.\" 2.\" This file and its contents are supplied under the terms of the 3.\" Common Development and Distribution License ("CDDL"), version 1.0. 4.\" You may only use this file in accordance with the terms of version 5.\" 1.0 of the CDDL. 6.\" 7.\" A full copy of the text of the CDDL should have accompanied this 8.\" source. A copy of the CDDL is also available via the Internet at 9.\" http://www.illumos.org/license/CDDL. 10.\" 11.\" 12.\" Copyright (c) 2018, Joyent, Inc. 13.\" Copyright 2022 Tintri by DDN, Inc. All rights reserved. 14.\" 15.Dd May 11, 2022 16.Dt NVME 4D 17.Os 18.Sh NAME 19.Nm nvme 20.Nd Intel NVMe compliant storage driver 21.Sh DESCRIPTION 22The 23.Nm 24driver uses the 25.Xr blkdev 4D 26framework to provide access to 27NVMe compliant solid-state storage devices. 28All NVMe version 1.x devices are supported. 29.Lp 30NVMe devices supporting multiple namespaces will present each 31namespace as its own 32.Xr blkdev 4D 33instance in the system. 34. 35.Sh CONFIGURATION 36The 37.Nm 38driver can be configured by defining properties in the 39.Pa nvme.conf 40file. 41The parameters are considered an unstable interface, subject to 42change without notice. 43The following properties are currently supported: 44.Bl -tag -width Va 45.It Va strict-version 46This can be set to 0 to allow 47.Nm 48to attach to devices supporting newer version of the NVMe 49specification. 50The default value is 1, limiting 51.Nm 52to work with devices that support major version 1. 53.It Va ignore-unknown-vendor-status 54This can be set to 1 to allow 55.Nm 56to continue operating even if it receives an unknown vendor command 57status. 58.It Va admin-queue-len 59This is the number of entries in the admin command queue. 60Legal values are between 16 and 4096, the default value is 256. 61.It Va io-squeue-len 62This is the number of entries in each I/O submission queue. 63Legal values are between 16 and 65536, the default value is 1024. 64.It Va io-cqueue-len 65This is the number of entries in each I/O completion queue. 66Legal values are between 16 and 65536, the default value is 2048. 67When the number of submission and completion queues are the same, 68the queue lengths will be both set to the lesser of 69.Va io-squeue-len 70and 71.Va io-cqueue-len . 72.It Va async-event-limit 73This is the maximum number of asynchronous event requests issued by 74the driver. 75Asynchronous events are used to report error conditions. 76The driver will never use more asynchronous events than this value, or 77what the hardware supports if it is less, or 1/10th of the admin queue 78length if it is less. 79.It Va volatile-write-cache-enable 80This property can be set to 0 to disable the volatile write cache, if 81the hardware supports it. 82The default setting is 1, which enables the volatile write cache. 83.It Va min-phys-block-size 84This is the minimum physical block size that is reported to 85.Xr blkdev 4D . 86This value must be a power of 2 greater than or equal to 512. 87If the device reports a best block size larger than what is 88specified here the driver will ignore the value specified here. 89.It Va max-submission-queues 90This is the maximum number of submission queues the driver will create per 91device. 92Legal values are between 1 and 65535, the default is to 93match the number for 94.Em max-completion-queues . 95The number of queues created will not be allowed to exceed the 96drive's hardware limitation. 97If the number of submission queues is larger than 98.Em max-completion-queues 99the completion queues will be shared across the submission 100queues. 101.It Va max-completion-queues 102This is the maximum number of completion queues the driver will create per 103device. 104Legal values are between 1 and 65535, the default is to match 105the number of interrupt vectors allocated to the drive. 106The number of queues created will not exceed the number of interrupt vectors, 107.Em max-submission-queues , 108or the drive's hardware limitation. 109.El 110.Pp 111In addition to the above properties, some device-specific tunables can be 112configured in 113.Pa nvme.conf 114using the 115.Va nvme-config-list 116global property. 117The value of this property is a list of triplets. 118The formal syntax is: 119.Bl -column "nvme-config-list" -offset indent 120.It nvme-config-list ::= <triplet> 121.Op \&, <triplet> Ns 122* 123; 124.It <triplet> ::= 125.Qq <model> 126\&, 127.Qq <rev-list> 128\&, 129.Qq <tuple-list> 130.It <rev-list> ::= 131.Op <fwrev> Oo \&, <fwrev> Oc Ns * 132.It <tuple-list> ::= 133<tunable> 134.Op \&, <tunable> Ns 135* 136.It <tunable> ::= 137.Qq <name> 138\&: 139.Qq <value> 140.El 141.Pp 142The 143.Va <model> 144and 145.Va <fwrev> 146are the strings that are returned in the 147.Qq Model Number 148and 149.Qq Firmware Revision 150fields, respectively, in the 151.Qq Identify Controller 152data structure as returned by the 153.Qq IDENTIFY 154command. 155Specifying a 156.Va <rev-list> 157is optional, an empty string 158.Po Qo Qc Pc 159may be used instead. 160.Pp 161The 162.Va <tuple-list> 163contains one or more tunables to apply to all controllers that match the 164specified model number and optional firmware revisions. 165Each 166.Va <tunable> 167is a 168.Va <name> 169: 170.Va <value> 171pair. 172Supported tunable names are: 173.Bl -tag -width Va 174.It Va ignore-unknown-vendor-status 175Similar to the global property, this property accepts a boolean value specified 176as either 177.Qq on , 178.Qq off , 179.Qq true , 180or 181.Qq false 182to enable or disable the driver continuing operation even if it receives an 183unknown vendor command status from a controller. 184.It Va min-phys-block-size 185Same as the global property, this is the minimum physical block size that is 186reported to 187.Xr blkdev 4D . 188This value must be a power of 2 greater than or equal to 512. 189If the device reports a best block size larger than what is 190specified here the driver will ignore the value specified here. 191.It Va volatile-write-cache 192Similar to the global property 193.Va volatile-write-cache-enable , 194this property accepts a boolean value specified as either 195.Qq on , 196.Qq off , 197.Qq true , 198or 199.Qq false 200to enable or disable the volatile write cache, if the hardware supports it. 201By default the volatile write cache is enabled. 202.El 203.Sh FILES 204.Bl -tag -compact -width Pa 205.It Pa /dev/dsk/cntnd0sn 206Block device minor nodes. 207.It Pa /dev/rdsk/cntnd0sn 208Raw block device minor nodes. 209.El 210.Lp 211In the device minor nodes, the following substitutions may occur: 212.Bl -tag -offset indent -width Va 213.It Va cn 214A controller number, typically one for each 215.Nm 216device found. 217Controller numbers are dynamically assigned by the system. 218.It Va tn 219The target number. 220This is the namespace EUI64 if available, or the namespace ID used by 221the hardware. 222Namespace ID 0 is reserved, hence target numbers start with 1. 223.It Va sn 224This is the 225.Em slice 226number, representing a subset of the disk. 227See 228.Xr dkio 4I . 229.El 230. 231.Sh SEE ALSO 232.Xr blkdev 4D 233