X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=app%2Ftest-eventdev%2Ftest_perf_queue.c;h=dcf6d82947b86a6d56b5f0b892648808fa4fa901;hb=a538d1d2d01e85429e7dd011806b52250d37c5dc;hp=8efdec6f97eb7bf96c40d835f94e4a7ed00bc960;hpb=43d162bc168e5c66346acf9f464495a088a5a9f0;p=dpdk.git diff --git a/app/test-eventdev/test_perf_queue.c b/app/test-eventdev/test_perf_queue.c index 8efdec6f97..dcf6d82947 100644 --- a/app/test-eventdev/test_perf_queue.c +++ b/app/test-eventdev/test_perf_queue.c @@ -15,7 +15,7 @@ perf_queue_nb_event_queues(struct evt_options *opt) return nb_prod * opt->nb_stages; } -static inline __attribute__((always_inline)) void +static __rte_always_inline void mark_fwd_latency(struct rte_event *const ev, const uint8_t nb_stages) { @@ -26,7 +26,7 @@ mark_fwd_latency(struct rte_event *const ev, } } -static inline __attribute__((always_inline)) void +static __rte_always_inline void fwd_event(struct rte_event *const ev, uint8_t *const sched_type_list, const uint8_t nb_stages) { @@ -49,6 +49,23 @@ perf_queue_worker(void *arg, const int enable_fwd_latency) 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->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 q in pipeline, mark timestamp to compute fwd latency */ mark_fwd_latency(&ev, nb_stages); @@ -88,6 +105,25 @@ perf_queue_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 queue in pipeline. @@ -158,11 +194,13 @@ perf_queue_eventdev_setup(struct evt_test *test, struct evt_options *opt) int ret; int nb_ports; int nb_queues; + uint16_t prod; struct rte_event_dev_info dev_info; + struct test_perf *t = evt_test_priv(test); nb_ports = evt_nr_active_lcores(opt->wlcores); nb_ports += opt->prod_type == EVT_PROD_TYPE_ETH_RX_ADPTR || - opt->prod_type == EVT_PROD_TYPE_EVENT_TIMER_ADPTR ? 0 : + opt->prod_type == EVT_PROD_TYPE_EVENT_TIMER_ADPTR ? 0 : evt_nr_active_lcores(opt->plcores); nb_queues = perf_queue_nb_event_queues(opt); @@ -174,18 +212,7 @@ perf_queue_eventdev_setup(struct evt_test *test, struct evt_options *opt) return ret; } - const struct rte_event_dev_config config = { - .nb_event_queues = nb_queues, - .nb_event_ports = nb_ports, - .nb_events_limit = dev_info.max_num_events, - .nb_event_queue_flows = opt->nb_flows, - .nb_event_port_dequeue_depth = - dev_info.max_event_port_dequeue_depth, - .nb_event_port_enqueue_depth = - dev_info.max_event_port_enqueue_depth, - }; - - ret = rte_event_dev_configure(opt->dev_id, &config); + ret = evt_configure_eventdev(opt, nb_queues, nb_ports); if (ret) { evt_err("failed to configure eventdev %d", opt->dev_id); return ret; @@ -251,6 +278,47 @@ perf_queue_eventdev_setup(struct evt_test *test, struct evt_options *opt) return ret; } + if (opt->prod_type == EVT_PROD_TYPE_ETH_RX_ADPTR) { + RTE_ETH_FOREACH_DEV(prod) { + ret = rte_eth_dev_start(prod); + if (ret) { + evt_err("Ethernet dev [%d] failed to start. Using synthetic producer", + prod); + return ret; + } + + ret = rte_event_eth_rx_adapter_start(prod); + if (ret) { + evt_err("Rx adapter[%d] start failed", prod); + return ret; + } + printf("%s: Port[%d] using Rx adapter[%d] started\n", + __func__, prod, prod); + } + } else if (opt->prod_type == EVT_PROD_TYPE_EVENT_TIMER_ADPTR) { + for (prod = 0; prod < opt->nb_timer_adptrs; prod++) { + ret = rte_event_timer_adapter_start( + t->timer_adptr[prod]); + if (ret) { + evt_err("failed to Start event timer adapter %d" + , prod); + 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; } @@ -291,11 +359,13 @@ static const struct evt_test_ops perf_queue = { .test_setup = perf_test_setup, .mempool_setup = perf_mempool_setup, .ethdev_setup = perf_ethdev_setup, + .cryptodev_setup = perf_cryptodev_setup, .eventdev_setup = perf_queue_eventdev_setup, .launch_lcores = perf_queue_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, };