ppc64le changes for jdk8u
Doerr, Martin
martin.doerr at sap.com
Tue Apr 4 06:18:55 UTC 2017
Hi Hiroshi,
thanks for sharing your work and for providing all the webrevs. Here are my comments:
1. I think this one makes sense. Having the same platform name "ppc64le" in jdk8 as in jdk9 sounds good to me.
2. and especially 5. are major feature backport changes. I'm not against doing that, but it would need to be done carefully as jdk8 is pretty much stabilized.
3. I still like the idea of optimizing forwarding in ParallelGC by getting rid of the expensive heavy-weight sync instructions. I think this change should be discussed in jdk10 and if we can get it reviewed and pushed, it should be possible to backport it to 9u and possibly to 8u.
4. Changing only C2 makes it inconsistent and hence incorrect. Making support_IRIW_for_not_multiple_copy_atomic_cpu switchable on PPC64 would do the job. I think this would be nice to have for experiments, especially in jdk10 wrt. JEP 188: Java Memory Model Update [1].
Note that the line in Parse::do_exits() (parse1.cpp) should be changed from:
PPC64_ONLY(wrote_volatile() ||)
to:
PPC64_ONLY((support_IRIW_for_not_multiple_copy_atomic_cpu && wrote_volatile()) ||)
Otherwise, you'll get redundant barriers (lwsync).
6. Interesting. Would also be interesting to see performance measurement results.
Thanks and best regards,
Martin
[1] http://openjdk.java.net/jeps/188
From: ppc-aix-port-dev [mailto:ppc-aix-port-dev-bounces at openjdk.java.net] On Behalf Of Hiroshi H Horii
Sent: Samstag, 1. April 2017 12:34
To: ppc-aix-port-dev at openjdk.java.net
Cc: Michihiro Horie <HORIE at jp.ibm.com>
Subject: ppc64le changes for jdk8u
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/20170404/cce0efc7/attachment.html>
More information about the ppc-aix-port-dev
mailing list