From: Pavan Nikhilesh <pbhagavat...@marvell.com>

Use the `rte_event_enqueue_new_burst` routine to enqueue events
with rte_event::op as RTE_EVENT_OP_NEW. This allows PMDs to use
optimized enqueue routines.

Signed-off-by: Pavan Nikhilesh <pbhagavat...@marvell.com>
---
 app/test-eventdev/evt_options.c      |  2 +-
 app/test-eventdev/test_perf_common.c | 58 +++++++++++++++++-----------
 2 files changed, 37 insertions(+), 23 deletions(-)

diff --git a/app/test-eventdev/evt_options.c b/app/test-eventdev/evt_options.c
index b175c067cd..03fb3bfce0 100644
--- a/app/test-eventdev/evt_options.c
+++ b/app/test-eventdev/evt_options.c
@@ -27,7 +27,7 @@ evt_options_default(struct evt_options *opt)
        opt->nb_flows = 1024;
        opt->socket_id = SOCKET_ID_ANY;
        opt->pool_sz = 16 * 1024;
-       opt->prod_enq_burst_sz = 1;
+       opt->prod_enq_burst_sz = 0;
        opt->wkr_deq_dep = 16;
        opt->nb_pkts = (1ULL << 26); /* do ~64M packets */
        opt->nb_timers = 1E8;
diff --git a/app/test-eventdev/test_perf_common.c 
b/app/test-eventdev/test_perf_common.c
index fd434666cb..68af3cb346 100644
--- a/app/test-eventdev/test_perf_common.c
+++ b/app/test-eventdev/test_perf_common.c
@@ -131,8 +131,10 @@ perf_producer(void *arg)
        uint32_t flow_counter = 0;
        uint64_t count = 0;
        struct perf_elt *m[BURST_SIZE + 1] = {NULL};
+       uint8_t enable_fwd_latency;
        struct rte_event ev;
 
+       enable_fwd_latency = opt->fwd_latency;
        if (opt->verbose_level > 1)
                printf("%s(): lcore %d dev_id %d port=%d queue %d\n", __func__,
                                rte_lcore_id(), dev_id, port, p->queue_id);
@@ -151,13 +153,16 @@ perf_producer(void *arg)
                for (i = 0; i < BURST_SIZE; i++) {
                        ev.flow_id = flow_counter++ % nb_flows;
                        ev.event_ptr = m[i];
-                       m[i]->timestamp = rte_get_timer_cycles();
-                       while (rte_event_enqueue_burst(dev_id,
-                                                      port, &ev, 1) != 1) {
+                       if (enable_fwd_latency)
+                               m[i]->timestamp = rte_get_timer_cycles();
+                       while (rte_event_enqueue_new_burst(dev_id, port, &ev,
+                                                          1) != 1) {
                                if (t->done)
                                        break;
                                rte_pause();
-                               m[i]->timestamp = rte_get_timer_cycles();
+                               if (enable_fwd_latency)
+                                       m[i]->timestamp =
+                                               rte_get_timer_cycles();
                        }
                }
                count += BURST_SIZE;
@@ -171,7 +176,6 @@ perf_producer_burst(void *arg)
 {
        uint32_t i;
        uint64_t timestamp;
-       struct rte_event_dev_info dev_info;
        struct prod_data *p  = arg;
        struct test_perf *t = p->t;
        struct evt_options *opt = t->opt;
@@ -183,15 +187,13 @@ perf_producer_burst(void *arg)
        uint32_t flow_counter = 0;
        uint16_t enq = 0;
        uint64_t count = 0;
-       struct perf_elt *m[MAX_PROD_ENQ_BURST_SIZE + 1];
-       struct rte_event ev[MAX_PROD_ENQ_BURST_SIZE + 1];
+       struct perf_elt *m[opt->prod_enq_burst_sz + 1];
+       struct rte_event ev[opt->prod_enq_burst_sz + 1];
        uint32_t burst_size = opt->prod_enq_burst_sz;
+       uint8_t enable_fwd_latency;
 
-       memset(m, 0, sizeof(*m) * (MAX_PROD_ENQ_BURST_SIZE + 1));
-       rte_event_dev_info_get(dev_id, &dev_info);
-       if (dev_info.max_event_port_enqueue_depth < burst_size)
-               burst_size = dev_info.max_event_port_enqueue_depth;
-
+       enable_fwd_latency = opt->fwd_latency;
+       memset(m, 0, sizeof(*m) * (opt->prod_enq_burst_sz + 1));
        if (opt->verbose_level > 1)
                printf("%s(): lcore %d dev_id %d port=%d queue %d\n", __func__,
                                rte_lcore_id(), dev_id, port, p->queue_id);
@@ -212,19 +214,21 @@ perf_producer_burst(void *arg)
                for (i = 0; i < burst_size; i++) {
                        ev[i].flow_id = flow_counter++ % nb_flows;
                        ev[i].event_ptr = m[i];
-                       m[i]->timestamp = timestamp;
+                       if (enable_fwd_latency)
+                               m[i]->timestamp = timestamp;
                }
-               enq = rte_event_enqueue_burst(dev_id, port, ev, burst_size);
+               enq = rte_event_enqueue_new_burst(dev_id, port, ev, burst_size);
                while (enq < burst_size) {
-                       enq += rte_event_enqueue_burst(dev_id, port,
-                                                       ev + enq,
-                                                       burst_size - enq);
+                       enq += rte_event_enqueue_new_burst(
+                               dev_id, port, ev + enq, burst_size - enq);
                        if (t->done)
                                break;
                        rte_pause();
-                       timestamp = rte_get_timer_cycles();
-                       for (i = enq; i < burst_size; i++)
-                               m[i]->timestamp = timestamp;
+                       if (enable_fwd_latency) {
+                               timestamp = rte_get_timer_cycles();
+                               for (i = enq; i < burst_size; i++)
+                                       m[i]->timestamp = timestamp;
+                       }
                }
                count += burst_size;
        }
@@ -799,9 +803,19 @@ perf_event_crypto_producer_burst(void *arg)
 static int
 perf_producer_wrapper(void *arg)
 {
+       struct rte_event_dev_info dev_info;
        struct prod_data *p  = arg;
        struct test_perf *t = p->t;
-       bool burst = evt_has_burst_mode(p->dev_id);
+
+       rte_event_dev_info_get(p->dev_id, &dev_info);
+       if (!t->opt->prod_enq_burst_sz) {
+               t->opt->prod_enq_burst_sz = MAX_PROD_ENQ_BURST_SIZE;
+               if (dev_info.max_event_port_enqueue_depth > 0 &&
+                   (uint32_t)dev_info.max_event_port_enqueue_depth <
+                           t->opt->prod_enq_burst_sz)
+                       t->opt->prod_enq_burst_sz =
+                               dev_info.max_event_port_enqueue_depth;
+       }
 
        /* In case of synthetic producer, launch perf_producer or
         * perf_producer_burst depending on producer enqueue burst size
@@ -811,7 +825,7 @@ perf_producer_wrapper(void *arg)
                return perf_producer(arg);
        else if (t->opt->prod_type == EVT_PROD_TYPE_SYNT &&
                        t->opt->prod_enq_burst_sz > 1) {
-               if (!burst)
+               if (dev_info.max_event_port_enqueue_depth == 1)
                        evt_err("This event device does not support burst 
mode");
                else
                        return perf_producer_burst(arg);
-- 
2.25.1

Reply via email to