Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
NDA(4)			     Kernel Interfaces Manual			  NDA(4)

NAME
     nda -- NVMe Direct Access device driver

SYNOPSIS
     device nvme
     device scbus

DESCRIPTION
     The nda driver provides support for direct access devices, implementing the
     NVMe  command  protocol,  that  are  attached  to the system through a host
     adapter supported by the CAM subsystem.

HARDWARE
     The nda driver supports NVMe (Non-Volatile Memory Express) storage  devices
     connected via PCIe or over NVMF (NVMe over Fabric) via the CAM subsystem.

SYSCTL VARIABLES
     The  following  variables	are  available	as  both sysctl(8) variables and
     loader(8) tunables:

     hw.nvme.use_nvd
	 The nvme(4) driver will create nda device nodes for block storage  when
	 set  to 0.  Create nvd(4) device nodes for block storage when set to 1.
	 See nvd(4) when set to 1.

     kern.cam.nda.nvd_compat
	 When set to 1, nvd(4) aliases will be created for all nda devices,  in-
	 cluding  partitions  and  other geom(4) providers that take their names
	 from the disk's name.	nvd(4) devices will not, however, be reported in
	 the kern.disks sysctl(8).

     kern.cam.nda.sort_io_queue
	 This variable determines whether the software queued entries are sorted
	 in LBA order or not.  Sorting is almost always a waste  of  time.   The
	 default is to not sort.

     kern.cam.nda.enable_biospeedup
	 This  variable determines if the nda devices participate in the speedup
	 protocol.  When the device participates in the speedup, then  when  the
	 upper	layers	send  a BIO_SPEEDUP, all current BIO_DELETE requests not
	 yet sent to the hardware are completed successfully  immediate  without
	 sending  them	to  the hardware.  Used in low disk space scenarios when
	 the filesystem encounters a critical shortage and needs blocks  immedi-
	 ately.   Since  trims have maximum benefit when the LBA is unused for a
	 long time, skipping the trim when space is needed for immediate  writes
	 results  in  little to no excess wear.  When participation is disabled,
	 BIO_SPEEDUP requests are ignored.

     kern.cam.nda.max_trim
	 The maximum number of LBA ranges to be collected together for each  DSM
	 trims send to the hardware.  Defaults to 256, which is the maximum num-
	 ber  of  ranges the protocol supports.  Sometimes poor trim performance
	 can be mitigated by limiting the number of ranges sent to  the  device.
	 This value must be between 1 and 256 inclusive.

     The  following  report per-device settings, and are read-only unless other-
     wise indicated.  Replace N with the device unit number.

     kern.cam.nda.N.rotating
	 This variable reports whether the storage volume is spinning or  flash.
	 Its value is hard coded to 0 indicating flash.

     kern.cam.nda.N.unmapped_io
	 This  variable  reports whether the nda driver accepts unmapped I/O for
	 this unit.

     kern.cam.nda.N.flags
	 This variable reports the current flags.

	 OPEN
	     The device is open.

	 DIRTY
	     Set when a write to the drive is scheduled.   Cleared  after  flush
	     commands.

	 SCTX_INIT
	     Internal flag set after sysctl(8) nodes have been created.

     kern.cam.nda.N.sort_io_queue
	 Same as the kern.cam.nda.sort_io_queue tunable.

     kern.cam.nda.N.trim_ticks
	 Writable.  When greater than zero, hold trims for up to this many ticks
	 before sending to the drive.  Sometimes waiting a little bit to collect
	 more  trims  to send at one time improves trim performance.  When 0, no
	 delaying of trims are done.

     kern.cam.nda.N.trim_goal
	 Writable.  When delaying a bit to collect multiple trims, send the  ac-
	 cumulated DSM TRIM to the drive.

     kern.cam.nda.N.trim_lbas
	 Total number of LBAs that have been trimmed.

     kern.cam.nda.N.trim_ranges
	 Total number of LBA ranges that have been trimmed.

     kern.cam.nda.N.trim_count
	 Total number of trims sent to the hardware.

     kern.cam.nda.N.deletes
	 Total number of BIO_DELETE requests queued to the device.

NAMESPACE MAPPING
     Each  nvme(4) drive has one or more namespaces associated with it.  One in-
     stance of the nda driver will be created for each of the namespaces on  the
     drive.   All  the nda nodes for a nvme(4) device are at target 0.	However,
     the namespace ID maps to the CAM lun, as reported in kernel messages and in
     the devlist sub command of camcontrol(8).

     Namespaces are managed with the ns sub command of nvmecontrol(8).	Not  all
     drives  support  namespace  management, but all drives support at least one
     namespace.  Device nodes for nda will be created and destroyed  dynamically
     as namespaces are activated or detached.

FILES
     /dev/nda*	NVMe storage device nodes

SEE ALSO
     cam(4), geom(4), nvd(4), nvme(4), gpart(8)

HISTORY
     The nda driver first appeared in FreeBSD 12.0.

AUTHORS
     Warner Losh <imp@FreeBSD.org>

FreeBSD ports 15.quarterly	 October 2, 2025			  NDA(4)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=nda&sektion=4&manpath=FreeBSD+15.1-RELEASE+and+Ports.quarterly>

home | help