qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [RFC PATCH] Makefile: Enable synchronized parallel outp


From: Paolo Bonzini
Subject: Re: [Qemu-devel] [RFC PATCH] Makefile: Enable synchronized parallel output when possible
Date: Mon, 25 Jun 2018 18:12:38 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.7.0

On 22/06/2018 05:22, Michael S. Tsirkin wrote:
> On Thu, Jun 21, 2018 at 11:20:35PM -0300, Philippe Mathieu-Daudé wrote:
>> The '--output-sync' option is available since GNU make 4.0.
>>
>>   5.4.1 Output During Parallel Execution
>>
>>   When running several recipes in parallel the output from each
>>   recipe appears as soon as it is generated, with the result that
>>   messages from different recipes may be interspersed, sometimes
>>   even appearing on the same line. This can make reading the output
>>   very difficult.
>>
>>   To avoid this you can use the ‘--output-sync’ (‘-O’) option. This
>>   option instructs make to save the output from the commands it
>>   invokes and print it all once the commands are completed.
>>   Additionally, if there are multiple recursive make invocations
>>   running in parallel, they will communicate so that only one of
>>   them is generating output at a time.
>>
>>   There are four levels of granularity when synchronizing output,
>>   specified by giving an argument to the option (e.g., ‘-Oline’
>>   or ‘--output-sync=recurse’).
>>
>>     none
>>       This is the default: all output is sent directly as it is
>>       generated and no synchronization is performed.
>>
>>     line
>>       Output from each individual line of the recipe is grouped
>>       and printed as soon as that line is complete. If a recipe
>>       consists of multiple lines, they may be interspersed with
>>       lines from other recipes.
>>
>>     target
>>       Output from the entire recipe for each target is grouped and
>>       printed once the target is complete. This is the default if
>>       the --output-sync or -O option is given with no argument.
>>
>>     recurse
>>       Output from each recursive invocation of make is grouped and
>>       printed once the recursive invocation is complete.
>>
>>   Regardless of the mode chosen, the total build time will be the
>>   same. The only difference is in how the output appears.
>>
>> Signed-off-by: Philippe Mathieu-Daudé <address@hidden>
>> ---
>> Maybe 'line' is better for workstation and 'target/recurse' for
>> unattended builds.

For long-running tasks, such as Docker builds or unit tests, -Otarget
might make it harder to find out what's going on?  Maybe "-Oline" is
better overall, but before you send v2, what if the user is specifying
-O him/herself?

(Now that I've been taught, I'm adding "export GNUMAKEFLAGS=-Oline" to
my bash config file. :))

Paolo


>> doc: https://www.gnu.org/software/make/manual/html_node/Parallel-Output.html
>> ---
>>  Makefile | 4 ++++
>>  1 file changed, 4 insertions(+)
>>
>> diff --git a/Makefile b/Makefile
>> index e46f2b625a..e94c687afe 100644
>> --- a/Makefile
>> +++ b/Makefile
>> @@ -367,6 +367,10 @@ DOCS=
>>  endif
>>  
>>  SUBDIR_MAKEFLAGS=$(if $(V),,--no-print-directory --quiet) 
>> BUILD_DIR=$(BUILD_DIR)
>> +ifeq ($(shell test $(firstword $(subst ., ,$(MAKE_VERSION))) -ge 4; echo 
>> $$?),0)
>> +SUBDIR_MAKEFLAGS+=--output-sync=target
>> +endif
>> +
>>  SUBDIR_DEVICES_MAK=$(patsubst %, %/config-devices.mak, $(TARGET_LIST))
>>  SUBDIR_DEVICES_MAK_DEP=$(patsubst %, %-config-devices.mak.d, $(TARGET_LIST))
> 
> I'd probably just use -O. If they change the default it will probably be
> to a better one.




reply via email to

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