RFR: 8293532: Use lighter jmod compression levels in build config

Erik Joelsson erikj at openjdk.org
Mon Sep 19 12:55:46 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 think the idea of being able to change the jmod compression is good. I'm torn about what a good default is. Maybe keeping a higher compression on release builds would make sense?  I'm not sure so would like to hear if there are more opinions on it. There is little point spending time compressing jmods on debug builds at least.

make/autoconf/jdk-options.m4 line 481:

> 479: AC_DEFUN_ONCE([JDKOPT_SETUP_JMOD_OPTIONS],
> 480: [
> 481:   AC_ARG_WITH(jmod-compress, [AS_HELP_STRING([--with-jmod-compress],

I would recommend using UTIL_ARG_WITH here instead. I would also prefer if the default was specified in configure (using the DEFAULT argument to UTIL_ARG_WITH) so that it's visible in the help output and printed in the configure log for user transparency.

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

PR: https://git.openjdk.org/jdk/pull/10214



More information about the build-dev mailing list