RFR: Simplify parallel synchronizer roots iterator
Roman Kennke
rkennke at redhat.com
Wed May 10 14:07:41 UTC 2017
The parallel synchronizer roots iterator is a bit too complicated for no
good reason (I think, correct me if I'm wrong). It's doing two CASes per
loop iteration, once over the CHAINED_MARKER/CLAIMED_MARKER in the
block, and once more over the _cur field in the
ParallelObjectSynchronizerIterator. I think doing a very simple CAS-loop
over the _cur field is good enough, and maybe even improves performance
slightly:
This is what I get with gc-bench's roots.Sync benchmark:
baseline:
[15,840s][info][gc,stats] S: Synchronizer Roots = 0,16 s (a
= 17334 us) (n = 9) (lvls, us = 11523, 13867, 14062,
16992, 25422)
[15,841s][info][gc,stats] UR: Synchronizer Roots = 0,11 s (a
= 12206 us) (n = 9) (lvls, us = 9707, 10352, 11719,
11914, 15709)
patched:
[15,463s][info][gc,stats] S: Synchronizer Roots = 0,15 s (a
= 16147 us) (n = 9) (lvls, us = 11523, 12500, 15430,
15820, 25440)
[15,463s][info][gc,stats] UR: Synchronizer Roots = 0,10 s (a
= 11111 us) (n = 9) (lvls, us = 9160, 9414, 9766,
11523, 13777)
http://cr.openjdk.java.net/~rkennke/simplify-sync-roots/webrev.00/
<http://cr.openjdk.java.net/%7Erkennke/simplify-sync-roots/webrev.00/>
As a nice bonus, this reduces diffs between upstream jdk9 and shenandoah
jdk9 (removed CLAIMED_MARKER and cas_set_object())
Testing: hotspot_gc_shenandoah, specjvm-derby, gc-bench/roots.Sync
Note: gc-basher fails in hotspot_gc_shenandoah run, but doesn't seem
related to that change.
Ok?
Roman
More information about the shenandoah-dev
mailing list