Provided by: freebsd-manpages_12.2-1_all bug

NAME

       iflib — Network Interface Driver Framework

SYNOPSIS

       device pci
       device iflib

DESCRIPTION

       iflib  is a framework for network interface drivers for FreeBSD.  It is designed to remove a large amount
       of the boilerplate that is often needed for modern network interface devices, allowing driver authors  to
       focus  on  the specific code needed for their hardware.  This allows for a shared set of sysctl(8) names,
       rather than each driver naming them individually.

SYSCTL VARIABLES

       These variables must be set before loading the driver, either via loader.conf(5) or through  the  use  of
       kenv(1).   They  are  all  prefixed  by  dev.X.Y.iflib. where X is the driver name, and Y is the instance
       number.

       override_nrxds
               Override the number of RX descriptors for each queue.  The value is a  comma  separated  list  of
               positive integers.  Some drivers only use a single value, but others may use more.  These numbers
               must be powers of two, and zero means to use the default.  Individual drivers may have additional
               restrictions on allowable values.  Defaults to all zeros.

       override_ntxds
               Override  the  number  of  TX descriptors for each queue.  The value is a comma separated list of
               positive integers.  Some drivers only use a single value, but others may use more.  These numbers
               must be powers of two, and zero means to use the default.  Individual drivers may have additional
               restrictions on allowable values.  Defaults to all zeros.

       override_qs_enable
               When set, allows the number of transmit and receive queues to be  different.   If  not  set,  the
               lower of the number of TX or RX queues will be used for both.

       override_nrxqs
               Set  the  number  of  RX  queues.  If zero, the number of RX queues is derived from the number of
               cores on the socket connected to the controller.  Defaults to 0.

       override_ntxqs
               Set the number of TX queues.  If zero, the number of TX queues is  derived  from  the  number  of
               cores on the socket connected to the controller.

       disable_msix
               Disables MSI-X interrupts for the device.

       core_offset
               Specifies  a  starting  core  offset  to assign queues to.  If the value is unspecified or 65535,
               cores are assigned sequentially across controllers.

       separate_txrx
               Requests that RX and TX queues not be paired on the same core.  If this is zero or not set, an RX
               and TX queue pair will be assigned to each core.  When set to a non-zero  value,  TX  queues  are
               assigned to cores following the last RX queue.

       These sysctl(8) variables can be changed at any time:

       tx_abdicate
               Controls  how  the  transmit  ring is serviced.  If set to zero, when a frame is submitted to the
               transmission ring, the same task that is submitting it  will  service  the  ring  unless  there's
               already  a  task  servicing  the  TX  ring.   This  ensures  that  whenever  there  is  a pending
               transmission, the transmit ring is being serviced.  This results in higher  transmit  throughput.
               If  set  to  a  non-zero  value,  task returns immediately and the transmit ring is serviced by a
               different task.  This returns control to the caller faster  and  under  high  receive  load,  may
               result in fewer dropped RX frames.

       rx_budget
               Sets  the  maximum  number  of frames to be received at a time.  Zero (the default) indicates the
               default (currently 16) should be used.

       There are also some global sysctls which can change behaviour for all drivers, and may be changed at  any
       time.

       net.iflib.min_tx_latency
               If  this  is set to a non-zero value, iflib will avoid any attempt to combine multiple transmits,
               and notify the hardware as quickly as possible of new descriptors.  This will lower  the  maximum
               throughput, but will also lower transmit latency.

       net.iflib.no_tx_batch
               Some NICs allow processing completed transmit descriptors in batches.  Doing so usually increases
               the  transmit  throughput  by reducing the number of transmit interrupts.  Setting this to a non-
               zero value will disable the use of this feature.

       These sysctl(8) variables are read-only:

       driver_version
               A string indicating the internal version of the driver.

       There are a number of queue state sysctl(8) variables as well:

       txqZ    The following are repeated for each transmit queue,  where  Z  is  the  transmit  queue  instance
               number:

               r_abdications
                       Number  of  consumer  abdications in the MP ring for this queue.  An abdication occurs on
                       every ring submission when tx_abdicate is true.

               r_restarts
                       Number of consumer restarts in the MP ring for this queue.   A  restart  occurs  when  an
                       attempt to drain a non-empty ring fails, and the ring is already in the STALLED state.

               r_stalls
                       Number  of consumer stalls in the MP ring for this queue.  A stall occurs when an attempt
                       to drain a non-empty ring fails.

               r_starts
                       Number of normal consumer starts in the MP ring for this queue.  A start occurs when  the
                       MP ring transitions from IDLE to BUSY.

               r_drops
                       Number of drops in the MP ring for this queue.  A drop occurs when there is an attempt to
                       add an entry to an MP ring with no available space.

               r_enqueues
                       Number of entries which have been enqueued to the MP ring for this queue.

               ring_state
                       MP  (soft)  ring state.  This privides a snapshot of the current MP ring state, including
                       the producer head and tail indexes, the consumer index, and the state.  The state is  one
                       of "IDLE", "BUSY", "STALLED", or "ABDICATED".

               txq_cleaned
                       The number of transmit descriptors which have been reclaimed.  Total cleaned.

               txq_processed
                       The  number  of transmit descriptors which have been processed, but may not yet have been
                       reclaimed.

               txq_in_use
                       Descriptors which have been added to the transmit queue, but have not yet  been  cleaned.
                       This  value will include both untransmitted descriptors as well as descriptors which have
                       been processed.

               txq_cidx_processed
                       The transmit queue consumer index of the next descriptor to process.

               txq_cidx
                       The transmit queue consumer index of the oldest descriptor to reclaim.

               txq_pidx
                       The transmit queue producer index where the next descriptor to transmit will be inserted.

               no_tx_dma_setup
                       Number of times DMA mapping a transmit mbuf failed for reasons other than EFBIG.

               txd_encap_efbig
                       Number of times DMA mapping a transmit mbuf failed due to requiring too many segments.

               tx_map_failed
                       Number of times DMA mapping a transmit mbuf failed for any reason (sum of no_tx_dma_setup
                       and txd_encap_efbig)

               no_desc_avail
                       Number of times a descriptor couldn't be added to the transmit ring because the  transmit
                       ring was full.

               mbuf_defrag_failed
                       Number  of  times  both  m_collapse(9) and m_defrag(9) failed after an EFBIG error result
                       from DMA mapping a transmit mbuf.

               m_pullups
                       Number of times m_pullup(9) was called attempting to parse a header.

               mbuf_defrag
                       Number of times m_defrag(9) was called.

       rxqZ    The following are repeated for each receive queue, where Z is the receive queue instance number:

               rxq_fl0.credits
                       Credits currently available in the receive ring.

               rxq_fl0.cidx
                       Current receive ring consumer index.

               rxq_fl0.pidx
                       Current receive ring producer index.

       Additional OIDs useful for driver and iflib development are exposed when the  INVARIANTS  and/or  WITNESS
       options are enabled in the kernel.

SEE ALSO

       iflib(9)

HISTORY

       This framework was introduced in FreeBSD 11.0.

Debian                                         September 27, 2018                                       IFLIB(4)