[dpdk-dev] [PATCH v12 0/9] add packed ring vectorized path
Marvin Liu
yong.liu at intel.com
Wed Apr 29 09:28:13 CEST 2020
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.wang at 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
--
2.17.1
More information about the dev
mailing list