RFR: 8298920: Improve microbenchmark build times

Daniel Jeliński djelinski at openjdk.org
Tue Aug 20 15:09:49 UTC 2024


On Tue, 20 Aug 2024 14:51:03 GMT, Jan Lahoda <jlahoda at openjdk.org> wrote:

>> also interesting, but probably preexisting, and might be platform-specific (tested on Cygwin):
>> - compile benchmarks with `make test TEST=jaxp:tier1`
>> - edit `test/micro/org/openjdk/bench/javax/crypto/full/AESGCMBench.java`
>> - touch `test/micro/org/openjdk/bench/javax/crypto/full/BenchBase.java`
>> - compile again with `make test TEST=jaxp:tier1` - fails - cannot find CryptoBase
>> - touch `test/micro/org/openjdk/bench/javax/crypto/full/CryptoBase.java`
>> - run the modified benchmark with `make test TEST=micro:small.AESGCMBench` - succeeds, but uses the old AESGCMBench.class file
>> 
>> if you touch all 3 files at once (AESGCMBench, BenchBase, CryptoBase) and then make, the correct (new) file is used.
>> 
>> (I changed 128 to 129 in [this line](https://github.com/openjdk/jdk/blob/b9d49dcef22ab81a087d890bbac0329a5244a2ef/test/micro/org/openjdk/bench/javax/crypto/full/AESGCMBench.java#L45). With that change the benchmark throws an exception, so it's easy to check if the file was recompiled or not)
>
> @djelinski (and others), thanks for finding the problem, and I apologize for nor figuring this out myself. The problem is that when compiling (Java) named modules, if javac needs to read something from a classfile, it will (also) look into the output directory (besides system classes, etc.) So, the incremental build works, because any class that is necessary, but its compilation has been skipped, is load from output directory.
> 
> That is not the case when compiling code inside the unnamed module - javac will not, by itself, look into the output directory for classfiles. And the microbenchmarks are in the unnnamed module. So, when we skip compilation of e.g. `BenchBase`, there's no place where javac could read it from. The traditional way to solve this issue was to put the output directory to the classpath. I have an update for this patch that adds the output directory to the classpath, running tests on it now.
> 
> Sorry for not realizing/finding this myself.

@lahodaj no apologies necessary! I very much appreciate the effort you put into improving the build system. Thanks for making it better!

-------------

PR Comment: https://git.openjdk.org/jdk/pull/20616#issuecomment-2299092652


More information about the build-dev mailing list