All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH RFC] tests: Run qtest cases in parallel
@ 2016-08-12  9:19 Fam Zheng
  2016-09-21 18:24 ` John Snow
  0 siblings, 1 reply; 13+ messages in thread
From: Fam Zheng @ 2016-08-12  9:19 UTC (permalink / raw)
  To: qemu-devel

Previously all test cases in a category, such as check-qtest-y, are
executed in a single long gtester command. This patch separates each
test into its own make target to allow better parallism.

Signed-off-by: Fam Zheng <famz@redhat.com>
---

This saves 50% of the time "make check takes" compared to on master
(I use -j8). RFC because I'm not sure if the new gcov usage is correct
with the now much higher level of parallism compared to before.
---
 tests/Makefile.include | 34 ++++++++++++++++++----------------
 1 file changed, 18 insertions(+), 16 deletions(-)

diff --git a/tests/Makefile.include b/tests/Makefile.include
index 14be491..9bf0326 100644
--- a/tests/Makefile.include
+++ b/tests/Makefile.include
@@ -691,27 +691,29 @@ GCOV_OPTIONS = -n $(if $(V),-f,)
 # gtester tests, possibly with verbose output
 
 .PHONY: $(patsubst %, check-qtest-%, $(QTEST_TARGETS))
-$(patsubst %, check-qtest-%, $(QTEST_TARGETS)): check-qtest-%: $(check-qtest-y)
+
+qtest-run-%: tests/%
 	$(if $(CONFIG_GCOV),@rm -f *.gcda */*.gcda */*/*.gcda */*/*/*.gcda,)
-	$(call quiet-command,QTEST_QEMU_BINARY=$*-softmmu/qemu-system-$* \
+	$(call quiet-command,\
+		$(if $(QTEST_TARGET), \
+			QTEST_QEMU_BINARY=$(QTEST_TARGET)-softmmu/qemu-system-$(QTEST_TARGET)) \
 		QTEST_QEMU_IMG=qemu-img$(EXESUF) \
 		MALLOC_PERTURB_=$${MALLOC_PERTURB_:-$$((RANDOM % 255 + 1))} \
-		gtester $(GTESTER_OPTIONS) -m=$(SPEED) $(check-qtest-$*-y) $(check-qtest-generic-y),"GTESTER $@")
-	$(if $(CONFIG_GCOV),@for f in $(gcov-files-$*-y) $(gcov-files-generic-y); do \
-	  echo Gcov report for $$f:;\
-	  $(GCOV) $(GCOV_OPTIONS) $$f -o `dirname $$f`; \
-	done,)
+		gtester $< $(GTESTER_OPTIONS) -m=$(SPEED),"GTESTER $<")
+	$(if $(CONFIG_GCOV), @echo Gcov report for $<:;\
+	  $(GCOV) $(GCOV_OPTIONS) $< -o `dirname $<`; \
+	)
+
+$(foreach target, $(QTEST_TARGETS), \
+	$(eval check-qtest-$(target): QTEST_TARGET := $(target)) \
+	$(eval check-qtest-$(target): $(patsubst tests/%, qtest-run-%, \
+                                             $(check-qtest-y) \
+                                             $(check-qtest-$(target)-y) \
+                                             $(check-qtest-generic-y))) \
+)
 
 .PHONY: $(patsubst %, check-%, $(check-unit-y))
-$(patsubst %, check-%, $(check-unit-y)): check-%: %
-	$(if $(CONFIG_GCOV),@rm -f *.gcda */*.gcda */*/*.gcda */*/*/*.gcda,)
-	$(call quiet-command, \
-		MALLOC_PERTURB_=$${MALLOC_PERTURB_:-$$((RANDOM % 255 + 1))} \
-		gtester $(GTESTER_OPTIONS) -m=$(SPEED) $*,"GTESTER $*")
-	$(if $(CONFIG_GCOV),@for f in $(gcov-files-$(subst tests/,,$*)-y) $(gcov-files-generic-y); do \
-	  echo Gcov report for $$f:;\
-	  $(GCOV) $(GCOV_OPTIONS) $$f -o `dirname $$f`; \
-	done,)
+$(patsubst %, check-%, $(check-unit-y)): check-tests/%: qtest-run-%
 
 # gtester tests with XML output
 
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* Re: [Qemu-devel] [PATCH RFC] tests: Run qtest cases in parallel
  2016-08-12  9:19 [Qemu-devel] [PATCH RFC] tests: Run qtest cases in parallel Fam Zheng
@ 2016-09-21 18:24 ` John Snow
  2016-09-23  7:58   ` Fam Zheng
  0 siblings, 1 reply; 13+ messages in thread
From: John Snow @ 2016-09-21 18:24 UTC (permalink / raw)
  To: Fam Zheng, qemu-devel



On 08/12/2016 05:19 AM, Fam Zheng wrote:
> Previously all test cases in a category, such as check-qtest-y, are
> executed in a single long gtester command. This patch separates each
> test into its own make target to allow better parallism.
>
> Signed-off-by: Fam Zheng <famz@redhat.com>
> ---
>
> This saves 50% of the time "make check takes" compared to on master
> (I use -j8). RFC because I'm not sure if the new gcov usage is correct
> with the now much higher level of parallism compared to before.
> ---
>  tests/Makefile.include | 34 ++++++++++++++++++----------------
>  1 file changed, 18 insertions(+), 16 deletions(-)
>
> diff --git a/tests/Makefile.include b/tests/Makefile.include
> index 14be491..9bf0326 100644
> --- a/tests/Makefile.include
> +++ b/tests/Makefile.include
> @@ -691,27 +691,29 @@ GCOV_OPTIONS = -n $(if $(V),-f,)
>  # gtester tests, possibly with verbose output
>
>  .PHONY: $(patsubst %, check-qtest-%, $(QTEST_TARGETS))
> -$(patsubst %, check-qtest-%, $(QTEST_TARGETS)): check-qtest-%: $(check-qtest-y)
> +
> +qtest-run-%: tests/%
>  	$(if $(CONFIG_GCOV),@rm -f *.gcda */*.gcda */*/*.gcda */*/*/*.gcda,)
> -	$(call quiet-command,QTEST_QEMU_BINARY=$*-softmmu/qemu-system-$* \
> +	$(call quiet-command,\
> +		$(if $(QTEST_TARGET), \
> +			QTEST_QEMU_BINARY=$(QTEST_TARGET)-softmmu/qemu-system-$(QTEST_TARGET)) \
>  		QTEST_QEMU_IMG=qemu-img$(EXESUF) \
>  		MALLOC_PERTURB_=$${MALLOC_PERTURB_:-$$((RANDOM % 255 + 1))} \
> -		gtester $(GTESTER_OPTIONS) -m=$(SPEED) $(check-qtest-$*-y) $(check-qtest-generic-y),"GTESTER $@")
> -	$(if $(CONFIG_GCOV),@for f in $(gcov-files-$*-y) $(gcov-files-generic-y); do \
> -	  echo Gcov report for $$f:;\
> -	  $(GCOV) $(GCOV_OPTIONS) $$f -o `dirname $$f`; \
> -	done,)
> +		gtester $< $(GTESTER_OPTIONS) -m=$(SPEED),"GTESTER $<")
> +	$(if $(CONFIG_GCOV), @echo Gcov report for $<:;\
> +	  $(GCOV) $(GCOV_OPTIONS) $< -o `dirname $<`; \
> +	)
> +
> +$(foreach target, $(QTEST_TARGETS), \
> +	$(eval check-qtest-$(target): QTEST_TARGET := $(target)) \
> +	$(eval check-qtest-$(target): $(patsubst tests/%, qtest-run-%, \
> +                                             $(check-qtest-y) \
> +                                             $(check-qtest-$(target)-y) \
> +                                             $(check-qtest-generic-y))) \
> +)
>
>  .PHONY: $(patsubst %, check-%, $(check-unit-y))
> -$(patsubst %, check-%, $(check-unit-y)): check-%: %
> -	$(if $(CONFIG_GCOV),@rm -f *.gcda */*.gcda */*/*.gcda */*/*/*.gcda,)
> -	$(call quiet-command, \
> -		MALLOC_PERTURB_=$${MALLOC_PERTURB_:-$$((RANDOM % 255 + 1))} \
> -		gtester $(GTESTER_OPTIONS) -m=$(SPEED) $*,"GTESTER $*")
> -	$(if $(CONFIG_GCOV),@for f in $(gcov-files-$(subst tests/,,$*)-y) $(gcov-files-generic-y); do \
> -	  echo Gcov report for $$f:;\
> -	  $(GCOV) $(GCOV_OPTIONS) $$f -o `dirname $$f`; \
> -	done,)
> +$(patsubst %, check-%, $(check-unit-y)): check-tests/%: qtest-run-%
>
>  # gtester tests with XML output
>
>

I can't vouch for gcov either, but:

Tested-by: John Snow <jsnow@redhat.com>

-j1:

real	1m51.195s
user	1m5.478s
sys	0m21.158s

-j9:

real	0m53.039s
user	1m41.754s
sys	0m31.150s


This seems useful.

--js

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [Qemu-devel] [PATCH RFC] tests: Run qtest cases in parallel
  2016-09-21 18:24 ` John Snow
