[v2,1/1] app/test: collect perf data after worker threads exit

Message ID 20210225093213.2811627-2-feifei.wang2@arm.com (mailing list archive)
State Superseded, archived
Delegated to: David Marchand
Headers
Series remove smp barriers in app/test |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK
ci/intel-Testing success Testing PASS
ci/iol-intel-Functional success Functional Testing PASS
ci/iol-mellanox-Performance success Performance Testing PASS
ci/iol-intel-Performance success Performance Testing PASS
ci/iol-mellanox-Functional success Functional Testing PASS
ci/travis-robot fail travis build: failed
ci/github-robot success github build: passed
ci/iol-abi-testing success Testing PASS
ci/iol-testing success Testing PASS

Commit Message

Feifei Wang Feb. 25, 2021, 9:32 a.m. UTC
  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(-)
  

Comments

Feifei Wang March 9, 2021, 9:06 a.m. UTC | #1
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
  
Pavan Nikhilesh Bhagavatula March 9, 2021, 10:27 a.m. UTC | #2
>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
  
Jerin Jacob March 9, 2021, 12:54 p.m. UTC | #3
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
>
  

Patch

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