Build summary UX
Erik Joelsson
erik.joelsson at oracle.com
Fri Aug 22 10:10:49 UTC 2014
On 2014-08-22 01:10, Martin Buchholz wrote:
> Serial execution is useful for both resource-constrained environments
> and for folks trying to profile the build itself. Serial build is
> also likely to be optimal if you are optimizing for total energy used
> rather than total wall clock time.
>
If you are in a resource-constrained environment you can easily set
either --with-jobs=1 to configure or JOBS=1 to make and get a serially
executed build. Also, if configure doesn't find a lot of memory or cpu
cores, the default number of jobs will get set to a small value, even 1
if needed.
There are tricks to profiling the build in place already. If you run
with LOG=trace on a machine with gnu time installed, you will get a
special log file containing the wall clock time for each command
executed, both in recipes and $(shell). I use this frequently when
trying things to optimize build performance.
While optimizing for energy used is an honorable goal, I believe that
wall clock time is usually of more concern to most engineers.
I cannot see how any of these arguments trumps having a build that's
running as fast as possible as the default?
/Erik
>
> On Thu, Aug 21, 2014 at 8:39 AM, Erik Joelsson
> <erik.joelsson at oracle.com <mailto:erik.joelsson at oracle.com>> wrote:
>
> Hello Aleksey,
>
> As I have tried to explain a couple of times now: The jdk8 build
> built each repository in sequence (much like the jdk7 build did).
> Because of this it made sense to add messages about which
> repository was being built and measure the time each took. The new
> jdk9 build is not repository oriented, but instead builds modules.
> To increase concurrency, I dropped the sequential, non parallel,
> execution model at the top level so there are a larger number of
> build targets being built at the same time, based on finer grained
> dependencies. What I'm trying to say here is that those
> Starting/Finished messages simply do not exist anymore.
>
> I can understand people wanting more details on what took how much
> time to build, but the timings need to make sense to be useful. If
> target A starts executing, and then the last recipe of that target
> gets to wait while all of target B gets executed, then the time
> for target A will look much longer than it actually was. Perhaps
> this information would still be useful, I doubt it, but could
> perhaps be swayed by good arguments. We would also need to figure
> out a proper granularity for grouping timings, and if it should be
> grouped by modules or by tasks.
>
> I think that verbosity at the default warn level is correct in not
> printing more than it currently does. If something was recompiled,
> you would see messages about it. I can't help but wonder why you
> need more text to say "nothing happened"? This sounds like an
> issue with not trusting the build (which I can identify with, it's
> new so is likely to be buggy). When setting LOG=info, I agree that
> there should be more status messages about which targets were
> actually considered. The step up to LOG=debug prints far too much
> to be useful in that regard. Again, we need to think about the
> granularity of the targets we would want to print info about here,
> and if it should be module or task oriented.
>
> /Erik
>
>
> On 2014-08-21 17:02, Aleksey Shipilev wrote:
>
> Hi,
>
> The recent update of jdk9/jdk9 build scripts had significantly
> deteriorated the usability of the build summary. This what was
> printed
> before:
>
> ------- 8<
> -------------------------------------------------------------
>
> Building OpenJDK for target 'default' in configuration
> 'linux-x86_64-normal-server-release'
>
> ## Starting langtools
> ## Finished langtools (build time 00:00:00)
>
> ## Starting hotspot
> ## Finished hotspot (build time 00:00:00)
>
> ## Starting corba
> ## Finished corba (build time 00:00:00)
>
> ## Starting jaxp
> ## Finished jaxp (build time 00:00:01)
>
> ## Starting jaxws
> ## Finished jaxws (build time 00:00:00)
>
> ## Starting jdk
> ## Finished jdk (build time 00:00:01)
>
> ----- Build times -------
> Start 2014-08-21 18:35:48
> End 2014-08-21 18:35:50
> 00:00:00 corba
> 00:00:00 hotspot
> 00:00:01 jaxp
> 00:00:00 jaxws
> 00:00:01 jdk
> 00:00:00 langtools
> 00:00:02 TOTAL
> -------------------------
> Finished building OpenJDK for target 'default'
>
> ------- 8<
> -------------------------------------------------------------
>
> ...and this is what's printed now:
>
> ------- 8<
> -------------------------------------------------------------
>
> Running make as '/usr/bin/make -s VERBOSE=-s LOG_LEVEL=warn -R -I
> /home/shade/trunks/mb-try/make/common -s
> SPEC=/home/shade/trunks/mb-try//build/linux-x86_64-normal-server-release/spec.gmk'
> Building OpenJDK for target 'default' in configuration
> 'linux-x86_64-normal-server-release'
>
> ----- Build times -------
> Start 2014-08-21 18:59:07
> End 2014-08-21 18:59:09
>
> 00:00:02 TOTAL
> -------------------------
>
> Finished building OpenJDK for target 'default'
>
> ------- 8<
> -------------------------------------------------------------
>
> I have no idea whether the modules of interest were actually
> built, and
> this disables me from checking whether the build system picked
> up my
> previous changes. Can we please have the
> "Starting"/"Finishing" and the
> verbose summary back?
>
> Thanks,
> -Aleksey.
>
>
>
More information about the build-dev
mailing list