Message ID | 20210225093213.2811627-2-feifei.wang2@arm.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | David Marchand |
Headers | show |
Series | remove smp barriers in app/test | expand |
Context | Check | Description |
---|---|---|
ci/iol-testing | success | Testing PASS |
ci/iol-abi-testing | success | Testing PASS |
ci/github-robot | success | github build: passed |
ci/travis-robot | fail | travis build: failed |
ci/iol-mellanox-Functional | success | Functional Testing PASS |
ci/iol-intel-Performance | success | Performance Testing PASS |
ci/iol-mellanox-Performance | success | Performance Testing PASS |
ci/iol-intel-Functional | success | Functional Testing PASS |
ci/intel-Testing | success | Testing PASS |
ci/Intel-compilation | success | Compilation OK |
ci/checkpatch | success | coding style OK |
Hi, Jerin Sorry to disturb you. Would you please help review this patch when you are free? Thanks very much. Best Regards Feifei > -----邮件原件----- > 发件人: Feifei Wang <feifei.wang2@arm.com> > 发送时间: 2021年2月25日 17:32 > 收件人: jerinj@marvell.com; Sunil Kumar Kori <skori@marvell.com>; David > Marchand <david.marchand@redhat.com> > 抄送: dev@dpdk.org; nd <nd@arm.com>; Feifei Wang > <Feifei.Wang2@arm.com>; stable@dpdk.org; Honnappa Nagarahalli > <Honnappa.Nagarahalli@arm.com>; Honnappa Nagarahalli > <Honnappa.Nagarahalli@arm.com>; Ruifeng Wang > <Ruifeng.Wang@arm.com> > 主题: [PATCH v2 1/1] app/test: collect perf data after worker threads exit > > 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: jerinj@marvell.com > Cc: stable@dpdk.org > > Suggested-by: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com> > Signed-off-by: Feifei Wang <feifei.wang2@arm.com> > Reviewed-by: Honnappa Nagarahalli <Honnappa.Nagarahalli@arm.com> > Reviewed-by: Ruifeng Wang <ruifeng.wang@arm.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
>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: jerinj@marvell.com >Cc: stable@dpdk.org > >Suggested-by: Honnappa Nagarahalli ><honnappa.nagarahalli@arm.com> >Signed-off-by: Feifei Wang <feifei.wang2@arm.com> >Reviewed-by: Honnappa Nagarahalli ><Honnappa.Nagarahalli@arm.com> >Reviewed-by: Ruifeng Wang <ruifeng.wang@arm.com> Acked-by: Pavan Nikhilesh <pbhagavatula@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
On Tue, Mar 9, 2021 at 2:36 PM Feifei Wang <Feifei.Wang2@arm.com> wrote: > > Hi, Jerin > > Sorry to disturb you. Would you please help review this patch when you are free? Sure. See below. > Thanks very much. > > Best Regards > Feifei > > > -----邮件原件----- > > 发件人: Feifei Wang <feifei.wang2@arm.com> > > 发送时间: 2021年2月25日 17:32 > > 收件人: jerinj@marvell.com; Sunil Kumar Kori <skori@marvell.com>; David > > Marchand <david.marchand@redhat.com> > > 抄送: dev@dpdk.org; nd <nd@arm.com>; Feifei Wang > > <Feifei.Wang2@arm.com>; stable@dpdk.org; Honnappa Nagarahalli > > <Honnappa.Nagarahalli@arm.com>; Honnappa Nagarahalli > > <Honnappa.Nagarahalli@arm.com>; Ruifeng Wang > > <Ruifeng.Wang@arm.com> > > 主题: [PATCH v2 1/1] app/test: collect perf data after worker threads exit > > > > 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: jerinj@marvell.com > > Cc: stable@dpdk.org > > > > Suggested-by: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com> > > Signed-off-by: Feifei Wang <feifei.wang2@arm.com> > > Reviewed-by: Honnappa Nagarahalli <Honnappa.Nagarahalli@arm.com> > > Reviewed-by: Ruifeng Wang <ruifeng.wang@arm.com> Please change to test/trace: .... The rest looks good to me. Acked-by: Jerin Jacob <jerinj@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 >
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