[aarch64-port-dev ] [RFR] 8u152 Upstream Sync

Aleksey Shipilev shade at redhat.com
Tue Jan 23 19:35:22 UTC 2018


On 01/23/2018 07:40 PM, Andrew Hughes wrote:
> For the Shenandoah devs:
> 
> The Shenandoah merge (aarch64-shenandoah-jdk8u152-b16) was non-trivial on
> this occasion, so I've included it here:
> 
> http://cr.openjdk.java.net/~andrew/aarch64-8/u152/hotspot/shenandoah.changeset

It is really, really hard to spot what are the changes coming from upstream, and what have you
changed during the merge. But this seriously does not compute:

$ wget http://cr.openjdk.java.net/~andrew/aarch64-8/u152/hotspot/shenandoah.changeset -q -O - |
diffstat | tail -n 1
 124 files changed, 3007 insertions(+), 773 deletions(-)

$ wget http://cr.openjdk.java.net/~andrew/aarch64-8/u152/hotspot/hotspot.changeset -q -O - |
diffstat | tail -n 1
 198 files changed, 11964 insertions(+), 3966 deletions(-)

$ wget http://cr.openjdk.java.net/~andrew/aarch64-8/u152/hotspot/merge.changeset -q -O - | diffstat
| tail -n 1
 1 file changed, 1 insertion(+)

Is this because aarch64-port/shenandoah-8u is ahead of aarch64-port/jdk8u?

Things like these are 100% regressions for Shenandoah:

-        if (! oopDesc::equals(saved, result()))
+        if (saved != result())

...

-        oop saved = MethodHandles::init_method_MemberName(result, info);
-        if (! oopDesc::equals(saved, result()))
+        // Since this is going through the methods to create MemberNames, don't search
+        // for matching methods already in the table
+        oop saved = MethodHandles::init_method_MemberName(result, info, /*intern*/false);
+        if (saved != result())

Basically, removing any oopDesc::equals, oopDesc::unsafe_equals, read_barrier, write_barrier are
regressing Shenandoah. The converse is true for *new* oop comparisons (except comparisons with
NULL), like this:

+bool java_lang_invoke_MemberName::equals(oop mn1, oop mn2) {
+  if (mn1 == mn2) {
+     return true;
+  }
+  return (vmtarget(mn1) == vmtarget(mn2) && flags(mn1) == flags(mn2) &&
+          vmindex(mn1) == vmindex(mn2) &&
+          clazz(mn1) == clazz(mn2));
+}
+

These three are the only problems I was able to spot in the patch. Running simple applications with
-XX:+VerifyStrictOopOperations would help to diagnose the rest. Or, run hotspot_gc_shenandoah with
"make test TEST=hotspot_gc_shenandoah".

-Aleksey



More information about the aarch64-port-dev mailing list