path: root/doc/guides/nics/enic.rst
diff options
authorHyong Youb Kim <>2018-10-03 13:09:28 -0700
committerFerruh Yigit <>2018-10-11 18:53:49 +0200
commit8a6ff33d6d36ba5f0231ce4261546298a6d2af72 (patch)
treed8b895404ef4cadbae37e09fdff31bb690f91bad /doc/guides/nics/enic.rst
parentcd4e7b3250c2c93bb33aa7b01e7165cbfd78021d (diff)
net/enic: add AVX2 based vectorized Rx handler
Add the vectorized version of the no-scatter Rx handler. It aims to process 8 descriptors per loop using AVX2 SIMD instructions. This handler is in its own file enic_rxtx_vec_avx2.c, and makefile and are modified to compile it when the compiler supports AVX2. Under ideal conditions, the vectorized handler reduces cycles/packet by more than 30%, when compared against the no-scatter Rx handler. Most implementation ideas come from i40e's AVX2 based handler, so credit goes to its authors. At this point, the new handler is meant for field trials, and is not selected by default. So add a new devarg enable-avx2-rx to allow the user to request the use of the new handler. When enable-avx2-rx=1, the driver will consider using the new handler. Also update the guide doc and introduce the vectorized handler. Signed-off-by: Hyong Youb Kim <> Reviewed-by: John Daley <>
Diffstat (limited to 'doc/guides/nics/enic.rst')
1 files changed, 35 insertions, 0 deletions
diff --git a/doc/guides/nics/enic.rst b/doc/guides/nics/enic.rst
index 86941fd..c049030 100644
--- a/doc/guides/nics/enic.rst
+++ b/doc/guides/nics/enic.rst
@@ -351,6 +351,41 @@ suitable for others. Such applications may change the mode by setting
applications such as OVS-DPDK performance benchmarks that utilize
only the default VLAN and want to see only untagged packets.
+Vectorized Rx Handler
+ENIC PMD includes a version of the receive handler that is vectorized using
+AVX2 SIMD instructions. It is meant for bulk, throughput oriented workloads
+where reducing cycles/packet in PMD is a priority. In order to use the
+vectorized handler, take the following steps.
+- Use a recent version of gcc, icc, or clang and build 64-bit DPDK. If
+ the compiler is known to support AVX2, DPDK build system
+ automatically compiles the vectorized handler. Otherwise, the
+ handler is not available.
+- Set ``devargs`` parameter ``enable-avx2-rx=1`` to explicitly request that
+ PMD consider the vectorized handler when selecting the receive handler.
+ For example::
+ -w 12:00.0,enable-avx2-rx=1
+ As the current implementation is intended for field trials, by default, the
+ vectorized handler is not considerd (``enable-avx2-rx=0``).
+- Run on a UCS M4 or later server with CPUs that support AVX2.
+PMD selects the vectorized handler when the handler is compiled into
+the driver, the user requests its use via ``enable-avx2-rx=1``, CPU
+supports AVX2, and scatter Rx is not used. To verify that the
+vectorized handler is selected, enable debug logging
+(``--log-level=pmd,debug``) and check the following message.
+.. code-block:: console
+ enic_use_vector_rx_handler use the non-scatter avx2 Rx handler
.. _enic_limitations: