RFR: JDK-8136385: Various build speed improvements for windows
Magnus Ihse Bursie
magnus.ihse.bursie at oracle.com
Mon Sep 21 12:20:36 UTC 2015
On 2015-09-21 14:19, Magnus Ihse Bursie wrote:
> Inte för att stressa dig eller så, men du glömmer inte bort den här
> va? Den är en prereq för att kunna få in Tonga, och jag håller på och
> knyter ihop Tonga-säcken i övrigt.
I apologize for this. It was supposed to be a private message to Erik.
/Magnus
>
> /Magnus
>
> On 2015-09-16 11:37, Magnus Ihse Bursie wrote:
>> On 2015-09-11 16:46, Erik Joelsson wrote:
>>> Hello,
>>>
>>> In the build-infra project, I have made various minor build speed
>>> improvements for Windows. These mostly affect incremental build
>>> performance, but in certain cases normal builds are also greatly
>>> affected. I find these worth committing to JDK 9 separately.
>>>
>>> List of improvements:
>>>
>>> * Rewrote DependOnVariable to use "-include" instead of $(shell
>>> $(CAT) ...) to read the old variable value from the last make
>>> invocation. This has a pretty big impact on incremental build
>>> performance on Windows. Also started using the file function in make
>>> when available (in make 4.0) instead of $(shell $(PRINTF) ...) when
>>> writing these files.
>>>
>>> * Implemented ListPathsSafely using the file function when
>>> available. Since we require make 4.0 in cygwin, this will usually be
>>> the case when it matters.
>>>
>>> * Reduced the number of shell execution in the compiler and link
>>> recipes by joining them together with "; \". When compiling a lot of
>>> native code, this tends to get quite expensive.
>>>
>>> Bug: https://bugs.openjdk.java.net/browse/JDK-8136385
>>> Webrev: http://cr.openjdk.java.net/~erikj/8136385/webrev.01/
>>
>> As a general comment, I've experimented a bit with using .ONESHELL,
>> which will automatically concatenate separate lines in a recipe and
>> execute them by a single shell. When it works, it improves
>> performance significantly, especially in Windows. Having it enabled
>> all over the board would also let us avoid those "&& \" constructs.
>>
>> However, a lot of recipes needs to be updated to work properly with
>> .ONESHELL. Also, it was also introduced in GNU Make 3.82 so we would
>> need to bump our lowest supported platform number. Nevertheless, I
>> think it is the proper way forward, but it will take some time. So
>> changes such as this will be needed in the meantime.
>>
>> I have a few questions:
>>
>> In JavaCompilation.gmk, you replace $1_GREP_INCLUDE_OUTPUT := with
>> $1_GREP_INCLUDE_OUTPUT =. Any specific reason to drop the : or just a
>> typo? (And so also for $1_GREP_EXCLUDE_OUTPUT)
>>
>> The ListPathsSafely function is really horrible and hard to read. :-/
>> (I'm not blaming you; the version using "file" is excellent). I have
>> a hard time figuring out that the legacy version (without "file") is
>> still correct. Maybe we should have a test for it?
>>
>> The indentation on DependOnVariableHelper looks weird. It might be
>> the patch but I'm not sure.
>>
>> In NativeCompilation, I'm trying to figure out how the "ifneq
>> ($$($1_$2_DEP),)" is supposed to work. This is old code and I
>> wouldn't have reacted to it if it were not for the fact that you
>> removed this checked for the microsoft toolchain path. As I can see,
>> the $1_$2_DEP variable will be empty for .s files. But if we're
>> compiling .s files in solstudio, we'll still end up calling
>> "$$($1_$2_COMP) $$($1_$2_FLAGS) $$($1_$2_DEP_FLAG) $$($1_$2_DEP)
>> ...". How could that possibly work? And what happens for the
>> microsoft case with your patch? Now we're going to do the "$(SED)
>> $(DEPENDENCY_TARGET_SED_PATTERN) $$($1_$2_DEP) >
>> $$($1_$2_DEP_TARGETS)" operation, which we previously didn't do. Do
>> we actually compile any .s files? I can't understand how that would
>> work. *checking* No, we don't. In the jdk project, there's just a
>> single .s file
>> (./jdk/src/java.desktop/unix/native/libawt/awt/medialib/mlib_v_ImageCopy_blk.s)
>> and it's excluded from compilation. On the other hand, there *are* .s
>> files in the Hotspot project which we will need to be able to handle
>> at some point. Urgh. Messy. You'll have to decide if you want to
>> clean this up.
>>
>> /Magnus
>>
>>>
>>> /Erik
>>
>
More information about the build-dev
mailing list