[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.