@ 2016-09-23  7:58   ` Fam Zheng
  2016-09-23  9:39     ` Gonglei (Arei)
  2016-09-27 10:17     ` Daniel P. Berrange
  0 siblings, 2 replies; 13+ messages in thread
From: Fam Zheng @ 2016-09-23  7:58 UTC (permalink / raw)
  To: John Snow; +Cc: qemu-devel, pbonzini

On Wed, 09/21 14:24, John Snow wrote:
> 
> 
> On 08/12/2016 05:19 AM, Fam Zheng wrote:
> > Previously all test cases in a category, such as check-qtest-y, are
> > executed in a single long gtester command. This patch separates each
> > test into its own make target to allow better parallism.
> > 
> > Signed-off-by: Fam Zheng <famz@redhat.com>
> > ---
> > 
> > This saves 50% of the time "make check takes" compared to on master
> > (I use -j8). RFC because I'm not sure if the new gcov usage is correct
> > with the now much higher level of parallism compared to before.
> > ---
> >  tests/Makefile.include | 34 ++++++++++++++++++----------------
> >  1 file changed, 18 insertions(+), 16 deletions(-)
> > 
> > diff --git a/tests/Makefile.include b/tests/Makefile.include
> > index 14be491..9bf0326 100644
> > --- a/tests/Makefile.include
> > +++ b/tests/Makefile.include
> > @@ -691,27 +691,29 @@ GCOV_OPTIONS = -n $(if $(V),-f,)
> >  # gtester tests, possibly with verbose output
> > 
> >  .PHONY: $(patsubst %, check-qtest-%, $(QTEST_TARGETS))
> > -$(patsubst %, check-qtest-%, $(QTEST_TARGETS)): check-qtest-%: $(check-qtest-y)
> > +
> > +qtest-run-%: tests/%
> >  	$(if $(CONFIG_GCOV),@rm -f *.gcda */*.gcda */*/*.gcda */*/*/*.gcda,)
> > -	$(call quiet-command,QTEST_QEMU_BINARY=$*-softmmu/qemu-system-$* \
> > +	$(call quiet-command,\
> > +		$(if $(QTEST_TARGET), \
> > +			QTEST_QEMU_BINARY=$(QTEST_TARGET)-softmmu/qemu-system-$(QTEST_TARGET)) \
> >  		QTEST_QEMU_IMG=qemu-img$(EXESUF) \
> >  		MALLOC_PERTURB_=$${MALLOC_PERTURB_:-$$((RANDOM % 255 + 1))} \
> > -		gtester $(GTESTER_OPTIONS) -m=$(SPEED) $(check-qtest-$*-y) $(check-qtest-generic-y),"GTESTER $@")
> > -	$(if $(CONFIG_GCOV),@for f in $(gcov-files-$*-y) $(gcov-files-generic-y); do \
> > -	  echo Gcov report for $$f:;\
> > -	  $(GCOV) $(GCOV_OPTIONS) $$f -o `dirname $$f`; \
> > -	done,)
> > +		gtester $< $(GTESTER_OPTIONS) -m=$(SPEED),"GTESTER $<")
> > +	$(if $(CONFIG_GCOV), @echo Gcov report for $<:;\
> > +	  $(GCOV) $(GCOV_OPTIONS) $< -o `dirname $<`; \
> > +	)
> > +
> > +$(foreach target, $(QTEST_TARGETS), \
> > +	$(eval check-qtest-$(target): QTEST_TARGET := $(target)) \
> > +	$(eval check-qtest-$(target): $(patsubst tests/%, qtest-run-%, \
> > +                                             $(check-qtest-y) \
> > +                                             $(check-qtest-$(target)-y) \
> > +                                             $(check-qtest-generic-y))) \
> > +)
> > 
> >  .PHONY: $(patsubst %, check-%, $(check-unit-y))
> > -$(patsubst %, check-%, $(check-unit-y)): check-%: %
> > -	$(if $(CONFIG_GCOV),@rm -f *.gcda */*.gcda */*/*.gcda */*/*/*.gcda,)
> > -	$(call quiet-command, \
> > -		MALLOC_PERTURB_=$${MALLOC_PERTURB_:-$$((RANDOM % 255 + 1))} \
> > -		gtester $(GTESTER_OPTIONS) -m=$(SPEED) $*,"GTESTER $*")
> > -	$(if $(CONFIG_GCOV),@for f in $(gcov-files-$(subst tests/,,$*)-y) $(gcov-files-generic-y); do \
> > -	  echo Gcov report for $$f:;\
> > -	  $(GCOV) $(GCOV_OPTIONS) $$f -o `dirname $$f`; \
> > -	done,)
> > +$(patsubst %, check-%, $(check-unit-y)): check-tests/%: qtest-run-%
> > 
> >  # gtester tests with XML output
> > 
> > 
> 
> I can't vouch for gcov either, but:

Too bad that this seems to be too big a hammer that breaks the way gcov was
used: 1) the "rm *.gcda" command now runs in each test, so it's harder to
get an overall coverage report; 2) there is a risk that the parallism may
corrupt those files. :(

Fam

> 
> Tested-by: John Snow <jsnow@redhat.com>
> 
> -j1:
> 
> real	1m51.195s
> user	1m5.478s
> sys	0m21.158s
> 
> -j9:
> 
> real	0m53.039s
> user	1m41.754s
> sys	0m31.150s
> 
> 
> This seems useful.
> 
> --js

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [Qemu-devel] [PATCH RFC] tests: Run qtest cases in parallel
  2016-09-23  7:58   ` Fam Zheng
