diff options
author | Luca Boccassi <luca.boccassi@gmail.com> | 2017-11-08 14:15:11 +0000 |
---|---|---|
committer | Luca Boccassi <luca.boccassi@gmail.com> | 2017-11-08 14:45:54 +0000 |
commit | 055c52583a2794da8ba1e85a48cce3832372b12f (patch) | |
tree | 8ceb1cb78fbb46a0f341f8ee24feb3c6b5540013 /app/test-eventdev | |
parent | f239aed5e674965691846e8ce3f187dd47523689 (diff) |
New upstream version 17.11-rc3
Change-Id: I6a5baa40612fe0c20f30b5fa773a6cbbac63a685
Signed-off-by: Luca Boccassi <luca.boccassi@gmail.com>
Diffstat (limited to 'app/test-eventdev')
-rw-r--r-- | app/test-eventdev/evt_common.h | 53 | ||||
-rw-r--r-- | app/test-eventdev/evt_options.c | 10 | ||||
-rw-r--r-- | app/test-eventdev/evt_options.h | 8 | ||||
-rw-r--r-- | app/test-eventdev/test_order_atq.c | 6 | ||||
-rw-r--r-- | app/test-eventdev/test_order_common.c | 3 | ||||
-rw-r--r-- | app/test-eventdev/test_order_queue.c | 10 | ||||
-rw-r--r-- | app/test-eventdev/test_perf_atq.c | 6 | ||||
-rw-r--r-- | app/test-eventdev/test_perf_common.c | 47 | ||||
-rw-r--r-- | app/test-eventdev/test_perf_common.h | 1 | ||||
-rw-r--r-- | app/test-eventdev/test_perf_queue.c | 10 |
10 files changed, 67 insertions, 87 deletions
diff --git a/app/test-eventdev/evt_common.h b/app/test-eventdev/evt_common.h index 41020760..0fadab4a 100644 --- a/app/test-eventdev/evt_common.h +++ b/app/test-eventdev/evt_common.h @@ -36,6 +36,7 @@ #include <rte_common.h> #include <rte_debug.h> #include <rte_eventdev.h> +#include <rte_service.h> #define CLNRM "\x1b[0m" #define CLRED "\x1b[31m" @@ -92,25 +93,43 @@ evt_has_all_types_queue(uint8_t dev_id) true : false; } -static inline uint32_t -evt_sched_type2queue_cfg(uint8_t sched_type) +static inline int +evt_service_setup(uint8_t dev_id) { - uint32_t ret; - - switch (sched_type) { - case RTE_SCHED_TYPE_ATOMIC: - ret = RTE_EVENT_QUEUE_CFG_ATOMIC_ONLY; - break; - case RTE_SCHED_TYPE_ORDERED: - ret = RTE_EVENT_QUEUE_CFG_ORDERED_ONLY; - break; - case RTE_SCHED_TYPE_PARALLEL: - ret = RTE_EVENT_QUEUE_CFG_PARALLEL_ONLY; - break; - default: - rte_panic("Invalid sched_type %d\n", sched_type); + uint32_t service_id; + int32_t core_cnt; + unsigned int lcore = 0; + uint32_t core_array[RTE_MAX_LCORE]; + uint8_t cnt; + uint8_t min_cnt = UINT8_MAX; + + if (evt_has_distributed_sched(dev_id)) + return 0; + + if (!rte_service_lcore_count()) + return -ENOENT; + + if (!rte_event_dev_service_id_get(dev_id, &service_id)) { + core_cnt = rte_service_lcore_list(core_array, + RTE_MAX_LCORE); + if (core_cnt < 0) + return -ENOENT; + /* Get the core which has least number of services running. */ + while (core_cnt--) { + /* Reset default mapping */ + rte_service_map_lcore_set(service_id, + core_array[core_cnt], 0); + cnt = rte_service_lcore_count_services( + core_array[core_cnt]); + if (cnt < min_cnt) { + lcore = core_array[core_cnt]; + min_cnt = cnt; + } + } + if (rte_service_map_lcore_set(service_id, lcore, 1)) + return -ENOENT; } - return ret; + return 0; } #endif /* _EVT_COMMON_*/ diff --git a/app/test-eventdev/evt_options.c b/app/test-eventdev/evt_options.c index 65e22f84..e2187dfc 100644 --- a/app/test-eventdev/evt_options.c +++ b/app/test-eventdev/evt_options.c @@ -114,13 +114,6 @@ evt_parse_test_name(struct evt_options *opt, const char *arg) } static int -evt_parse_slcore(struct evt_options *opt, const char *arg) -{ - opt->slcore = atoi(arg); - return 0; -} - -static int evt_parse_socket_id(struct evt_options *opt, const char *arg) { opt->socket_id = atoi(arg); @@ -188,7 +181,6 @@ usage(char *program) "\t--test : name of the test application to run\n" "\t--socket_id : socket_id of application resources\n" "\t--pool_sz : pool size of the mempool\n" - "\t--slcore : lcore id of the scheduler\n" "\t--plcores : list of lcore ids for producers\n" "\t--wlcores : list of lcore ids for workers\n" "\t--stlist : list of scheduled types of the stages\n" @@ -254,7 +246,6 @@ static struct option lgopts[] = { { EVT_POOL_SZ, 1, 0, 0 }, { EVT_NB_PKTS, 1, 0, 0 }, { EVT_WKR_DEQ_DEP, 1, 0, 0 }, - { EVT_SCHED_LCORE, 1, 0, 0 }, { EVT_SCHED_TYPE_LIST, 1, 0, 0 }, { EVT_FWD_LATENCY, 0, 0, 0 }, { EVT_QUEUE_PRIORITY, 0, 0, 0 }, @@ -278,7 +269,6 @@ evt_opts_parse_long(int opt_idx, struct evt_options *opt) { EVT_POOL_SZ, evt_parse_pool_sz}, { EVT_NB_PKTS, evt_parse_nb_pkts}, { EVT_WKR_DEQ_DEP, evt_parse_wkr_deq_dep}, - { EVT_SCHED_LCORE, evt_parse_slcore}, { EVT_SCHED_TYPE_LIST, evt_parse_sched_type_list}, { EVT_FWD_LATENCY, evt_parse_fwd_latency}, { EVT_QUEUE_PRIORITY, evt_parse_queue_priority}, diff --git a/app/test-eventdev/evt_options.h b/app/test-eventdev/evt_options.h index d8a9fdcc..a9a91252 100644 --- a/app/test-eventdev/evt_options.h +++ b/app/test-eventdev/evt_options.h @@ -47,7 +47,6 @@ #define EVT_VERBOSE ("verbose") #define EVT_DEVICE ("dev") #define EVT_TEST ("test") -#define EVT_SCHED_LCORE ("slcore") #define EVT_PROD_LCORES ("plcores") #define EVT_WORK_LCORES ("wlcores") #define EVT_NB_FLOWS ("nb_flows") @@ -67,7 +66,6 @@ struct evt_options { bool plcores[RTE_MAX_LCORE]; bool wlcores[RTE_MAX_LCORE]; uint8_t sched_type_list[EVT_MAX_STAGES]; - int slcore; uint32_t nb_flows; int socket_id; int pool_sz; @@ -219,12 +217,6 @@ evt_dump_nb_flows(struct evt_options *opt) } static inline void -evt_dump_scheduler_lcore(struct evt_options *opt) -{ - evt_dump("scheduler lcore", "%d", opt->slcore); -} - -static inline void evt_dump_worker_dequeue_depth(struct evt_options *opt) { evt_dump("worker deq depth", "%d", opt->wkr_deq_dep); diff --git a/app/test-eventdev/test_order_atq.c b/app/test-eventdev/test_order_atq.c index 7e6c67d4..4ee0dea8 100644 --- a/app/test-eventdev/test_order_atq.c +++ b/app/test-eventdev/test_order_atq.c @@ -179,6 +179,12 @@ order_atq_eventdev_setup(struct evt_test *test, struct evt_options *opt) if (ret) return ret; + ret = evt_service_setup(opt->dev_id); + if (ret) { + evt_err("No service lcore found to run event dev."); + return ret; + } + ret = rte_event_dev_start(opt->dev_id); if (ret) { evt_err("failed to start eventdev %d", opt->dev_id); diff --git a/app/test-eventdev/test_order_common.c b/app/test-eventdev/test_order_common.c index 80e14c08..7cfe7fac 100644 --- a/app/test-eventdev/test_order_common.c +++ b/app/test-eventdev/test_order_common.c @@ -292,9 +292,6 @@ order_launch_lcores(struct evt_test *test, struct evt_options *opt, int64_t old_remaining = -1; while (t->err == false) { - - rte_event_schedule(opt->dev_id); - uint64_t new_cycles = rte_get_timer_cycles(); int64_t remaining = rte_atomic64_read(&t->outstand_pkts); diff --git a/app/test-eventdev/test_order_queue.c b/app/test-eventdev/test_order_queue.c index beadd9c3..eef69a4c 100644 --- a/app/test-eventdev/test_order_queue.c +++ b/app/test-eventdev/test_order_queue.c @@ -164,7 +164,7 @@ order_queue_eventdev_setup(struct evt_test *test, struct evt_options *opt) /* q0 (ordered queue) configuration */ struct rte_event_queue_conf q0_ordered_conf = { .priority = RTE_EVENT_DEV_PRIORITY_NORMAL, - .event_queue_cfg = RTE_EVENT_QUEUE_CFG_ORDERED_ONLY, + .schedule_type = RTE_SCHED_TYPE_ORDERED, .nb_atomic_flows = opt->nb_flows, .nb_atomic_order_sequences = opt->nb_flows, }; @@ -177,7 +177,7 @@ order_queue_eventdev_setup(struct evt_test *test, struct evt_options *opt) /* q1 (atomic queue) configuration */ struct rte_event_queue_conf q1_atomic_conf = { .priority = RTE_EVENT_DEV_PRIORITY_NORMAL, - .event_queue_cfg = RTE_EVENT_QUEUE_CFG_ATOMIC_ONLY, + .schedule_type = RTE_SCHED_TYPE_ATOMIC, .nb_atomic_flows = opt->nb_flows, .nb_atomic_order_sequences = opt->nb_flows, }; @@ -192,6 +192,12 @@ order_queue_eventdev_setup(struct evt_test *test, struct evt_options *opt) if (ret) return ret; + ret = evt_service_setup(opt->dev_id); + if (ret) { + evt_err("No service lcore found to run event dev."); + return ret; + } + ret = rte_event_dev_start(opt->dev_id); if (ret) { evt_err("failed to start eventdev %d", opt->dev_id); diff --git a/app/test-eventdev/test_perf_atq.c b/app/test-eventdev/test_perf_atq.c index 9c3efa3a..0e9f2db0 100644 --- a/app/test-eventdev/test_perf_atq.c +++ b/app/test-eventdev/test_perf_atq.c @@ -221,6 +221,12 @@ perf_atq_eventdev_setup(struct evt_test *test, struct evt_options *opt) if (ret) return ret; + ret = evt_service_setup(opt->dev_id); + if (ret) { + evt_err("No service lcore found to run event dev."); + return ret; + } + ret = rte_event_dev_start(opt->dev_id); if (ret) { evt_err("failed to start eventdev %d", opt->dev_id); diff --git a/app/test-eventdev/test_perf_common.c b/app/test-eventdev/test_perf_common.c index 7b092994..e77b4723 100644 --- a/app/test-eventdev/test_perf_common.c +++ b/app/test-eventdev/test_perf_common.c @@ -88,18 +88,6 @@ perf_producer(void *arg) return 0; } -static inline int -scheduler(void *arg) -{ - struct test_perf *t = arg; - const uint8_t dev_id = t->opt->dev_id; - - while (t->done == false) - rte_event_schedule(dev_id); - - return 0; -} - static inline uint64_t processed_pkts(struct test_perf *t) { @@ -163,15 +151,6 @@ perf_launch_lcores(struct evt_test *test, struct evt_options *opt, port_idx++; } - /* launch scheduler */ - if (!evt_has_distributed_sched(opt->dev_id)) { - ret = rte_eal_remote_launch(scheduler, t, opt->slcore); - if (ret) { - evt_err("failed to launch sched %d", opt->slcore); - return ret; - } - } - const uint64_t total_pkts = opt->nb_pkts * evt_nr_active_lcores(opt->plcores); @@ -307,10 +286,9 @@ int perf_opt_check(struct evt_options *opt, uint64_t nb_queues) { unsigned int lcores; - bool need_slcore = !evt_has_distributed_sched(opt->dev_id); - /* N producer + N worker + 1 scheduler(based on dev capa) + 1 master */ - lcores = need_slcore ? 4 : 3; + /* N producer + N worker + 1 master */ + lcores = 3; if (rte_lcore_count() < lcores) { evt_err("test need minimum %d lcores", lcores); @@ -322,10 +300,6 @@ perf_opt_check(struct evt_options *opt, uint64_t nb_queues) evt_err("worker lcores overlaps with master lcore"); return -1; } - if (need_slcore && evt_lcores_has_overlap(opt->wlcores, opt->slcore)) { - evt_err("worker lcores overlaps with scheduler lcore"); - return -1; - } if (evt_lcores_has_overlap_multi(opt->wlcores, opt->plcores)) { evt_err("worker lcores overlaps producer lcores"); return -1; @@ -344,10 +318,6 @@ perf_opt_check(struct evt_options *opt, uint64_t nb_queues) evt_err("producer lcores overlaps with master lcore"); return -1; } - if (need_slcore && evt_lcores_has_overlap(opt->plcores, opt->slcore)) { - evt_err("producer lcores overlaps with scheduler lcore"); - return -1; - } if (evt_has_disabled_lcore(opt->plcores)) { evt_err("one or more producer lcores are not enabled"); return -1; @@ -357,17 +327,6 @@ perf_opt_check(struct evt_options *opt, uint64_t nb_queues) return -1; } - /* Validate scheduler lcore */ - if (!evt_has_distributed_sched(opt->dev_id) && - opt->slcore == (int)rte_get_master_lcore()) { - evt_err("scheduler lcore and master lcore should be different"); - return -1; - } - if (need_slcore && !rte_lcore_is_enabled(opt->slcore)) { - evt_err("scheduler lcore is not enabled"); - return -1; - } - if (evt_has_invalid_stage(opt)) return -1; @@ -405,8 +364,6 @@ perf_opt_dump(struct evt_options *opt, uint8_t nb_queues) evt_dump_producer_lcores(opt); evt_dump("nb_worker_lcores", "%d", evt_nr_active_lcores(opt->wlcores)); evt_dump_worker_lcores(opt); - if (!evt_has_distributed_sched(opt->dev_id)) - evt_dump_scheduler_lcore(opt); evt_dump_nb_stages(opt); evt_dump("nb_evdev_ports", "%d", perf_nb_event_ports(opt)); evt_dump("nb_evdev_queues", "%d", nb_queues); diff --git a/app/test-eventdev/test_perf_common.h b/app/test-eventdev/test_perf_common.h index 4956586c..c6fc70cd 100644 --- a/app/test-eventdev/test_perf_common.h +++ b/app/test-eventdev/test_perf_common.h @@ -159,6 +159,7 @@ int perf_test_setup(struct evt_test *test, struct evt_options *opt); int perf_mempool_setup(struct evt_test *test, struct evt_options *opt); int perf_event_dev_port_setup(struct evt_test *test, struct evt_options *opt, uint8_t stride, uint8_t nb_queues); +int perf_event_dev_service_setup(uint8_t dev_id); int perf_launch_lcores(struct evt_test *test, struct evt_options *opt, int (*worker)(void *)); void perf_opt_dump(struct evt_options *opt, uint8_t nb_queues); diff --git a/app/test-eventdev/test_perf_queue.c b/app/test-eventdev/test_perf_queue.c index 658c08a0..d843eea1 100644 --- a/app/test-eventdev/test_perf_queue.c +++ b/app/test-eventdev/test_perf_queue.c @@ -205,8 +205,8 @@ perf_queue_eventdev_setup(struct evt_test *test, struct evt_options *opt) }; /* queue configurations */ for (queue = 0; queue < perf_queue_nb_event_queues(opt); queue++) { - q_conf.event_queue_cfg = evt_sched_type2queue_cfg - (opt->sched_type_list[queue % nb_stages]); + q_conf.schedule_type = + (opt->sched_type_list[queue % nb_stages]); if (opt->q_priority) { uint8_t stage_pos = queue % nb_stages; @@ -232,6 +232,12 @@ perf_queue_eventdev_setup(struct evt_test *test, struct evt_options *opt) if (ret) return ret; + ret = evt_service_setup(opt->dev_id); + if (ret) { + evt_err("No service lcore found to run event dev."); + return ret; + } + ret = rte_event_dev_start(opt->dev_id); if (ret) { evt_err("failed to start eventdev %d", opt->dev_id); |