[PATCH v3 15/15] common/idpf: add avx512 for single queue model
beilei.xing at intel.com
beilei.xing at intel.com
Tue Jan 17 08:26:26 CET 2023
From: Beilei Xing <beilei.xing at intel.com>
Move avx512 vector path for single queue to common module.
Signed-off-by: Beilei Xing <beilei.xing at intel.com>
---
drivers/common/idpf/idpf_common_rxtx.h | 20 +++++++++++++
.../idpf/idpf_common_rxtx_avx512.c} | 4 +--
drivers/common/idpf/meson.build | 30 +++++++++++++++++++
drivers/common/idpf/version.map | 3 ++
drivers/net/idpf/idpf_rxtx.h | 13 --------
drivers/net/idpf/meson.build | 17 -----------
6 files changed, 55 insertions(+), 32 deletions(-)
rename drivers/{net/idpf/idpf_rxtx_vec_avx512.c => common/idpf/idpf_common_rxtx_avx512.c} (99%)
diff --git a/drivers/common/idpf/idpf_common_rxtx.h b/drivers/common/idpf/idpf_common_rxtx.h
index 74d6081638..6e3ee7de25 100644
--- a/drivers/common/idpf/idpf_common_rxtx.h
+++ b/drivers/common/idpf/idpf_common_rxtx.h
@@ -47,6 +47,12 @@
#define IDPF_TX_OFFLOAD_NOTSUP_MASK \
(RTE_MBUF_F_TX_OFFLOAD_MASK ^ IDPF_TX_OFFLOAD_MASK)
+/* used for Vector PMD */
+#define IDPF_VPMD_RX_MAX_BURST 32
+#define IDPF_VPMD_TX_MAX_BURST 32
+#define IDPF_VPMD_DESCS_PER_LOOP 4
+#define IDPF_RXQ_REARM_THRESH 64
+
/* MTS */
#define GLTSYN_CMD_SYNC_0_0 (PF_TIMESYNC_BASE + 0x0)
#define PF_GLTSYN_SHTIME_0_0 (PF_TIMESYNC_BASE + 0x4)
@@ -193,6 +199,10 @@ union idpf_tx_offload {
};
};
+struct idpf_tx_vec_entry {
+ struct rte_mbuf *mbuf;
+};
+
struct idpf_rxq_ops {
void (*release_mbufs)(struct idpf_rx_queue *rxq);
};
@@ -254,5 +264,15 @@ uint16_t idpf_prep_pkts(void *tx_queue, struct rte_mbuf **tx_pkts,
uint16_t nb_pkts);
__rte_internal
int idpf_singleq_rx_vec_setup(struct idpf_rx_queue *rxq);
+__rte_internal
+int idpf_singleq_tx_vec_setup_avx512(struct idpf_tx_queue *txq);
+__rte_internal
+uint16_t idpf_singleq_recv_pkts_avx512(void *rx_queue,
+ struct rte_mbuf **rx_pkts,
+ uint16_t nb_pkts);
+__rte_internal
+uint16_t idpf_singleq_xmit_pkts_avx512(void *tx_queue,
+ struct rte_mbuf **tx_pkts,
+ uint16_t nb_pkts);
#endif /* _IDPF_COMMON_RXTX_H_ */
diff --git a/drivers/net/idpf/idpf_rxtx_vec_avx512.c b/drivers/common/idpf/idpf_common_rxtx_avx512.c
similarity index 99%
rename from drivers/net/idpf/idpf_rxtx_vec_avx512.c
rename to drivers/common/idpf/idpf_common_rxtx_avx512.c
index ea949635e0..6ae0e14d2f 100644
--- a/drivers/net/idpf/idpf_rxtx_vec_avx512.c
+++ b/drivers/common/idpf/idpf_common_rxtx_avx512.c
@@ -2,9 +2,9 @@
* Copyright(c) 2022 Intel Corporation
*/
-#include "idpf_rxtx_vec_common.h"
-
#include <rte_vect.h>
+#include <idpf_common_device.h>
+#include <idpf_common_rxtx.h>
#ifndef __INTEL_COMPILER
#pragma GCC diagnostic ignored "-Wcast-qual"
diff --git a/drivers/common/idpf/meson.build b/drivers/common/idpf/meson.build
index 5ee071fdb2..1dafafeb2f 100644
--- a/drivers/common/idpf/meson.build
+++ b/drivers/common/idpf/meson.build
@@ -9,4 +9,34 @@ sources = files(
'idpf_common_virtchnl.c',
)
+if arch_subdir == 'x86'
+ idpf_avx512_cpu_support = (
+ cc.get_define('__AVX512F__', args: machine_args) != '' and
+ cc.get_define('__AVX512BW__', args: machine_args) != ''
+ )
+
+ idpf_avx512_cc_support = (
+ not machine_args.contains('-mno-avx512f') and
+ cc.has_argument('-mavx512f') and
+ cc.has_argument('-mavx512bw')
+ )
+
+ if idpf_avx512_cpu_support == true or idpf_avx512_cc_support == true
+ cflags += ['-DCC_AVX512_SUPPORT']
+ avx512_args = [cflags, '-mavx512f', '-mavx512bw']
+ if cc.has_argument('-march=skylake-avx512')
+ avx512_args += '-march=skylake-avx512'
+ endif
+ idpf_common_avx512_lib = static_library(
+ 'idpf_common_avx512_lib',
+ 'idpf_common_rxtx_avx512.c',
+ dependencies: [
+ static_rte_mbuf,
+ ],
+ include_directories: includes,
+ c_args: avx512_args)
+ objs += idpf_common_avx512_lib.extract_objects('idpf_common_rxtx_avx512.c')
+ endif
+endif
+
subdir('base')
diff --git a/drivers/common/idpf/version.map b/drivers/common/idpf/version.map
index 0f3f4aa758..a6b9eefdb5 100644
--- a/drivers/common/idpf/version.map
+++ b/drivers/common/idpf/version.map
@@ -32,8 +32,11 @@ INTERNAL {
idpf_reset_split_tx_descq;
idpf_rx_queue_release;
idpf_singleq_recv_pkts;
+ idpf_singleq_recv_pkts_avx512;
idpf_singleq_rx_vec_setup;
+ idpf_singleq_tx_vec_setup_avx512;
idpf_singleq_xmit_pkts;
+ idpf_singleq_xmit_pkts_avx512;
idpf_splitq_recv_pkts;
idpf_splitq_xmit_pkts;
idpf_switch_queue;
diff --git a/drivers/net/idpf/idpf_rxtx.h b/drivers/net/idpf/idpf_rxtx.h
index a985dc2cf5..3a5084dfd6 100644
--- a/drivers/net/idpf/idpf_rxtx.h
+++ b/drivers/net/idpf/idpf_rxtx.h
@@ -19,23 +19,14 @@
#define IDPF_DEFAULT_RX_FREE_THRESH 32
/* used for Vector PMD */
-#define IDPF_VPMD_RX_MAX_BURST 32
-#define IDPF_VPMD_TX_MAX_BURST 32
-#define IDPF_VPMD_DESCS_PER_LOOP 4
-#define IDPF_RXQ_REARM_THRESH 64
#define IDPF_DEFAULT_TX_RS_THRESH 32
#define IDPF_DEFAULT_TX_FREE_THRESH 32
-struct idpf_tx_vec_entry {
- struct rte_mbuf *mbuf;
-};
-
int idpf_rx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_idx,
uint16_t nb_desc, unsigned int socket_id,
const struct rte_eth_rxconf *rx_conf,
struct rte_mempool *mp);
-int idpf_singleq_tx_vec_setup_avx512(struct idpf_tx_queue *txq);
int idpf_rx_queue_init(struct rte_eth_dev *dev, uint16_t rx_queue_id);
int idpf_rx_queue_start(struct rte_eth_dev *dev, uint16_t rx_queue_id);
int idpf_rx_queue_stop(struct rte_eth_dev *dev, uint16_t rx_queue_id);
@@ -48,10 +39,6 @@ int idpf_tx_queue_init(struct rte_eth_dev *dev, uint16_t tx_queue_id);
int idpf_tx_queue_start(struct rte_eth_dev *dev, uint16_t tx_queue_id);
int idpf_tx_queue_stop(struct rte_eth_dev *dev, uint16_t tx_queue_id);
void idpf_dev_tx_queue_release(struct rte_eth_dev *dev, uint16_t qid);
-uint16_t idpf_singleq_recv_pkts_avx512(void *rx_queue, struct rte_mbuf **rx_pkts,
- uint16_t nb_pkts);
-uint16_t idpf_singleq_xmit_pkts_avx512(void *tx_queue, struct rte_mbuf **tx_pkts,
- uint16_t nb_pkts);
void idpf_stop_queues(struct rte_eth_dev *dev);
diff --git a/drivers/net/idpf/meson.build b/drivers/net/idpf/meson.build
index 378925166f..98f8ceb77b 100644
--- a/drivers/net/idpf/meson.build
+++ b/drivers/net/idpf/meson.build
@@ -34,22 +34,5 @@ if arch_subdir == 'x86'
if idpf_avx512_cpu_support == true or idpf_avx512_cc_support == true
cflags += ['-DCC_AVX512_SUPPORT']
- avx512_args = [cflags, '-mavx512f', '-mavx512bw']
- if cc.has_argument('-march=skylake-avx512')
- avx512_args += '-march=skylake-avx512'
- endif
- idpf_avx512_lib = static_library(
- 'idpf_avx512_lib',
- 'idpf_rxtx_vec_avx512.c',
- dependencies: [
- static_rte_common_idpf,
- static_rte_ethdev,
- static_rte_bus_pci,
- static_rte_kvargs,
- static_rte_hash,
- ],
- include_directories: includes,
- c_args: avx512_args)
- objs += idpf_avx512_lib.extract_objects('idpf_rxtx_vec_avx512.c')
endif
endif
--
2.26.2
More information about the dev
mailing list