@ 2016-09-23  9:39     ` Gonglei (Arei)
  2016-09-23  9:59       ` Fam Zheng
  2016-09-27 10:17     ` Daniel P. Berrange
  1 sibling, 1 reply; 13+ messages in thread
From: Gonglei (Arei) @ 2016-09-23  9:39 UTC (permalink / raw)
  To: Fam Zheng, John Snow; +Cc: pbonzini, qemu-devel


Hi Fam,


> -----Original Message-----
> From: Qemu-devel
> [mailto:qemu-devel-bounces+arei.gonglei=huawei.com@nongnu.org] On
> Behalf Of Fam Zheng
> Sent: Friday, September 23, 2016 3:58 PM
> To: John Snow
> Cc: pbonzini@redhat.com; qemu-devel@nongnu.org
> Subject: Re: [Qemu-devel] [PATCH RFC] tests: Run qtest cases in parallel
> 
> On Wed, 09/21 14:24, John Snow wrote:
> >
> >
> > On 08/12/2016 05:19 AM, Fam Zheng wrote:
> > > Previously all test cases in a category, such as check-qtest-y, are
> > > executed in a single long gtester command. This patch separates each
> > > test into its own make target to allow better parallism.
> > >

That's will be great if we can specify a test to run, especially for the scenario
which add one use qtest case.

For example: 

 # make check test-crypto-cipher

then only run the tests/ test-crypto-cipher. 

Do you think it makes sense?

Regards,
-Gonglei

> > > Signed-off-by: Fam Zheng <famz@redhat.com>
> > > ---
> > >
> > > This saves 50% of the time "make check takes" compared to on master
> > > (I use -j8). RFC because I'm not sure if the new gcov usage is correct
> > > with the now much higher level of parallism compared to before.
> > > ---
> > >  tests/Makefile.include | 34 ++++++++++++++++++----------------
> > >  1 file changed, 18 insertions(+), 16 deletions(-)
> > >
> > > diff --git a/tests/Makefile.include b/tests/Makefile.include
> > > index 14be491..9bf0326 100644
> > > --- a/tests/Makefile.include
> > > +++ b/tests/Makefile.include
> > > @@ -691,27 +691,29 @@ GCOV_OPTIONS = -n $(if $(V),-f,)
> > >  # gtester tests, possibly with verbose output
> > >
> > >  .PHONY: $(patsubst %, check-qtest-%, $(QTEST_TARGETS))
> > > -$(patsubst %, check-qtest-%, $(QTEST_TARGETS)): check-qtest-%:
> $(check-qtest-y)
> > > +
> > > +qtest-run-%: tests/%
> > >  	$(if $(CONFIG_GCOV),@rm -f *.gcda */*.gcda */*/*.gcda
> */*/*/*.gcda,)
> > > -	$(call
> quiet-command,QTEST_QEMU_BINARY=$*-softmmu/qemu-system-$* \
> > > +	$(call quiet-command,\
> > > +		$(if $(QTEST_TARGET), \
> > > +
> 	QTEST_QEMU_BINARY=$(QTEST_TARGET)-softmmu/qemu-system-$(QTE
> ST_TARGET)) \
> > >  		QTEST_QEMU_IMG=qemu-img$(EXESUF) \
> > >  		MALLOC_PERTURB_=$${MALLOC_PERTURB_:-$$((RANDOM %
> 255 + 1))} \
> > > -		gtester $(GTESTER_OPTIONS) -m=$(SPEED) $(check-qtest-$*-y)
> $(check-qtest-generic-y),"GTESTER $@")
> > > -	$(if $(CONFIG_GCOV),@for f in $(gcov-files-$*-y) $(gcov-files-generic-y);
> do \
> > > -	  echo Gcov report for $$f:;\
> > > -	  $(GCOV) $(GCOV_OPTIONS) $$f -o `dirname $$f`; \
> > > -	done,)
> > > +		gtester $< $(GTESTER_OPTIONS) -m=$(SPEED),"GTESTER $<")
> > > +	$(if $(CONFIG_GCOV), @echo Gcov report for $<:;\
> > > +	  $(GCOV) $(GCOV_OPTIONS) $< -o `dirname $<`; \
> > > +	)
> > > +
> > > +$(foreach target, $(QTEST_TARGETS), \
> > > +	$(eval check-qtest-$(target): QTEST_TARGET := $(target)) \
> > > +	$(eval check-qtest-$(target): $(patsubst tests/%, qtest-run-%, \
> > > +                                             $(check-qtest-y) \
> > > +
> $(check-qtest-$(target)-y) \
> > > +
> $(check-qtest-generic-y))) \
> > > +)
> > >
> > >  .PHONY: $(patsubst %, check-%, $(check-unit-y))
> > > -$(patsubst %, check-%, $(check-unit-y)): check-%: %
> > > -	$(if $(CONFIG_GCOV),@rm -f *.gcda */*.gcda */*/*.gcda */*/*/*.gcda,)
> > > -	$(call quiet-command, \
> > > -		MALLOC_PERTURB_=$${MALLOC_PERTURB_:-$$((RANDOM % 255 +
> 1))} \
> > > -		gtester $(GTESTER_OPTIONS) -m=$(SPEED) $*,"GTESTER $*")
> > > -	$(if $(CONFIG_GCOV),@for f in $(gcov-files-$(subst tests/,,$*)-y)
> $(gcov-files-generic-y); do \
> > > -	  echo Gcov report for $$f:;\
> > > -	  $(GCOV) $(GCOV_OPTIONS) $$f -o `dirname $$f`; \
> > > -	done,)
> > > +$(patsubst %, check-%, $(check-unit-y)): check-tests/%: qtest-run-%
> > >
> > >  # gtester tests with XML output
> > >
> > >
> >
> > I can't vouch for gcov either, but:
> 
> Too bad that this seems to be too big a hammer that breaks the way gcov was
> used: 1) the "rm *.gcda" command now runs in each test, so it's harder to
> get an overall coverage report; 2) there is a risk that the parallism may
> corrupt those files. :(
> 
> Fam
> 
> >
> > Tested-by: John Snow <jsnow@redhat.com>
> >
> > -j1:
> >
> > real	1m51.195s
> > user	1m5.478s
> > sys	0m21.158s
> >
> > -j9:
> >
> > real	0m53.039s
> > user	1m41.754s
> > sys	0m31.150s
> >
> >
> > This seems useful.
> >
> > --js

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [Qemu-devel] [PATCH RFC] tests: Run qtest cases in parallel
  2016-09-23  9:39     ` Gonglei (Arei)
