ppc64le changes for jdk8u

Hiroshi H Horii HORII at jp.ibm.com
Sat Apr 1 10:33:50 UTC 2017


Dear all,

In advance, I apologize that this mail has various mixed contents. I may 
need to simplify this mail by dividing to several mails for 
ease-of-discussion.

I would like to introduce changes of jdk8u for ppc64le, which Michi and I 
created. We are attempting to publish a research document about 
performance evaluation of POWER systems based on these changes. Under the 
license of OpenJDK, which is based on GPL, we would like to open these 
changes.

Some are only for jdk8u. Some are under discussion. Please give your 
comments if you are interested in our changes. All of changesets are 
generated based on jdk8u152-b01.

1. Enabled ppc64le as the default os.arch
When we built jdk8u on ppc64le with the latest jdk8u repository, the 
default os.arch was ppc64. This change set ppc64le as the default value of 
os.arch.
http://cr.openjdk.java.net/~horii/jdk8u_support_ppc64le/webrev/
http://cr.openjdk.java.net/~horii/jdk8u_support_ppc64le/hotspot/
http://cr.openjdk.java.net/~horii/jdk8u_support_ppc64le/jdk/

2. backport of CRC32 intrinsics (JDK-8131048, JDK-8164920)
CRC32 intrinsics was implemented and enhanced in jdk9 for ppc64le. We 
backported these optimizations to jdk8u. There are few changed in shared 
codes. I'm now trying to eliminate them.
http://cr.openjdk.java.net/~horii/8166784/webrev.00/

3. Elimination of memory fences before and after CAS
We are discussing to eliminate memory fences in ParallelGC for 
JDK-8154736. We found that the same patterns in CMS (Probably, we will be 
able to find them in G1). We provided changes for jdk9 in the previous 
discussion with many supports from the community. The below changes are 
for jdk8u for ParallelGC and CMS.
http://cr.openjdk.java.net/~horii/jdk8u_gcopt/webrev/

4. Volatile access optimization
In the current implementation, sync is called for each volatile read and 
lwsync for each volatile write. With this optimization, isync is called 
for each volatile read and lwsync and sync are called for each volatile 
write. I'm now writing a proof
to validate these implementation. 
http://cr.openjdk.java.net/~horii/jdk8u_volatilereadopt/webrev/

5. Tiered Compilation
Tiered Compilation will be introduced in jdk9 for ppc64le. We backported 
Tiered Compilation to jdk8u. The following url includes all of the above 
changes because we backported this feature after applying them. Michi is 
now working to isolate dependencies in them.
http://cr.openjdk.java.net/~horii/jdk8u_support_tiered_ppc64le/webrev/
http://cr.openjdk.java.net/~horii/jdk8u_support_tiered_ppc64le/hotspot/webrev/
http://cr.openjdk.java.net/~horii/jdk8u_support_tiered_ppc64le/jdk/webrev/

The above includes many changes in shared codes. We just want to add 
tiered compilation only for ppc64le. Michi is now minimizing changes in 
shared codes. Here is the current status.
http://cr.openjdk.java.net/~horii/c1backport/webrev.01/

6. Some bypath in JCL
We experimentally implemented caches of java.util.Pattern, efficient 
String.format for a typical date format, and TreeMap optimization to work 
around typical mistakes for not-optimized Java codes. They do not 
guarantee specifications, I think.
http://cr.openjdk.java.net/~horii/jdk8u_jcl_cheat/webrev/

I tested 5 and 6 on Ubuntu 16.04 as follows.

$ sudo apt-get install openjdk-8-jdk openjdk-8-dbg mercurial zip bzip2 
unzip tar curl libnuma-dev libasound2-dev libxtst-dev libfreetype6-dev 
libxrender-dev libcups2-dev libfreetype6-dev -y
$ hg clone http://hg.openjdk.java.net/jdk8u/jdk8u
$ cd jdk8u
$ sh ./get_source.sh
$ curl -o jdk8u.patch 
http://cr.openjdk.java.net/~horii/jdk8u_support_tiered_ppc64le/webrev/jdk8u-dev.patch
$ patch -p1 < jdk8u.patch
$ cd hotspot
$ curl -o hotspot.patch 
http://cr.openjdk.java.net/~horii/jdk8u_support_tiered_ppc64le/hotspot/webrev/hotspot.patch
$ patch -p1 < hotspot.patch
$ curl -o jdk1.patch 
http://cr.openjdk.java.net/~horii/jdk8u_support_tiered_ppc64le/jdk/webrev/jdk.patch
$ curl -o jdk2.patch 
http://cr.openjdk.java.net/~horii/jdk8u_jcl_cheat/webrev/jdk.patch
$ patch -p1 < jdk1.patch
$ patch -p1 < jdk2.patch
$ cd ../
$ sh ./configure --with-freetype-include=/usr/include/freetype2/ 
--with-freetype-lib=/usr/lib/powerpc64le-linux-gnu/
$ make all

Regards,
Hiroshi

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/ppc-aix-port-dev/attachments/20170401/342c79f4/attachment-0001.html>


More information about the ppc-aix-port-dev mailing list