[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: |
Paolo Bonzini |
Subject: |
Re: [Qemu-devel] [PATCH for-2.8?] rules.mak: speedup save-vars load-vars |
Date: |
Mon, 7 Nov 2016 16:38:02 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.4.0 |
On 07/11/2016 13:49, Stefan Hajnoczi wrote:
> 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.
Fine by me, thanks!
Paolo
>> 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
>>
>>