@ 2016-09-23  9:59       ` Fam Zheng
  2016-09-24  2:37         ` Gonglei (Arei)
  2016-09-27 10:14         ` Daniel P. Berrange
  0 siblings, 2 replies; 13+ messages in thread
From: Fam Zheng @ 2016-09-23  9:59 UTC (permalink / raw)
  To: Gonglei (Arei); +Cc: John Snow, pbonzini, qemu-devel

On Fri, 09/23 09:39, Gonglei (Arei) wrote:
> 
> Hi Fam,
> 
> 
> > -----Original Message-----
> > From: Qemu-devel
> > [mailto:qemu-devel-bounces+arei.gonglei=huawei.com@nongnu.org] On
> > Behalf Of Fam Zheng
> > Sent: Friday, September 23, 2016 3:58 PM
> > To: John Snow
> > Cc: pbonzini@redhat.com; qemu-devel@nongnu.org
> > Subject: Re: [Qemu-devel] [PATCH RFC] tests: Run qtest cases in parallel
> > 
> > On Wed, 09/21 14:24, John Snow wrote:
> > >
> > >
> > > On 08/12/2016 05:19 AM, Fam Zheng wrote:
> > > > Previously all test cases in a category, such as check-qtest-y, are
> > > > executed in a single long gtester command. This patch separates each
> > > > test into its own make target to allow better parallism.
> > > >
> 
> That's will be great if we can specify a test to run, especially for the scenario
> which add one use qtest case.
> 
> For example: 
> 
>  # make check test-crypto-cipher
> 
> then only run the tests/ test-crypto-cipher. 
> 
> Do you think it makes sense?

Or more likely:

    # make check TESTS="test-crypto-cipher test-crypto-hash ..."

Usually I just extract the gtester command line with V=1 and run it from my
shell prompt.  Feel free to send a patch, though.

Fam

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [Qemu-devel] [PATCH RFC] tests: Run qtest cases in parallel
  2016-09-23  9:59       ` Fam Zheng
