net/enic: add AVX2 based vectorized Rx handler
authorHyong Youb Kim <hyonkim@cisco.com>
Wed, 3 Oct 2018 20:09:28 +0000 (13:09 -0700)
committerFerruh Yigit <ferruh.yigit@intel.com>
Thu, 11 Oct 2018 16:53:49 +0000 (18:53 +0200)
commit8a6ff33d6d36ba5f0231ce4261546298a6d2af72
treed8b895404ef4cadbae37e09fdff31bb690f91bad
parentcd4e7b3250c2c93bb33aa7b01e7165cbfd78021d
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
meson.build 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 <hyonkim@cisco.com>
Reviewed-by: John Daley <johndale@cisco.com>
doc/guides/nics/enic.rst
drivers/net/enic/Makefile
drivers/net/enic/enic.h
drivers/net/enic/enic_ethdev.c
drivers/net/enic/enic_main.c
drivers/net/enic/enic_rxtx_vec_avx2.c [new file with mode: 0644]
drivers/net/enic/meson.build