Re: Noisy make -j output

From: Kris Kennaway <kris_at_FreeBSD.org>
Date: Sun, 25 Jan 2009 23:29:42 +0000
David O'Brien wrote:
> On Sun, Jan 25, 2009 at 10:27:51PM +0000, Kris Kennaway wrote:
>> David O'Brien wrote:
>>> On Sat, Jan 24, 2009 at 04:01:04PM +0000, Kris Kennaway wrote:
>>>> After a fresh buildworld on a system last built in November:
>>>> hydra2# make buildworld -j8 -s
>>>> --- upgrade_checks ---
>>>> --- make ---
>>>> [...]
>>>>
>>>> Why the extra-spammy output now?
>>> It's the intended operation of pmake/bmake from 4.4BSD.  One reason I
>>> believe we haven't trusted 'make -j' in the past is it can be very hard
>>> to unwind the output when there is a build error.  It turns out this is
>>> because dg in the past neutered them (presumably he didn't understand
>>> their value).  After having used a bmake with the stock behavior I've
>>> seen how valuable the markers are.
>> I consider the change to be exposing debug-level information that is too
>> noisy to be on by default.
> 
> What is "debug-level" information?

As in the snippet I posted, all of the internal make targets that are 
executed are now being exposed to the user.  make buildworld -j -s is 
especially unclean.

> I really don't consider this to be "debug information" any more than the
> invocation of the compiler.  Nor the output from things like 'make obj':
>     ===> share/info (obj)
>     ===> lib (obj)
>     ===> lib/csu/amd64 (obj)
>     ===> lib/libc (obj)
>     ..snip..
> 
> 
> With the markers it is easy to write scripts that de-multiplex a build
> log, giving output roughly what a non-// run would be.  This makes it
> easy to extract errors from build logs.
> 
> 
>> Also I'm concerned that you've broken things
>> that expect 'make -s' to actually be silent.
> 
> 'make -s' : relates to commands executed, not making the output "quiet".
>>From the man page:
>     Do not echo any commands as they are executed.  Equivalent to
>     specifying `_at_' before each command line in the makefile.
> 
> If something expects 'make -s' to be minimal output it is broken and
> non-portable as its assuming '-s' does more than SUSv3 requires of it.
> 
>     -s
>     Do not write makefile command lines or touch messages (see -t) to
>     standard output before executing. This mode shall be the same as if
>     the special target .SILENT were specified without prerequisites.
> 
>     .SILENT
>     Prerequisites of this special target are targets themselves; this
>     shall cause commands associated with them not to be written to the
>     standard output before they are executed. Subsequent occurrences of
>     .SILENT shall add to the list of targets with silent commands. If no
>     prerequisites are specified, make shall behave as if the -s option
>     had been specified and no commands or touch messages associated with
>     any target shall be written to standard output.
> 
> 
> 'make -Q' (or the special target .POSIX:) can be used to quiet the
> output from 'make -j'.
> 
> To see just how silent things in our world are I tried
> '(cd /usr/src ; make -Q -s -j8 world)', which gives output such as:
>     ===> lib/libdwarf (obj,depend,all,install)
>     ===> cddl/usr.bin/ctfconvert (obj,depend,all,install)
>     ===> cddl/usr.bin/ctfmerge (obj,depend,all,install)
>     ===> games/fortune/strfile (obj,depend,all,install)
>     ===> gnu/usr.bin/gperf (obj,depend,all,install)
>     ===> gnu/usr.bin/gperf/doc (obj)
>     ===> gnu/usr.bin/gperf/doc (depend)
>     ===> gnu/usr.bin/gperf/doc (all)
>     ===> gnu/usr.bin/gperf/doc (install)
>     ===> gnu/usr.bin/groff/tmac (obj,depend,all,install)
> 
> I then configured a GENERIC and ran
> '(cd ../../GENERIC ; make -j8 -s -Q)', which gives output such as:
>     ===> aic7xxx (obj)
>     ===> aic7xxx/aicasm (obj)
>     ===> aic7xxx/ahc (obj)
>     ===> aic7xxx/ahc/ahc_eisa (obj)
>     ./aicasm: 880 instructions used
>     ./aicasm: 880 instructions used
>     ./aicasm: 880 instructions used
>     ./aicasm: 826 instructions used
>     ./aicasm: 826 instructions used
>     ./aicasm: 826 instructions used
>     ===> aic7xxx/ahc/ahc_isa (obj)
>     ===> aic7xxx/ahc/ahc_pci (obj)
>     ===> aic7xxx/ahd (obj)
> 
> which also isn't very silent.
>  
> Wouldn't this behavior of our mk files also break things that expect
> 'make -s' to be silent?

I'm thinking of custom makefiles that capture the output and 
post-process it, which will now have extra text inserted into the output 
along with the output that is expected to be there.

> Do you have a test case I could ponder?  Maybe -s should imply -Q?  But
> it looks like there is really more work to be done for -s to really be
> silent.

I think -s should either imply -Q or -Q should just go away.

Kris
Received on Sun Jan 25 2009 - 22:29:45 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:41 UTC