Compression acceleration for Java

Viswanathan, Sandhya sandhya.viswanathan at intel.com
Tue Mar 10 18:39:15 UTC 2015


Yes, it will be nice if the OpenJDK and Oracle builds for Linux/Solaris used the system rather than 
the bundled zlib. In which case, there will be no need for JVM command line option. Also the HW/SW 
compression accelerators can then be used easily with Java. Is it possible to get this feature in JDK9?

Thanks,
Sandhya

-----Original Message-----
From: Alan Bateman [mailto:Alan.Bateman at oracle.com] 
Sent: Saturday, March 07, 2015 1:32 AM
To: Viswanathan, Sandhya; core-libs-dev at openjdk.java.net
Subject: Re: Compression acceleration for Java

On 07/03/2015 01:19, Viswanathan, Sandhya wrote:
> Hi All,
>
> This is a request for support in JVM to use system zlib or alternative implementations of zlib.
>
> Compression is heavily used in Java based big data, genomics and middleware applications. There are many products in market today which help in compression performance either through software or hardware acceleration. Intel has faster compression libraries as part of IPP and also there are hardware compression accelerator products from Intel. Both of these products are available in the market today and support the zlib interface as an API. Support in the JVM to use system zlib on a JVM command line option would make these acceleration capabilities available to Linux java users through java.util.zip.
> The JVM could support this on an option UseSystemZlib which can be set to false by default. When the option is set to true on command line by the user, the load_zip_library() function in classLoader.cpp can load libszip.so instead of libzip.so. Also the JVM can set the java.util.zip.UseSystemZlib property accordingly.
>
> The JDK would need to include two libraries for zip in jre/lib/amd64: libzip.so and libszip.so. The libzip.so will be built as before with statically linking system zlib with it and libszip.so will be built without statically linking system zlib with it. Also the java.lang.System.initializeSystemClass will load libzip.so or libszip.so based on the java.util.zip.UseSystemZlib property.
>
> The users can then use system zlib by including the -XX:+UseSystemZlib option on the command line and compression accelerators by setting the LD_LIBRARY_PATH and LD_PRELOAD appropriately.
>
> I am very interested to know your thoughts on this feature support.
>
You may know this already but there is a configure option to use the 
system zlib (configure --with-zlib=system). I will assume that if you 
build with this option and run with LD_* set to the IPP libraries then 
it should work.

That said, I think your mail is timely as we do need to re-examine how 
zlib is used. It would be nice if the build used the system rather than 
the bundled zlib when building on Linux and Solaris (OS X already uses 
the system zlib). Ditto for Oracle builds. That would avoid needing to 
split libzip and avoid needing to introduce a runtime option to select 
between the bundled and system zlib.

Another long standing suggestion is to just move to a pure java 
implementation, something that Sherman Shen prototyped some time ago and 
mentioned in a recent thread here on memory mapping the zip central 
directory. If we were to go down that route then use of zlib couldn't be 
dropped completely, I think it would still be needed for HotSpot to 
support -Xbootclasspath/a and the JVM TI agent equivalent (with the JEP 
220 work then rt.jar/friends go away so HotSpot only rarely needs to 
call into libzip now). Moving to a pure java implementation might nobble 
your proposal of course but it might open other opportunities for the 
compiler.

-Alan



More information about the core-libs-dev mailing list