From: Feifei Wang Date: Wed, 10 Mar 2021 02:15:27 +0000 (+0800) Subject: test/trace: fix race on collected perf data X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=dda66e716c0550ee8b218428a6d2129bd9c97740;p=dpdk.git test/trace: fix race on collected perf data The measure_perf function should be executed after worker threads exit to collect correct perf data. Otherwise, while workers are running, the main thread may get incomplete data from workers. In the meanwhile, remove unnecessary barrier in the test. For signal variables "ldata.done" and "ldata.start", no operations should keep the order that being executed after them. So the wmb after them can be moved. Fixes: 16a277a24c9f ("test/trace: add performance test cases") Cc: stable@dpdk.org Suggested-by: Honnappa Nagarahalli Signed-off-by: Feifei Wang Reviewed-by: Honnappa Nagarahalli Reviewed-by: Ruifeng Wang Acked-by: Pavan Nikhilesh Acked-by: Jerin Jacob --- diff --git a/app/test/test_trace_perf.c b/app/test/test_trace_perf.c index e1ad8e6f55..46ae7d8074 100644 --- a/app/test/test_trace_perf.c +++ b/app/test/test_trace_perf.c @@ -79,7 +79,6 @@ signal_workers_to_finish(struct test_data *data) for (workers = 0; workers < data->nb_workers; workers++) { data->ldata[workers].done = 1; - rte_smp_wmb(); } } @@ -102,7 +101,6 @@ worker_fn_##func(void *arg) \ { \ struct lcore_data *ldata = arg; \ ldata->started = 1; \ - rte_smp_wmb(); \ __worker_##func(ldata); \ return 0; \ } @@ -137,11 +135,12 @@ run_test(const char *str, lcore_function_t f, struct test_data *data, size_t sz) wait_till_workers_are_ready(data); rte_delay_ms(100); /* Wait for some time to accumulate the stats */ - measure_perf(str, data); signal_workers_to_finish(data); RTE_LCORE_FOREACH_WORKER(id) rte_eal_wait_lcore(id); + + measure_perf(str, data); } static int