summaryrefslogtreecommitdiff
path: root/static/freebsd/man4/iflib.4 3.html
diff options
context:
space:
mode:
Diffstat (limited to 'static/freebsd/man4/iflib.4 3.html')
-rw-r--r--static/freebsd/man4/iflib.4 3.html242
1 files changed, 0 insertions, 242 deletions
diff --git a/static/freebsd/man4/iflib.4 3.html b/static/freebsd/man4/iflib.4 3.html
deleted file mode 100644
index 0373e222..00000000
--- a/static/freebsd/man4/iflib.4 3.html
+++ /dev/null
@@ -1,242 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">IFLIB(4)</td>
- <td class="head-vol">Device Drivers Manual</td>
- <td class="head-rtitle">IFLIB(4)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">iflib</code> &#x2014; <span class="Nd">Network
- Interface Driver Framework</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="Cd">device pci</code>
- <br/>
- <code class="Cd">device iflib</code></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp"><code class="Nm">iflib</code> is a framework for network interface
- drivers for <span class="Ux">FreeBSD</span>. 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
- <a class="Xr">sysctl(8)</a> names, rather than each driver naming them
- individually.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYSCTL_VARIABLES"><a class="permalink" href="#SYSCTL_VARIABLES">SYSCTL
- VARIABLES</a></h1>
-<p class="Pp">These variables must be set before loading the driver, either via
- <a class="Xr">loader.conf(5)</a> or through the use of
- <a class="Xr">kenv(1)</a>. They are all prefixed by
- <var class="Va">dev.X.Y.iflib.</var> where X is the driver name, and Y is
- the instance number.</p>
-<dl class="Bl-tag">
- <dt id="override_nrxds"><var class="Va">override_nrxds</var></dt>
- <dd>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.</dd>
- <dt id="override_ntxds"><var class="Va">override_ntxds</var></dt>
- <dd>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.</dd>
- <dt id="override_qs_enable"><var class="Va">override_qs_enable</var></dt>
- <dd>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.</dd>
- <dt id="override_nrxqs"><var class="Va">override_nrxqs</var></dt>
- <dd>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.</dd>
- <dt id="override_ntxqs"><var class="Va">override_ntxqs</var></dt>
- <dd>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.</dd>
- <dt id="disable_msix"><var class="Va">disable_msix</var></dt>
- <dd>Disables MSI-X interrupts for the device.</dd>
- <dt id="core_offset"><var class="Va">core_offset</var></dt>
- <dd>Specifies a starting core offset to assign queues to. If the value is
- unspecified or 65535, cores are assigned sequentially across
- controllers.</dd>
- <dt id="separate_txrx"><var class="Va">separate_txrx</var></dt>
- <dd>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.</dd>
- <dt id="simple_tx"><var class="Va">simple_tx</var></dt>
- <dd>When set to one, iflib uses a simple transmit routine with no queuing at
- all. By default, iflib uses a highly optimized, lockless, transmit queue
- called mp_ring. This performs well when there are more CPU cores than NIC
- queues and prevents lock contention for transmit resources. Unfortunately,
- mp_ring incurs unneeded overheads on workloads where resource contention
- is not a problem (well behaved applications on systems where there are as
- many NIC queues as CPU cores). Note that when this is enabled, the
- tx_abdicate sysctl is no longer applicable and is ignored. Defaults to
- zero.</dd>
-</dl>
-<p class="Pp">These <a class="Xr">sysctl(8)</a> variables can be changed at any
- time:</p>
-<dl class="Bl-tag">
- <dt id="tx_abdicate"><var class="Va">tx_abdicate</var></dt>
- <dd>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.</dd>
- <dt id="tx_defer_mfree"><var class="Va">tx_defer_mfree</var></dt>
- <dd>Controls the threshold in packets before iflib will free the memory
- (mbufs) for the packets that it has transmitted. When this is nonzero,
- mbufs will be freed outside the transmit lock. Setting this can reduce
- lock contention and CPU use when using simple_tx. Note that this applies
- only when simple_tx is enabled.</dd>
- <dt id="tx_reclaim_thresh"><var class="Va">tx_reclaim_thresh</var></dt>
- <dd>Controls the threshold in packets before iflib will ask the driver how
- many transmitted packets can be reclaimed. Determining how many many
- packets can be reclaimed can be expensive on some drivers.</dd>
- <dt id="tx_reclaim_ticks"><var class="Va">tx_reclaim_ticks</var></dt>
- <dd>Controls the time in ticks before iflib will ask the driver how many
- transmitted packets can be reclaimed. Determining how many many packets
- can be reclaimed can be expensive on some drivers.</dd>
- <dt id="rx_budget"><var class="Va">rx_budget</var></dt>
- <dd>Sets the maximum number of frames to be received at a time. Zero (the
- default) indicates the default (currently 16) should be used.</dd>
-</dl>
-<p class="Pp">There are also some global sysctls which can change behaviour for
- all drivers, and may be changed at any time.</p>
-<dl class="Bl-tag">
- <dt id="net.iflib.min_tx_latency"><var class="Va">net.iflib.min_tx_latency</var></dt>
- <dd>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.</dd>
- <dt id="net.iflib.no_tx_batch"><var class="Va">net.iflib.no_tx_batch</var></dt>
- <dd>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.</dd>
-</dl>
-<p class="Pp">These <a class="Xr">sysctl(8)</a> variables are read-only:</p>
-<dl class="Bl-tag">
- <dt id="driver_version"><var class="Va">driver_version</var></dt>
- <dd>A string indicating the internal version of the driver.</dd>
-</dl>
-<p class="Pp">There are a number of queue state <a class="Xr">sysctl(8)</a>
- variables as well:</p>
-<dl class="Bl-tag">
- <dt id="txqZ"><var class="Va">txqZ</var></dt>
- <dd>The following are repeated for each transmit queue, where Z is the
- transmit queue instance number:
- <dl class="Bl-tag">
- <dt id="r_abdications"><var class="Va">r_abdications</var></dt>
- <dd>Number of consumer abdications in the MP ring for this queue. An
- abdication occurs on every ring submission when tx_abdicate is
- true.</dd>
- <dt id="r_restarts"><var class="Va">r_restarts</var></dt>
- <dd>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.</dd>
- <dt id="r_stalls"><var class="Va">r_stalls</var></dt>
- <dd>Number of consumer stalls in the MP ring for this queue. A stall
- occurs when an attempt to drain a non-empty ring fails.</dd>
- <dt id="r_starts"><var class="Va">r_starts</var></dt>
- <dd>Number of normal consumer starts in the MP ring for this queue. A
- start occurs when the MP ring transitions from IDLE to BUSY.</dd>
- <dt id="r_drops"><var class="Va">r_drops</var></dt>
- <dd>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.</dd>
- <dt id="r_enqueues"><var class="Va">r_enqueues</var></dt>
- <dd>Number of entries which have been enqueued to the MP ring for this
- queue.</dd>
- <dt id="ring_state"><var class="Va">ring_state</var></dt>
- <dd>MP (soft) ring state. This provides 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 &quot;IDLE&quot;,
- &quot;BUSY&quot;, &quot;STALLED&quot;, or &quot;ABDICATED&quot;.</dd>
- <dt id="txq_cleaned"><var class="Va">txq_cleaned</var></dt>
- <dd>The number of transmit descriptors which have been reclaimed. Total
- cleaned.</dd>
- <dt id="txq_processed"><var class="Va">txq_processed</var></dt>
- <dd>The number of transmit descriptors which have been processed, but may
- not yet have been reclaimed.</dd>
- <dt id="txq_in_use"><var class="Va">txq_in_use</var></dt>
- <dd>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.</dd>
- <dt id="txq_cidx_processed"><var class="Va">txq_cidx_processed</var></dt>
- <dd>The transmit queue consumer index of the next descriptor to
- process.</dd>
- <dt id="txq_cidx"><var class="Va">txq_cidx</var></dt>
- <dd>The transmit queue consumer index of the oldest descriptor to
- reclaim.</dd>
- <dt id="txq_pidx"><var class="Va">txq_pidx</var></dt>
- <dd>The transmit queue producer index where the next descriptor to
- transmit will be inserted.</dd>
- <dt id="no_tx_dma_setup"><var class="Va">no_tx_dma_setup</var></dt>
- <dd>Number of times DMA mapping a transmit mbuf failed for reasons other
- than <code class="Er">EFBIG</code>.</dd>
- <dt id="txd_encap_efbig"><var class="Va">txd_encap_efbig</var></dt>
- <dd>Number of times DMA mapping a transmit mbuf failed due to requiring
- too many segments.</dd>
- <dt id="tx_map_failed"><var class="Va">tx_map_failed</var></dt>
- <dd>Number of times DMA mapping a transmit mbuf failed for any reason (sum
- of no_tx_dma_setup and txd_encap_efbig)</dd>
- <dt id="no_desc_avail"><var class="Va">no_desc_avail</var></dt>
- <dd>Number of times a descriptor couldn't be added to the transmit ring
- because the transmit ring was full.</dd>
- <dt id="mbuf_defrag_failed"><var class="Va">mbuf_defrag_failed</var></dt>
- <dd>Number of times both <a class="Xr">m_collapse(9)</a> and
- <a class="Xr">m_defrag(9)</a> failed after an
- <code class="Er">EFBIG</code> error result from DMA mapping a transmit
- mbuf.</dd>
- <dt id="m_pullups"><var class="Va">m_pullups</var></dt>
- <dd>Number of times <a class="Xr">m_pullup(9)</a> was called attempting to
- parse a header.</dd>
- <dt id="mbuf_defrag"><var class="Va">mbuf_defrag</var></dt>
- <dd>Number of times <a class="Xr">m_defrag(9)</a> was called.</dd>
- </dl>
- </dd>
- <dt id="rxqZ"><var class="Va">rxqZ</var></dt>
- <dd>The following are repeated for each receive queue, where Z is the receive
- queue instance number:
- <dl class="Bl-tag">
- <dt id="rxq_fl0.credits"><var class="Va">rxq_fl0.credits</var></dt>
- <dd>Credits currently available in the receive ring.</dd>
- <dt id="rxq_fl0.cidx"><var class="Va">rxq_fl0.cidx</var></dt>
- <dd>Current receive ring consumer index.</dd>
- <dt id="rxq_fl0.pidx"><var class="Va">rxq_fl0.pidx</var></dt>
- <dd>Current receive ring producer index.</dd>
- </dl>
- </dd>
-</dl>
-<p class="Pp">Additional OIDs useful for driver and iflib development are
- exposed when the INVARIANTS and/or WITNESS options are enabled in the
- kernel.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">iflib(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">This framework was introduced in <span class="Ux">FreeBSD
- 11.0</span>.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">January 7, 2026</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>