>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: jer...@marvell.com >Cc: sta...@dpdk.org > >Suggested-by: Honnappa Nagarahalli ><honnappa.nagaraha...@arm.com> >Signed-off-by: Feifei Wang <feifei.wa...@arm.com> >Reviewed-by: Honnappa Nagarahalli ><honnappa.nagaraha...@arm.com> >Reviewed-by: Ruifeng Wang <ruifeng.w...@arm.com>
Acked-by: Pavan Nikhilesh <pbhagavat...@marvell.com> >--- > app/test/test_trace_perf.c | 5 ++--- > 1 file changed, 2 insertions(+), 3 deletions(-) > >diff --git a/app/test/test_trace_perf.c b/app/test/test_trace_perf.c >index e1ad8e6f5..46ae7d807 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 >-- >2.25.1