From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 377EBA0350; Wed, 1 Jul 2020 08:06:40 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 6ACF21BFA9; Wed, 1 Jul 2020 08:06:39 +0200 (CEST) Received: from inva020.nxp.com (inva020.nxp.com [92.121.34.13]) by dpdk.org (Postfix) with ESMTP id F12571BF93; Wed, 1 Jul 2020 08:06:37 +0200 (CEST) Received: from inva020.nxp.com (localhost [127.0.0.1]) by inva020.eu-rdc02.nxp.com (Postfix) with ESMTP id C88B61A056F; Wed, 1 Jul 2020 08:06:37 +0200 (CEST) Received: from invc005.ap-rdc01.nxp.com (invc005.ap-rdc01.nxp.com [165.114.16.14]) by inva020.eu-rdc02.nxp.com (Postfix) with ESMTP id 2E0F01A0593; Wed, 1 Jul 2020 08:06:34 +0200 (CEST) Received: from lsv03186.swis.in-blr01.nxp.com (lsv03186.swis.in-blr01.nxp.com [92.120.146.182]) by invc005.ap-rdc01.nxp.com (Postfix) with ESMTP id 25CD2402A0; Wed, 1 Jul 2020 14:06:30 +0800 (SGT) From: Apeksha Gupta To: jerin.jacob@caviumnetworks.com Cc: dev@dpdk.org, thomas@monjalon.net, hemant.agrawal@nxp.com, nipun.gupta@nxp.com, akhil.goyal@nxp.com, Apeksha Gupta , stable@dpdk.org Date: Wed, 1 Jul 2020 11:36:21 +0530 Message-Id: <20200701060626.28627-1-apeksha.gupta@nxp.com> X-Mailer: git-send-email 2.17.1 X-Virus-Scanned: ClamAV using ClamSMTP Subject: [dpdk-dev] [PATCH 1/6] app/test-eventdev: Enhancing perf-queue packet flow X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" The event ethernet Tx adapter provides data path for the ethernet transmit stage. Enqueue a burst of events objects supplied on an event device. Fixes: 2369f73329 ("app/testeventdev: add perf queue worker functions") Cc: stable@dpdk.org Signed-off-by: Apeksha Gupta --- app/test-eventdev/test_perf_common.c | 11 ++++++++ app/test-eventdev/test_perf_common.h | 1 + app/test-eventdev/test_perf_queue.c | 42 ++++++++++++++++++++-------- 3 files changed, 43 insertions(+), 11 deletions(-) diff --git a/app/test-eventdev/test_perf_common.c b/app/test-eventdev/test_perf_common.c index b3af4bfeca..341e16eade 100644 --- a/app/test-eventdev/test_perf_common.c +++ b/app/test-eventdev/test_perf_common.c @@ -687,9 +687,20 @@ perf_ethdev_setup(struct evt_test *test, struct evt_options *opt) return -ENODEV; } + t->internal_port = 1; RTE_ETH_FOREACH_DEV(i) { struct rte_eth_dev_info dev_info; struct rte_eth_conf local_port_conf = port_conf; + uint32_t caps = 0; + + ret = rte_event_eth_tx_adapter_caps_get(opt->dev_id, i, &caps); + if (ret != 0) { + evt_err("failed to get event tx adapter[%d] caps", i); + return ret; + } + + if (!(caps & RTE_EVENT_ETH_TX_ADAPTER_CAP_INTERNAL_PORT)) + t->internal_port = 0; ret = rte_eth_dev_info_get(i, &dev_info); if (ret != 0) { diff --git a/app/test-eventdev/test_perf_common.h b/app/test-eventdev/test_perf_common.h index d8fbee6d89..716199d8c9 100644 --- a/app/test-eventdev/test_perf_common.h +++ b/app/test-eventdev/test_perf_common.h @@ -48,6 +48,7 @@ struct test_perf { int done; uint64_t outstand_pkts; uint8_t nb_workers; + uint8_t internal_port; enum evt_test_result result; uint32_t nb_flows; uint64_t nb_pkts; diff --git a/app/test-eventdev/test_perf_queue.c b/app/test-eventdev/test_perf_queue.c index 29098580e7..f79e4a4164 100644 --- a/app/test-eventdev/test_perf_queue.c +++ b/app/test-eventdev/test_perf_queue.c @@ -71,10 +71,12 @@ perf_queue_worker(void *arg, const int enable_fwd_latency) } static int -perf_queue_worker_burst(void *arg, const int enable_fwd_latency) +perf_queue_worker_burst(void *arg, const int enable_fwd_latency, + const uint32_t flags) { PERF_WORKER_INIT; uint16_t i; + uint16_t nb_tx; /* +1 to avoid prefetch out of array check */ struct rte_event ev[BURST_SIZE + 1]; @@ -111,12 +113,20 @@ perf_queue_worker_burst(void *arg, const int enable_fwd_latency) } } - uint16_t enq; - - enq = rte_event_enqueue_burst(dev, port, ev, nb_rx); - while (enq < nb_rx) { - enq += rte_event_enqueue_burst(dev, port, + if (flags == TEST_PERF_EVENT_TX_DIRECT) { + nb_tx = rte_event_eth_tx_adapter_enqueue(dev, port, + ev, nb_rx, 0); + while (nb_tx < nb_rx && !t->done) + nb_tx += rte_event_eth_tx_adapter_enqueue(dev, + port, ev + nb_tx, + nb_rx - nb_tx, 0); + } else { + uint16_t enq; + enq = rte_event_enqueue_burst(dev, port, ev, nb_rx); + while (enq < nb_rx) { + enq += rte_event_enqueue_burst(dev, port, ev + enq, nb_rx - enq); + } } } return 0; @@ -130,16 +140,26 @@ worker_wrapper(void *arg) const bool burst = evt_has_burst_mode(w->dev_id); const int fwd_latency = opt->fwd_latency; - + const bool internal_port = w->t->internal_port; + uint32_t flags; /* allow compiler to optimize */ if (!burst && !fwd_latency) return perf_queue_worker(arg, 0); else if (!burst && fwd_latency) return perf_queue_worker(arg, 1); - else if (burst && !fwd_latency) - return perf_queue_worker_burst(arg, 0); - else if (burst && fwd_latency) - return perf_queue_worker_burst(arg, 1); + else if (burst && !fwd_latency && internal_port) { + flags = TEST_PERF_EVENT_TX_DIRECT; + return perf_queue_worker_burst(arg, 0, flags); + } else if (burst && !fwd_latency && !internal_port) { + flags = TEST_PERF_EVENT_TX_ENQ; + return perf_queue_worker_burst(arg, 1, flags); + } else if (burst && fwd_latency && internal_port) { + flags = TEST_PERF_EVENT_TX_DIRECT; + return perf_queue_worker_burst(arg, 0, flags); + } else if (burst && fwd_latency && !internal_port) { + flags = TEST_PERF_EVENT_TX_ENQ; + return perf_queue_worker_burst(arg, 1, flags); + } rte_panic("invalid worker\n"); } -- 2.17.1