RFR: 8293532: Use lighter jmod compression levels in build config
Magnus Ihse Bursie
ihse at openjdk.org
Mon Sep 19 13:08:00 UTC 2022
On Thu, 8 Sep 2022 08:08:54 GMT, Aleksey Shipilev <shade at openjdk.org> wrote:
> As follow-up to [JDK-8293499](https://bugs.openjdk.org/browse/JDK-8293499), JDK build can stick to lighter jmod compression levels to gain build performance.
>
>
> # ----- Baseline
> $ time CONF=linux-x86_64-server-release make clean-images images
> real 0m10.762s
> user 1m5.157s
> sys 0m12.370s
>
> $ du -sk build/linux-x86_64-server-release/images/jdk/jmods/
> 81480 build/linux-x86_64-server-release/images/jdk/jmods/
>
> $ time CONF=linux-x86_64-server-release make clean-images images
> real 0m9.574s
> user 1m2.644s
> sys 0m12.143s
>
> $ du -sk build/linux-x86_64-server-release/images/jdk/jmods/
> 85744 build/linux-x86_64-server-release/images/jdk/jmods/
>
>
> This gets even more substantial if JVM is configured with `--with-native-debug-symbols=internal`, in which case `java.base` includes a much larger `libjvm.so`:
>
>
> # Baseline
> $ time CONF=linux-x86_64-server-release make clean-images images
> real 0m36.617s
> user 1m30.216s
> sys 0m11.692s
>
> $ du -sk build/linux-x86_64-server-release/images/jdk/jmods/
> 295428 build/linux-x86_64-server-release/images/jdk/jmods/
>
> # Patched
> $ time CONF=linux-x86_64-server-release make clean-images images
> real 0m22.183s
> user 1m13.841s
> sys 0m11.657s
>
> $ du -sk build/linux-x86_64-server-release/images/jdk/jmods/
> 316856 build/linux-x86_64-server-release/images/jdk/jmods/
>
>
> Users can use `--with-jmod-compress=zip-6` to get the original JMOD compression level back. Or, they can give up on compression altogether using `--with-jmod-compress=zip-0`, and then reap even more time benefits:
>
>
> $ time CONF=linux-x86_64-server-release make clean-images images
> real 0m6.411s
> user 0m56.145s
> sys 0m12.278s
>
> $ du -sk build/linux-x86_64-server-release/images/jdk/jmods/
> 183752 build/linux-x86_64-server-release/images/jdk/jmods/
I fully agree with Erik. The idea is good, but what is a suitable default? The patch, as it stands, requires all distributors to update their build scripts to get the same output as they did before the patch. So if we set the default to 6 instead (iiuc), we will get the same default behavior, but we can get a speedup by passing an argument to configure.
Normally, my stance would be that configure with few arguments should setup a good developer experience, and that CI systems can afford to add extra flags. In principle I think that should apply here too, but I'm slightly more worried that we might not be able to reach out to everyone affected.
Also, if we do end up keeping the default as currently suggested in this PR, we need at least to update the jib-profiles.conf file.
-------------
PR: https://git.openjdk.org/jdk/pull/10214
More information about the build-dev
mailing list