X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=app%2Ftest-eventdev%2Ftest_perf_atq.c;h=5436a9b06cd8b8ebf75fdf35d11bc8385694c822;hb=f7352c176bbf131728445680ee08961a67cc09a6;hp=d0241ec4ae9ac28a8f5edc96ac731deb5c95af10;hpb=f0959283edb22dbabaf51c1e20fea466284d634e;p=dpdk.git diff --git a/app/test-eventdev/test_perf_atq.c b/app/test-eventdev/test_perf_atq.c index d0241ec4ae..5436a9b06c 100644 --- a/app/test-eventdev/test_perf_atq.c +++ b/app/test-eventdev/test_perf_atq.c @@ -14,7 +14,7 @@ atq_nb_event_queues(struct evt_options *opt) rte_eth_dev_count_avail() : evt_nr_active_lcores(opt->plcores); } -static inline __attribute__((always_inline)) void +static __rte_always_inline void atq_mark_fwd_latency(struct rte_event *const ev) { if (unlikely(ev->sub_event_type == 0)) { @@ -24,7 +24,7 @@ atq_mark_fwd_latency(struct rte_event *const ev) } } -static inline __attribute__((always_inline)) void +static __rte_always_inline void atq_fwd_event(struct rte_event *const ev, uint8_t *const sched_type_list, const uint8_t nb_stages) { @@ -37,17 +37,36 @@ atq_fwd_event(struct rte_event *const ev, uint8_t *const sched_type_list, static int perf_atq_worker(void *arg, const int enable_fwd_latency) { - PERF_WORKER_INIT; + uint16_t enq = 0, deq = 0; struct rte_event ev; + PERF_WORKER_INIT; while (t->done == false) { - uint16_t event = rte_event_dequeue_burst(dev, port, &ev, 1, 0); + deq = rte_event_dequeue_burst(dev, port, &ev, 1, 0); - if (!event) { + if (!deq) { rte_pause(); continue; } + if (prod_crypto_type && + (ev.event_type == RTE_EVENT_TYPE_CRYPTODEV)) { + struct rte_crypto_op *op = ev.event_ptr; + + if (op->status == RTE_CRYPTO_OP_STATUS_SUCCESS) { + if (op->type == RTE_CRYPTO_OP_TYPE_SYMMETRIC) { + if (op->sym->m_dst == NULL) + ev.event_ptr = op->sym->m_src; + else + ev.event_ptr = op->sym->m_dst; + rte_crypto_op_free(op); + } + } else { + rte_crypto_op_free(op); + continue; + } + } + if (enable_fwd_latency && !prod_timer_type) /* first stage in pipeline, mark ts to compute fwd latency */ atq_mark_fwd_latency(&ev); @@ -62,24 +81,29 @@ perf_atq_worker(void *arg, const int enable_fwd_latency) bufs, sz, cnt); } else { atq_fwd_event(&ev, sched_type_list, nb_stages); - while (rte_event_enqueue_burst(dev, port, &ev, 1) != 1) - rte_pause(); + do { + enq = rte_event_enqueue_burst(dev, port, &ev, + 1); + } while (!enq && !t->done); } } + + perf_worker_cleanup(pool, dev, port, &ev, enq, deq); + return 0; } static int perf_atq_worker_burst(void *arg, const int enable_fwd_latency) { - PERF_WORKER_INIT; - uint16_t i; /* +1 to avoid prefetch out of array check */ struct rte_event ev[BURST_SIZE + 1]; + uint16_t enq = 0, nb_rx = 0; + PERF_WORKER_INIT; + uint16_t i; while (t->done == false) { - uint16_t const nb_rx = rte_event_dequeue_burst(dev, port, ev, - BURST_SIZE, 0); + nb_rx = rte_event_dequeue_burst(dev, port, ev, BURST_SIZE, 0); if (!nb_rx) { rte_pause(); @@ -87,6 +111,25 @@ perf_atq_worker_burst(void *arg, const int enable_fwd_latency) } for (i = 0; i < nb_rx; i++) { + if (prod_crypto_type && + (ev[i].event_type == RTE_EVENT_TYPE_CRYPTODEV)) { + struct rte_crypto_op *op = ev[i].event_ptr; + + if (op->status == + RTE_CRYPTO_OP_STATUS_SUCCESS) { + if (op->sym->m_dst == NULL) + ev[i].event_ptr = + op->sym->m_src; + else + ev[i].event_ptr = + op->sym->m_dst; + rte_crypto_op_free(op); + } else { + rte_crypto_op_free(op); + continue; + } + } + if (enable_fwd_latency && !prod_timer_type) { rte_prefetch0(ev[i+1].event_ptr); /* first stage in pipeline. @@ -111,14 +154,15 @@ perf_atq_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) { + while ((enq < nb_rx) && !t->done) { enq += rte_event_enqueue_burst(dev, port, ev + enq, nb_rx - enq); } } + + perf_worker_cleanup(pool, dev, port, ev, enq, nb_rx); + return 0; } @@ -254,6 +298,18 @@ perf_atq_eventdev_setup(struct evt_test *test, struct evt_options *opt) return ret; } } + } else if (opt->prod_type == EVT_PROD_TYPE_EVENT_CRYPTO_ADPTR) { + uint8_t cdev_id, cdev_count; + + cdev_count = rte_cryptodev_count(); + for (cdev_id = 0; cdev_id < cdev_count; cdev_id++) { + ret = rte_cryptodev_start(cdev_id); + if (ret) { + evt_err("Failed to start cryptodev %u", + cdev_id); + return ret; + } + } } return 0; @@ -295,12 +351,15 @@ static const struct evt_test_ops perf_atq = { .opt_dump = perf_atq_opt_dump, .test_setup = perf_test_setup, .ethdev_setup = perf_ethdev_setup, + .cryptodev_setup = perf_cryptodev_setup, + .ethdev_rx_stop = perf_ethdev_rx_stop, .mempool_setup = perf_mempool_setup, .eventdev_setup = perf_atq_eventdev_setup, .launch_lcores = perf_atq_launch_lcores, .eventdev_destroy = perf_eventdev_destroy, .mempool_destroy = perf_mempool_destroy, .ethdev_destroy = perf_ethdev_destroy, + .cryptodev_destroy = perf_cryptodev_destroy, .test_result = perf_test_result, .test_destroy = perf_test_destroy, };