Lines Matching +full:per +full:- +full:context
1 .. SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
18 NAPI processing usually happens in the software interrupt context,
22 All in all NAPI abstracts away from the drivers the context and configuration
30 of the NAPI instance while the method is the driver-specific event
37 -----------
55 ------------
64 argument - drivers can process completions for any number of Tx
96 or return ``budget - 1``.
101 -------------
109 As mentioned in the :ref:`drv_ctrl` section - napi_disable() and subsequent
118 --------------------------
121 the NAPI instance - until NAPI polling finishes any further
125 to IRQ being auto-masked by the device) should use the napi_schedule_prep()
128 .. code-block:: c
130 if (napi_schedule_prep(&v->napi)) {
131 mydrv_mask_rxtx_irq(v->idx);
133 __napi_schedule(&v->napi);
138 .. code-block:: c
140 if (budget && napi_complete_done(&v->napi, work_done)) {
141 mydrv_unmask_rxtx_irq(v->idx);
142 return min(work_done, budget - 1);
146 of guarantees given by being invoked in IRQ context (no need to
151 -------------------------
153 Modern devices have multiple NAPI instances (struct napi_struct) per
156 abstraction without specific user-facing semantics. That said, most networking
182 -----------------------
195 The above parameters can also be set on a per-NAPI basis using netlink via
196 netdev-genl. When used with netlink and configured on a per-NAPI basis, the
198 ``gro-flush-timeout`` and ``napi-defer-hard-irqs``.
200 Per-NAPI configuration can be done programmatically in a user application
206 .. code-block:: bash
208 $ kernel-source/tools/net/ynl/pyynl/cli.py \
209 --spec Documentation/netlink/specs/netdev.yaml \
210 --do napi-set \
211 --json='{"id": 345,
212 "defer-hard-irqs": 111,
213 "gro-flush-timeout": 11111}'
215 Similarly, the parameter ``irq-suspend-timeout`` can be set using netlink
216 via netdev-genl. There is no global sysfs parameter for this value.
218 ``irq-suspend-timeout`` is used to determine how long an application can
220 which can be set on a per-epoll context basis with ``EPIOCSPARAMS`` ioctl.
225 ------------
237 epoll-based busy polling
238 ------------------------
242 all file descriptors which are added to an epoll context have the same NAPI ID.
247 the file descriptor to its epoll context. This would ensure each worker thread
248 has an epoll context with FDs that have the same NAPI ID.
258 loop waiting for events. This is a system-wide setting and will cause all
259 epoll-based applications to busy poll when they call epoll_wait. This may
262 2. Applications using recent kernels can issue an ioctl on the epoll context
266 .. code-block:: c
278 ---------------
283 Very high request-per-second applications (especially routing/forwarding
292 if ``gro_flush_timeout`` passes without any busy poll call. For epoll-based
300 with the ``SO_BUSY_POLL_BUDGET`` socket option. For epoll-based busy polling
302 in ``struct epoll_params`` and set on a specific epoll context using the ``EPIOCSPARAMS``
310 should be chosen carefully with these tradeoffs in mind. epoll-based busy
318 --------------
334 1. The per-NAPI config parameter ``irq-suspend-timeout`` should be set to the
343 2. The sysfs parameter or per-NAPI config parameters ``gro_flush_timeout``
354 userland, the ``irq-suspend-timeout`` is deferred and IRQs are disabled. This
361 It is expected that ``irq-suspend-timeout`` will be set to a value much larger
362 than ``gro_flush_timeout`` as ``irq-suspend-timeout`` should suspend IRQs for
370 irq-driven packet delivery. During busy periods, ``irq-suspend-timeout``
378 1) hardirq -> softirq -> napi poll; basic interrupt delivery
379 2) timer -> softirq -> napi poll; deferred irq processing
380 3) epoll -> busy-poll -> napi poll; busy looping
388 During busy periods, ``irq-suspend-timeout`` is used as timer in Loop 2,
395 the recommended usage, because otherwise setting ``irq-suspend-timeout``
401 -------------
404 threads rather than software IRQ context for NAPI processing.
405 The configuration is per netdevice and will affect all
407 thread (called ``napi/${ifc-name}-${napi-id}``).