Shenandoah performance problem
Attila Axt
axt at load.hu
Fri Oct 18 11:40:22 UTC 2019
I've applied the patches on top of
|http:||//hg||.openjdk.java.net||/shenandoah/jdk|
$ hg parent
changeset: 57587:c29454a99107
tag: tip
user: zgu
date: Wed Oct 16 15:13:00 2019 -0400
summary: 8230773: Shenandoah: enable concurrent class unloading on
x86_32 platforms
and did some tests in production.
Good news: the startup time is back to normal, and the scalability
bottleneck also seems resolved.
Bad news: I see some random jvm crashes, not sure if they are related to
this patch.
Should I use a different parent revision to apply the patches to?
The crashes:
```
#
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x00007f7fd69a2f51, pid=20946, tid=20988
#
# JRE version: OpenJDK Runtime Environment (14.0) (build
14-internal+0-adhoc.axt.shenandoah)
# Java VM: OpenJDK 64-Bit Server VM (14-internal+0-adhoc.axt.shenandoah,
mixed mode, tiered, compressed oops, shenandoah gc, linux-amd64)
# Problematic frame:
# V [libjvm.so+0x8a8f51]
AccessInternal::PostRuntimeDispatch<ShenandoahBarrierSet::AccessBarrier<565366ul,
ShenandoahBarrierSet>, (AccessInternal::BarrierType)3,
565366ul>::oop_access_barrier(oopDesc*, long)+0x1
#
# No core dump will be written. Core dumps have been disabled. To enable
core dumping, try "ulimit -c unlimited" before starting Java again
Compiled method (c1) 4554513 16071 3
java.lang.invoke.LambdaForm$DMH/0x0000000800c80440::invokeStatic (21 bytes)
total in heap [0x00007f7fc2a27010,0x00007f7fc2a2a670] = 13920
relocation [0x00007f7fc2a27170,0x00007f7fc2a27490] = 800
main code [0x00007f7fc2a274a0,0x00007f7fc2a29920] = 9344
stub code [0x00007f7fc2a29920,0x00007f7fc2a29a40] = 288
oops [0x00007f7fc2a29a40,0x00007f7fc2a29b78] = 312
metadata [0x00007f7fc2a29b78,0x00007f7fc2a29c78] = 256
scopes data [0x00007f7fc2a29c78,0x00007f7fc2a2a1d8] = 1376
scopes pcs [0x00007f7fc2a2a1d8,0x00007f7fc2a2a608] = 1072
dependencies [0x00007f7fc2a2a608,0x00007f7fc2a2a618] = 16
nul chk table [0x00007f7fc2a2a618,0x00007f7fc2a2a670] = 88
```
or when flight recording is enabled:
```
# SIGSEGV (0xb) at pc=0x00007f4b66fdd031, pid=1674, tid=1678
#
# JRE version: OpenJDK Runtime Environment (14.0) (build
14-internal+0-adhoc.axt.shenandoah)
# Java VM: OpenJDK 64-Bit Server VM (14-internal+0-adhoc.axt.shenandoah,
mixed mode, tiered, compressed oops, shenandoah gc, linux-amd64)
# Problematic frame:
# V [libjvm.so+0x932031]
JfrSymbolId::mark_unsafe_anonymous_klass_name(InstanceKlass const*,
bool)+0x31
#
Current thread (0x00007f4b60185800): ConcurrentGCThread
"ShenandoahControlThread" [stack: 0x00007f4b64c2a000,0x00007f4b64d2a000]
[id=1678]
Stack: [0x00007f4b64c2a000,0x00007f4b64d2a000], sp=0x00007f4b64d28540,
free space=1017k
Native frames: (J=compiled Java code, A=aot compiled Java code,
j=interpreted, Vv=VM code, C=native code)
V [libjvm.so+0x932031]
JfrSymbolId::mark_unsafe_anonymous_klass_name(InstanceKlass const*,
bool)+0x31
V [libjvm.so+0x932ed5] JfrArtifactSet::mark(Klass const*, bool)+0x35
V [libjvm.so+0x927cc4] write_klass(JfrCheckpointWriter*, Klass const*,
bool)+0x114
V [libjvm.so+0x930f94] JfrArtifactCallbackHost<Klass const*,
CompositeFunctor<Klass const*,
JfrTypeWriterHost<JfrPredicatedTypeWriterImplHost<Klass const*,
SerializePredicate<Klass const*>, &(write__klass(JfrC
heckpointWriter*, void const*))>, 20u>, KlassArtifactRegistrator>
>::do_artifact(void const*)+0x34
V [libjvm.so+0x5fe27e] ClassLoaderData::classes_do(void (*)(Klass*))+0x1e
V [libjvm.so+0x6025cb] ClassLoaderDataGraph::classes_unloading_do(void
(*)(Klass*))+0x2b
V [libjvm.so+0x9300f4] JfrTypeSet::serialize(JfrCheckpointWriter*,
JfrCheckpointWriter*, bool)+0x21d4
V [libjvm.so+0x926afc]
JfrTypeManager::write_type_set_for_unloaded_classes()+0x5c
V [libjvm.so+0xf14d11] SystemDictionary::do_unloading(GCTimer*)+0x81
V [libjvm.so+0xe86cd0] ShenandoahUnload::unload()+0x60
V [libjvm.so+0xdfacb5] ShenandoahHeap::entry_roots()+0x125
V [libjvm.so+0xdf0056]
ShenandoahControlThread::service_concurrent_normal_cycle(GCCause::Cause)+0xb6
V [libjvm.so+0xdf115b] ShenandoahControlThread::run_service()+0x6fb
V [libjvm.so+0x6735bb] ConcurrentGCThread::run()+0x2b
V [libjvm.so+0xf66671] Thread::call_run()+0x111
V [libjvm.so+0xc94261] thread_native_entry(Thread*)+0xf1
```
Thanks,
axt
On 10/18/19 1:10 AM, Attila Axt wrote:
> Thanks for the fix and the quick response. I've tried the first
> changeset locally against the benchmark, it seems to work fine.
>
> I can try the full changeset earliest on monday in production
> environment. I will feedback on the results.
>
> Greetings,
> axt
>
> On 10/17/19 8:53 PM, Aleksey Shipilev wrote:
>> On 10/17/19 6:29 PM, Aleksey Shipilev wrote:
>>> On 10/17/19 12:49 PM, Aleksey Shipilev wrote:
>>>> This workload runs:
>>>> Parallel GC, -t 1: 0.112 ± 0.006 ms/op
>>>> Parallel GC, -t max: 0.146 ± 0.002 ms/op
>>>> Shenandoah GC, -t 1: 0.120 ± 0.002 ms/op
>>>> Shenandoah GC, -t max: 1.595 ± 0.050 ms/op <--- scalability
>>>> bottleneck
>>>>
>>>> And you are right, that's the contention on pinning/unpinning, I am
>>>> looking what can be done about
>>>> that...
>>> This bunch of fixes makes it much better:
>>> https://cr.openjdk.java.net/~shade/shenandoah/async-pinning/
>> Filed:
>> https://bugs.openjdk.java.net/browse/JDK-8232575
>>
>> ...would RFR it tomorrow.
>>
More information about the shenandoah-dev
mailing list