nda — NVMe Direct
    Access device driver
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.
The following variables are available as both
    sysctl(8)
    variables and
    loader(8)
    tunables:
  - hw.nvme.use_nvd
- The
      nvme(4)
      driver will create ndadevice 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 ndadevices,
      including 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 ndadevices
      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 immediately. 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 number
      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
    otherwise 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 ndadriver
      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
      accumulated 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.
Each
    nvme(4)
    drive has one or more namespaces associated with it. One instance 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.
  - /dev/nda*
- NVMe storage device nodes
The nda driver first appeared in
    FreeBSD 12.0.