On 4/29/20 9:28 AM, Marvin Liu wrote:
> This patch set introduced vectorized path for packed ring.
>
> The size of packed ring descriptor is 16Bytes. Four batched descriptors
> are just placed into one cacheline. AVX512 instructions can well handle
> this kind of data. Packed ring TX path can fully transformed into
> vectorized path. Packed ring Rx path can be vectorized when requirements
> met(LRO and mergeable disabled).
>
> New device parameter "vectorized" will be introduced in this patch set.
> This parameter will be workable for both virtio device and virtio user
> vdev. It will also unify split and packed ring vectorized path default
> setting. Path election logic will check dependencies of vectorized path.
> Packed ring vectorized path is dependent on building/running environment
> and features like IN_ORDER and VERSION_1 enabled, MRG and LRO disabled.
> If vectorized path is not supported, will fallback to normal path.
>
> v12:
> * eliminate weak symbols in data path
> * remove desc extra padding which can impact normal path
> * fix enqueue address invalid
>
> v11:
> * fix i686 build warnings
> * fix typo in doc
>
> v10:
> * reuse packed ring xmit cleanup
>
> v9:
> * replace RTE_LIBRTE_VIRTIO_INC_VECTOR with vectorized devarg
> * reorder patch sequence
>
> v8:
> * fix meson build error on ubuntu16.04 and suse15
>
> v7:
> * default vectorization is disabled
> * compilation time check dependency on rte_mbuf structure
> * offsets are calcuated when compiling
> * remove useless barrier as descs are batched store&load
> * vindex of scatter is directly set
> * some comments updates
> * enable vectorized path in meson build
>
> v6:
> * fix issue when size not power of 2
>
> v5:
> * remove cpuflags definition as required extensions always come with
> AVX512F on x86_64
> * inorder actions should depend on feature bit
> * check ring type in rx queue setup
> * rewrite some commit logs
> * fix some checkpatch warnings
>
> v4:
> * rename 'packed_vec' to 'vectorized', also used in split ring
> * add RTE_LIBRTE_VIRTIO_INC_VECTOR config for virtio ethdev
> * check required AVX512 extensions cpuflags
> * combine split and packed ring datapath selection logic
> * remove limitation that size must power of two
> * clear 12Bytes virtio_net_hdr
>
> v3:
> * remove virtio_net_hdr array for better performance
> * disable 'packed_vec' by default
>
> v2:
> * more function blocks replaced by vector instructions
> * clean virtio_net_hdr by vector instruction
> * allow header room size change
> * add 'packed_vec' option in virtio_user vdev
> * fix build not check whether AVX512 enabled
> * doc update
>
> Tested-by: Wang, Yinan <yinan.w...@intel.com>
>
> Marvin Liu (9):
> net/virtio: add Rx free threshold setting
> net/virtio: inorder should depend on feature bit
> net/virtio: add vectorized devarg
> net/virtio-user: add vectorized devarg
> net/virtio: reuse packed ring functions
> net/virtio: add vectorized packed ring Rx path
> net/virtio: add vectorized packed ring Tx path
> net/virtio: add election for vectorized path
> doc: add packed vectorized path
>
> doc/guides/nics/virtio.rst | 52 +-
> drivers/net/virtio/Makefile | 35 ++
> drivers/net/virtio/meson.build | 14 +
> drivers/net/virtio/virtio_ethdev.c | 142 ++++-
> drivers/net/virtio/virtio_ethdev.h | 6 +
> drivers/net/virtio/virtio_pci.h | 3 +-
> drivers/net/virtio/virtio_rxtx.c | 351 ++---------
> drivers/net/virtio/virtio_rxtx_packed_avx.c | 607 ++++++++++++++++++++
> drivers/net/virtio/virtio_user_ethdev.c | 32 +-
> drivers/net/virtio/virtqueue.c | 7 +-
> drivers/net/virtio/virtqueue.h | 304 ++++++++++
> 11 files changed, 1199 insertions(+), 354 deletions(-)
> create mode 100644 drivers/net/virtio/virtio_rxtx_packed_avx.c
>
Applied to dpdk-next-virtio/master,
Thanks,
Maxime