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
<[email protected] <mailto:[email protected]>> 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.