@ 2016-09-24  2:37         ` Gonglei (Arei)
  2016-09-27 10:14         ` Daniel P. Berrange
  1 sibling, 0 replies; 13+ messages in thread
From: Gonglei (Arei) @ 2016-09-24  2:37 UTC (permalink / raw)
  To: Fam Zheng; +Cc: John Snow, pbonzini, qemu-devel


> -----Original Message-----
> From: Fam Zheng [mailto:famz@redhat.com]
> Sent: Friday, September 23, 2016 5:59 PM
> To: Gonglei (Arei)
> Cc: John Snow; pbonzini@redhat.com; qemu-devel@nongnu.org
> Subject: Re: [Qemu-devel] [PATCH RFC] tests: Run qtest cases in parallel
> 
> On Fri, 09/23 09:39, Gonglei (Arei) wrote:
> >
> > Hi Fam,
> >
> >
> > > -----Original Message-----
> > > From: Qemu-devel
> > > [mailto:qemu-devel-bounces+arei.gonglei=huawei.com@nongnu.org] On
> > > Behalf Of Fam Zheng
> > > Sent: Friday, September 23, 2016 3:58 PM
> > > To: John Snow
> > > Cc: pbonzini@redhat.com; qemu-devel@nongnu.org
> > > Subject: Re: [Qemu-devel] [PATCH RFC] tests: Run qtest cases in parallel
> > >
> > > On Wed, 09/21 14:24, John Snow wrote:
> > > >
> > > >
> > > > On 08/12/2016 05:19 AM, Fam Zheng wrote:
> > > > > Previously all test cases in a category, such as check-qtest-y, are
> > > > > executed in a single long gtester command. This patch separates each
> > > > > test into its own make target to allow better parallism.
> > > > >
> >
> > That's will be great if we can specify a test to run, especially for the scenario
> > which add one use qtest case.
> >
> > For example:
> >
> >  # make check test-crypto-cipher
> >
> > then only run the tests/ test-crypto-cipher.
> >
> > Do you think it makes sense?
> 
> Or more likely:
> 
>     # make check TESTS="test-crypto-cipher test-crypto-hash ..."
> 
> Usually I just extract the gtester command line with V=1 and run it from my
> shell prompt.  Feel free to send a patch, though.
> 
Sorry, I have no patch for this, it's just my idea ;)
Appreciate it if you can realize it. 

Regards,
-Gonglei

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [Qemu-devel] [PATCH RFC] tests: Run qtest cases in parallel
  2016-09-23  9:59       ` Fam Zheng
  2016-09-24  2:37         ` Gonglei (Arei)
@ 2016-09-27 10:14         ` Daniel P. Berrange
  2016-09-28  1:31           ` Gonglei (Arei)
  1 sibling, 1 reply; 13+ messages in thread
From: Daniel P. Berrange @ 2016-09-27 10:14 UTC (permalink / raw)
  To: Fam Zheng; +Cc: Gonglei (Arei), pbonzini, John Snow, qemu-devel

On Fri, Sep 23, 2016 at 05:59:05PM +0800, Fam Zheng wrote:
> On Fri, 09/23 09:39, Gonglei (Arei) wrote:
> > 
> > Hi Fam,
> > 
> > 
> > > -----Original Message-----
> > > From: Qemu-devel
> > > [mailto:qemu-devel-bounces+arei.gonglei=huawei.com@nongnu.org] On
> > > Behalf Of Fam Zheng
> > > Sent: Friday, September 23, 2016 3:58 PM
> > > To: John Snow
> > > Cc: pbonzini@redhat.com; qemu-devel@nongnu.org
> > > Subject: Re: [Qemu-devel] [PATCH RFC] tests: Run qtest cases in parallel
> > > 
> > > On Wed, 09/21 14:24, John Snow wrote:
> > > >
> > > >
> > > > On 08/12/2016 05:19 AM, Fam Zheng wrote:
> > > > > Previously all test cases in a category, such as check-qtest-y, are
> > > > > executed in a single long gtester command. This patch separates each
> > > > > test into its own make target to allow better parallism.
> > > > >
> > 
> > That's will be great if we can specify a test to run, especially for the scenario
> > which add one use qtest case.
> > 
> > For example: 
> > 
> >  # make check test-crypto-cipher
> > 
> > then only run the tests/ test-crypto-cipher. 
> > 
> > Do you think it makes sense?
> 
> Or more likely:
> 
>     # make check TESTS="test-crypto-cipher test-crypto-hash ..."
> 
> Usually I just extract the gtester command line with V=1 and run it from my
> shell prompt.  Feel free to send a patch, though.

Shouldn't even need todo that in most cases - I tend to just do

  make tests/test-crypto-cipher && ./tess/test-crypto-cipher

If there are tests which rely on some environment set by the Makefile,
then really they should be fixed to have sensible defaults so that they
can be directly executed.

Regards,
Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [Qemu-devel] [PATCH RFC] tests: Run qtest cases in parallel
  2016-09-23  7:58   ` Fam Zheng
  2016-09-23  9:39     ` Gonglei (Arei)
@ 2016-09-27 10:17     ` Daniel P. Berrange
  2016-09-27 10:58       ` Fam Zheng
  1 sibling, 1 reply; 13+ messages in thread
From: Daniel P. Berrange @ 2016-09-27 10:17 UTC (permalink / raw)
  To: Fam Zheng; +Cc: John Snow, pbonzini, qemu-devel

