qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH for-2.8?] rules.mak: speedup save-vars load-vars


From: Stefan Hajnoczi
Subject: Re: [Qemu-devel] [PATCH for-2.8?] rules.mak: speedup save-vars load-vars
Date: Mon, 7 Nov 2016 12:49:21 +0000
User-agent: Mutt/1.7.1 (2016-10-04)

On Wed, Nov 02, 2016 at 05:24:01PM +0100, Paolo Bonzini wrote:
> Unnesting variables spends a lot of time parsing and executing foreach
> and if functions.  Because actually very few variables have to be
> saved and restored, a good strategy is to remember what has to be done
> in load-vars, and only iterate the right variables in load-vars.
> For save-vars, unroll the foreach loop to provide another small
> improvement.
> 
> This speeds up a "noop" build from around 15.5 seconds on my laptop
> to 11.7 (25% roughly).
> 
> Signed-off-by: Paolo Bonzini <address@hidden>
> ---
>       I'm wondering if this would be acceptable for 2.8.
>       I also have sent patches to GNU make that save another
>       20%, down to 9.8 seconds.

Sorry but I'd like to stick to the soft freeze policy.  This patch is a
nice improvement but it's not a bug fix.  Let's merge it for 2.9.

>  rules.mak | 22 ++++++++++------------
>  1 file changed, 10 insertions(+), 12 deletions(-)
> 
> diff --git a/rules.mak b/rules.mak
> index 0333ae3..c0777d7 100644
> --- a/rules.mak
> +++ b/rules.mak
> @@ -192,15 +192,15 @@ clean: clean-timestamp
>  # save-vars
>  # Usage: $(call save-vars, vars)
>  # Save each variable $v in $vars as save-vars-$v, save their object's
> -# variables, then clear $v.
> +# variables, then clear $v.  saved-vars-$v caches the list of variables
> +# that were saved for the objects, in order to speedup load-vars.
>  define save-vars
>      $(foreach v,$1,
>          $(eval save-vars-$v := $(value $v))
> -        $(foreach o,$($v),
> -            $(foreach k,cflags libs objs,
> -                $(if $($o-$k),
> -                    $(eval save-vars-$o-$k := $($o-$k))
> -                    $(eval $o-$k := ))))
> +        $(eval saved-vars-$v := $(foreach o,$($v), \
> +            $(if $($o-cflags), $o-cflags $(eval save-vars-$o-cflags := 
> $($o-cflags))$(eval $o-cflags := )) \
> +            $(if $($o-libs), $o-libs $(eval save-vars-$o-libs := 
> $($o-libs))$(eval $o-libs := )) \
> +            $(if $($o-objs), $o-objs $(eval save-vars-$o-objs := 
> $($o-objs))$(eval $o-objs := ))))
>          $(eval $v := ))
>  endef
>  
> @@ -213,12 +213,10 @@ define load-vars
>      $(eval $2-new-value := $(value $2))
>      $(foreach v,$1,
>          $(eval $v := $(value save-vars-$v))
> -        $(foreach o,$($v),
> -            $(foreach k,cflags libs objs,
> -                $(if $(save-vars-$o-$k),
> -                    $(eval $o-$k := $(save-vars-$o-$k))
> -                    $(eval save-vars-$o-$k := ))))
> -        $(eval save-vars-$v := ))
> +        $(foreach o,$(saved-vars-$v),
> +            $(eval $o := $(save-vars-$o)) $(eval save-vars-$o := ))
> +        $(eval save-vars-$v := )
> +        $(eval saved-vars-$v := ))
>      $(eval $2 := $(value $2) $($2-new-value))
>  endef
>  
> -- 
> 2.7.4
> 
> 

Attachment: signature.asc
Description: PGP signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]