On Fri, Sep 23, 2016 at 03:58:07PM +0800, Fam Zheng wrote:
> On Wed, 09/21 14:24, John Snow wrote:
> > 
> > 
> > On 08/12/2016 05:19 AM, Fam Zheng wrote:
> > > Previously all test cases in a category, such as check-qtest-y, are
> > > executed in a single long gtester command. This patch separates each
> > > test into its own make target to allow better parallism.
> > > 
> > > Signed-off-by: Fam Zheng <famz@redhat.com>
> > > ---
> > > 
> > > This saves 50% of the time "make check takes" compared to on master
> > > (I use -j8). RFC because I'm not sure if the new gcov usage is correct
> > > with the now much higher level of parallism compared to before.
> > > ---
> > >  tests/Makefile.include | 34 ++++++++++++++++++----------------
> > >  1 file changed, 18 insertions(+), 16 deletions(-)
> > > 
> > > diff --git a/tests/Makefile.include b/tests/Makefile.include
> > > index 14be491..9bf0326 100644
> > > --- a/tests/Makefile.include
> > > +++ b/tests/Makefile.include
> > > @@ -691,27 +691,29 @@ GCOV_OPTIONS = -n $(if $(V),-f,)
> > >  # gtester tests, possibly with verbose output
> > > 
> > >  .PHONY: $(patsubst %, check-qtest-%, $(QTEST_TARGETS))
> > > -$(patsubst %, check-qtest-%, $(QTEST_TARGETS)): check-qtest-%: $(check-qtest-y)
> > > +
> > > +qtest-run-%: tests/%
> > >  	$(if $(CONFIG_GCOV),@rm -f *.gcda */*.gcda */*/*.gcda */*/*/*.gcda,)
> > > -	$(call quiet-command,QTEST_QEMU_BINARY=$*-softmmu/qemu-system-$* \
> > > +	$(call quiet-command,\
> > > +		$(if $(QTEST_TARGET), \
> > > +			QTEST_QEMU_BINARY=$(QTEST_TARGET)-softmmu/qemu-system-$(QTEST_TARGET)) \
> > >  		QTEST_QEMU_IMG=qemu-img$(EXESUF) \
> > >  		MALLOC_PERTURB_=$${MALLOC_PERTURB_:-$$((RANDOM % 255 + 1))} \
> > > -		gtester $(GTESTER_OPTIONS) -m=$(SPEED) $(check-qtest-$*-y) $(check-qtest-generic-y),"GTESTER $@")
> > > -	$(if $(CONFIG_GCOV),@for f in $(gcov-files-$*-y) $(gcov-files-generic-y); do \
> > > -	  echo Gcov report for $$f:;\
> > > -	  $(GCOV) $(GCOV_OPTIONS) $$f -o `dirname $$f`; \
> > > -	done,)
> > > +		gtester $< $(GTESTER_OPTIONS) -m=$(SPEED),"GTESTER $<")
> > > +	$(if $(CONFIG_GCOV), @echo Gcov report for $<:;\
> > > +	  $(GCOV) $(GCOV_OPTIONS) $< -o `dirname $<`; \
> > > +	)
> > > +
> > > +$(foreach target, $(QTEST_TARGETS), \
> > > +	$(eval check-qtest-$(target): QTEST_TARGET := $(target)) \
> > > +	$(eval check-qtest-$(target): $(patsubst tests/%, qtest-run-%, \
> > > +                                             $(check-qtest-y) \
> > > +                                             $(check-qtest-$(target)-y) \
> > > +                                             $(check-qtest-generic-y))) \
> > > +)
> > > 
> > >  .PHONY: $(patsubst %, check-%, $(check-unit-y))
> > > -$(patsubst %, check-%, $(check-unit-y)): check-%: %
> > > -	$(if $(CONFIG_GCOV),@rm -f *.gcda */*.gcda */*/*.gcda */*/*/*.gcda,)
> > > -	$(call quiet-command, \
> > > -		MALLOC_PERTURB_=$${MALLOC_PERTURB_:-$$((RANDOM % 255 + 1))} \
> > > -		gtester $(GTESTER_OPTIONS) -m=$(SPEED) $*,"GTESTER $*")
> > > -	$(if $(CONFIG_GCOV),@for f in $(gcov-files-$(subst tests/,,$*)-y) $(gcov-files-generic-y); do \
> > > -	  echo Gcov report for $$f:;\
> > > -	  $(GCOV) $(GCOV_OPTIONS) $$f -o `dirname $$f`; \
> > > -	done,)
> > > +$(patsubst %, check-%, $(check-unit-y)): check-tests/%: qtest-run-%
> > > 
> > >  # gtester tests with XML output
> > > 
> > > 
> > 
> > I can't vouch for gcov either, but:
> 
> Too bad that this seems to be too big a hammer that breaks the way gcov was
> used: 1) the "rm *.gcda" command now runs in each test, so it's harder to
> get an overall coverage report; 2) there is a risk that the parallism may
> corrupt those files. :(

Almost no one will ever build with gcov support, so how about just
making the "normal" case run in parallel and add a special target
for running under gcov which serializes.

Regards,
Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [Qemu-devel] [PATCH RFC] tests: Run qtest cases in parallel
  2016-09-27 10:17     ` Daniel P. Berrange
@ 2016-09-27 10:58       ` Fam Zheng
  0 siblings, 0 replies; 13+ messages in thread
From: Fam Zheng @ 2016-09-27 10:58 UTC (permalink / raw)
  To: Daniel P. Berrange; +Cc: John Snow, pbonzini, qemu-devel

On Tue, 09/27 11:17, Daniel P. Berrange wrote:
> > Too bad that this seems to be too big a hammer that breaks the way gcov was
> > used: 1) the "rm *.gcda" command now runs in each test, so it's harder to
> > get an overall coverage report; 2) there is a risk that the parallism may
> > corrupt those files. :(
> 
> Almost no one will ever build with gcov support, so how about just
> making the "normal" case run in parallel and add a special target
> for running under gcov which serializes.

This sounds good to me. I'll take a look. Thanks.

Fam

> 
> Regards,
> Daniel
> -- 
> |: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
> |: http://libvirt.org              -o-             http://virt-manager.org :|
> |: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
> |: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [Qemu-devel] [PATCH RFC] tests: Run qtest cases in parallel
  2016-09-27 10:14         ` Daniel P. Berrange
@ 2016-09-28  1:31           ` Gonglei (Arei)
  2016-09-28  1:45             ` Fam Zheng
  0 siblings, 1 reply; 13+ messages in thread
From: Gonglei (Arei) @ 2016-09-28  1:31 UTC (permalink / raw)
  To: Daniel P. Berrange, Fam Zheng; +Cc: pbonzini, John Snow, qemu-devel, Wubin (H)


> -----Original Message-----
> From: Daniel P. Berrange [mailto:berrange@redhat.com]
> Sent: Tuesday, September 27, 2016 6:15 PM
> To: Fam Zheng
> Cc: Gonglei (Arei); pbonzini@redhat.com; John Snow; qemu-devel@nongnu.org
> Subject: Re: [Qemu-devel] [PATCH RFC] tests: Run qtest cases in parallel
> 
> On Fri, Sep 23, 2016 at 05:59:05PM +0800, Fam Zheng wrote:
> > On Fri, 09/23 09:39, Gonglei (Arei) wrote:
> > >
> > > Hi Fam,
> > >
> > >
> > > > -----Original Message-----
> > > > From: Qemu-devel
> > > > [mailto:qemu-devel-bounces+arei.gonglei=huawei.com@nongnu.org] On
> > > > Behalf Of Fam Zheng
> > > > Sent: Friday, September 23, 2016 3:58 PM
> > > > To: John Snow
> > > > Cc: pbonzini@redhat.com; qemu-devel@nongnu.org
> > > > Subject: Re: [Qemu-devel] [PATCH RFC] tests: Run qtest cases in parallel
> > > >
> > > > On Wed, 09/21 14:24, John Snow wrote:
> > > > >
> > > > >
> > > > > On 08/12/2016 05:19 AM, Fam Zheng wrote:
> > > > > > Previously all test cases in a category, such as check-qtest-y, are
> > > > > > executed in a single long gtester command. This patch separates each
> > > > > > test into its own make target to allow better parallism.
> > > > > >
> > >
> > > That's will be great if we can specify a test to run, especially for the
> scenario
> > > which add one use qtest case.
> > >
> > > For example:
> > >
> > >  # make check test-crypto-cipher
> > >
> > > then only run the tests/ test-crypto-cipher.
> > >
> > > Do you think it makes sense?
> >
> > Or more likely:
> >
> >     # make check TESTS="test-crypto-cipher test-crypto-hash ..."
> >
> > Usually I just extract the gtester command line with V=1 and run it from my
> > shell prompt.  Feel free to send a patch, though.
> 
> Shouldn't even need todo that in most cases - I tend to just do
> 
>   make tests/test-crypto-cipher && ./tess/test-crypto-cipher
> 
> If there are tests which rely on some environment set by the Makefile,
> then really they should be fixed to have sensible defaults so that they
> can be directly executed.
> 
Thanks for your reminding! It works fine.

# ./tests/test-crypto-cipher 
/crypto/cipher/aes-ecb-128: OK
/crypto/cipher/aes-ecb-192: OK
/crypto/cipher/aes-ecb-256: OK
/crypto/cipher/aes-cbc-128: OK
/crypto/cipher/aes-cbc-192: OK
/crypto/cipher/aes-cbc-256: OK
/crypto/cipher/des-rfb-ecb-56: OK
/crypto/cipher/cast5-128: OK
/crypto/cipher/serpent-128: OK
/crypto/cipher/serpent-192: OK
/crypto/cipher/serpent-256a: OK
/crypto/cipher/serpent-256b: OK
/crypto/cipher/twofish-128: OK
/crypto/cipher/twofish-256: OK
/crypto/cipher/aes-xts-128-1: OK
/crypto/cipher/aes-xts-128-2: OK
/crypto/cipher/aes-xts-128-3: OK
/crypto/cipher/aes-xts-128-4: OK
/crypto/cipher/cast5-xts-128: OK
/crypto/cipher/aes-ctr-128: OK
/crypto/cipher/aes-ctr-192: OK
/crypto/cipher/aes-ctr-256: OK
/crypto/cipher/null-iv: OK
/crypto/cipher/short-plaintext: OK

# ./tests/virtio-net-test
**
ERROR:tests/libqtest.c:561:qtest_get_arch: assertion failed: (qemu != NULL)
Aborted (core dumped)

# ./tests/virtio-blk-test
**
ERROR:tests/libqtest.c:561:qtest_get_arch: assertion failed: (qemu != NULL)
Aborted (core dumped)

But they work after I set the environment variable to specify architecture:
 
# QTEST_QEMU_BINARY=x86_64-softmmu/qemu-system-x86_64 ./tests/virtio-net-test
/x86_64/virtio/net/pci/basic: OK
/x86_64/virtio/net/pci/rx_stop_cont: OK
/x86_64/virtio/net/pci/hotplug: OK

# QTEST_QEMU_BINARY=x86_64-softmmu/qemu-system-x86_64 ./tests/virtio-blk-test
/x86_64/virtio/blk/pci/basic: OK
/x86_64/virtio/blk/pci/indirect: OK
/x86_64/virtio/blk/pci/config: OK
/x86_64/virtio/blk/pci/msix: OK
/x86_64/virtio/blk/pci/idx: OK
/x86_64/virtio/blk/pci/hotplug: OK

So, Maybe we should add check if the environment relied on is set
before executing specific operations in this kind of tests. Right?

Regards,
-Gonglei

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [Qemu-devel] [PATCH RFC] tests: Run qtest cases in parallel
  2016-09-28  1:31           ` Gonglei (Arei)
@ 2016-09-28  1:45             ` Fam Zheng
  2016-09-28  1:54               ` Gonglei (Arei)
  0 siblings, 1 reply; 13+ messages in thread
From: Fam Zheng @ 2016-09-28  1:45 UTC (permalink / raw)
  To: Gonglei (Arei)
  Cc: Daniel P. Berrange, pbonzini, John Snow, qemu-devel, Wubin (H)

On Wed, 09/28 01:31, Gonglei (Arei) wrote:
> # ./tests/virtio-net-test
> **
> ERROR:tests/libqtest.c:561:qtest_get_arch: assertion failed: (qemu != NULL)
> Aborted (core dumped)
> 
> # ./tests/virtio-blk-test
> **
> ERROR:tests/libqtest.c:561:qtest_get_arch: assertion failed: (qemu != NULL)
> Aborted (core dumped)
> 
> But they work after I set the environment variable to specify architecture:
>  
> # QTEST_QEMU_BINARY=x86_64-softmmu/qemu-system-x86_64 ./tests/virtio-net-test
> /x86_64/virtio/net/pci/basic: OK
> /x86_64/virtio/net/pci/rx_stop_cont: OK
> /x86_64/virtio/net/pci/hotplug: OK
> 
> # QTEST_QEMU_BINARY=x86_64-softmmu/qemu-system-x86_64 ./tests/virtio-blk-test
> /x86_64/virtio/blk/pci/basic: OK
> /x86_64/virtio/blk/pci/indirect: OK
> /x86_64/virtio/blk/pci/config: OK
> /x86_64/virtio/blk/pci/msix: OK
> /x86_64/virtio/blk/pci/idx: OK
> /x86_64/virtio/blk/pci/hotplug: OK
> 
> So, Maybe we should add check if the environment relied on is set
> before executing specific operations in this kind of tests. Right?

Or make a guess based on $(realpath $0]) (in this case, print the found path to
avoid testing against wrong binary by mistake).

Fam

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [Qemu-devel] [PATCH RFC] tests: Run qtest cases in parallel
  2016-09-28  1:45             ` Fam Zheng
@ 2016-09-28  1:54               ` Gonglei (Arei)
  2016-09-28  2:10                 ` Fam Zheng
  0 siblings, 1 reply; 13+ messages in thread
From: Gonglei (Arei) @ 2016-09-28  1:54 UTC (permalink / raw)
  To: Fam Zheng; +Cc: Daniel P. Berrange, pbonzini, John Snow, qemu-devel, Wubin (H)


> -----Original Message-----
> From: Fam Zheng [mailto:famz@redhat.com]
> Sent: Wednesday, September 28, 2016 9:45 AM
> To: Gonglei (Arei)
> Cc: Daniel P. Berrange; pbonzini@redhat.com; John Snow;
> qemu-devel@nongnu.org; Wubin (H)
> Subject: Re: [Qemu-devel] [PATCH RFC] tests: Run qtest cases in parallel
> 
> On Wed, 09/28 01:31, Gonglei (Arei) wrote:
> > # ./tests/virtio-net-test
> > **
> > ERROR:tests/libqtest.c:561:qtest_get_arch: assertion failed: (qemu != NULL)
> > Aborted (core dumped)
> >
> > # ./tests/virtio-blk-test
> > **
> > ERROR:tests/libqtest.c:561:qtest_get_arch: assertion failed: (qemu != NULL)
> > Aborted (core dumped)
> >
> > But they work after I set the environment variable to specify architecture:
> >
> > #
> QTEST_QEMU_BINARY=x86_64-softmmu/qemu-system-x86_64 ./tests/virtio-n
> et-test
> > /x86_64/virtio/net/pci/basic: OK
> > /x86_64/virtio/net/pci/rx_stop_cont: OK
> > /x86_64/virtio/net/pci/hotplug: OK
> >
> > #
> QTEST_QEMU_BINARY=x86_64-softmmu/qemu-system-x86_64 ./tests/virtio-b
> lk-test
> > /x86_64/virtio/blk/pci/basic: OK
> > /x86_64/virtio/blk/pci/indirect: OK
> > /x86_64/virtio/blk/pci/config: OK
> > /x86_64/virtio/blk/pci/msix: OK
> > /x86_64/virtio/blk/pci/idx: OK
> > /x86_64/virtio/blk/pci/hotplug: OK
> >
> > So, Maybe we should add check if the environment relied on is set
> > before executing specific operations in this kind of tests. Right?
> 
> Or make a guess based on $(realpath $0]) (in this case, print the found path to
> avoid testing against wrong binary by mistake).
> 
What do you mean about the realpath? Can we use it to set the environment variable?

Regards,
-Gonglei

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [Qemu-devel] [PATCH RFC] tests: Run qtest cases in parallel
  2016-09-28  1:54               ` Gonglei (Arei)
@ 2016-09-28  2:10                 ` Fam Zheng
  0 siblings, 0 replies; 13+ messages in thread
From: Fam Zheng @ 2016-09-28  2:10 UTC (permalink / raw)
  To: Gonglei (Arei)
  Cc: Daniel P. Berrange, pbonzini, John Snow, qemu-devel, Wubin (H)

On Wed, 09/28 01:54, Gonglei (Arei) wrote:
> What do you mean about the realpath? Can we use it to set the environment variable?

Basically just guess where QTEST_QEMU_BINARY is based on argv[0].

Fam

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2016-09-28  2:10 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-08-12  9:19 [Qemu-devel] [PATCH RFC] tests: Run qtest cases in parallel Fam Zheng
2016-09-21 18:24 ` John Snow
2016-09-23  7:58   ` Fam Zheng
2016-09-23  9:39     ` Gonglei (Arei)
2016-09-23  9:59       ` Fam Zheng
2016-09-24  2:37         ` Gonglei (Arei)
2016-09-27 10:14         ` Daniel P. Berrange
2016-09-28  1:31           ` Gonglei (Arei)
2016-09-28  1:45             ` Fam Zheng
2016-09-28  1:54               ` Gonglei (Arei)
2016-09-28  2:10                 ` Fam Zheng
2016-09-27 10:17     ` Daniel P. Berrange
2016-09-27 10:58       ` Fam Zheng

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.