RFR: Fast synchronizer root scanning
Zhengyu Gu
zgu at redhat.com
Wed May 10 20:20:03 UTC 2017
OK.
-Zhengyu
On 05/10/2017 04:15 PM, Roman Kennke wrote:
> When scanning synchronizer roots, we are scanning everything in
> gBlockList, which, as far as I can tell, are all active monitor blocks
> of all threads, plus any free blocks that have piled up. Doing this
> appears to be quite inefficient.
>
> I have implemented an alternative way to scan synchronizer roots: each
> Thread maintains its own thread-local list of in-use monitors and a
> free-list. The global in-use list is only used for 'moribund' threads. I
> think it is sufficient scan each Thread's local in-use list plus the
> global list. I checked with SPECjvm and jcstress and found no ill
> issues. Performance wise, it looks *much* better:
>
> baseline:
> [14,393s][info][gc,stats] S: Thread Roots = 0,34 s (a
> = 37748 us) (n = 9) (lvls, us = 36523, 36523, 36914,
> 37305, 42215)
> [14,393s][info][gc,stats] S: Synchronizer Roots = 0,14 s (a
> = 15115 us) (n = 9) (lvls, us = 9746, 10938, 14258,
> 14648, 25847)
> [14,393s][info][gc,stats] UR: Thread Roots = 0,22 s (a
> = 24967 us) (n = 9) (lvls, us = 12305, 24219, 25977,
> 27148, 27758)
> [14,393s][info][gc,stats] UR: Synchronizer Roots = 0,11 s (a
> = 11906 us) (n = 9) (lvls, us = 8340, 9082, 12109,
> 12695, 13787)
>
> patched:
> [14,293s][info][gc,stats] S: Thread Roots = 0,36 s (a
> = 40365 us) (n = 9) (lvls, us = 32031, 32031, 34570,
> 37109, 67224)
> [14,293s][info][gc,stats] S: Synchronizer Roots = 0,00 s (a
> = 0 us) (n = 9) (lvls, us = 0, 0,
> 0, 0, 0)
> [14,294s][info][gc,stats] UR: Thread Roots = 0,22 s (a
> = 24459 us) (n = 9) (lvls, us = 15820, 20508, 22070,
> 26172, 32573)
> [14,294s][info][gc,stats] UR: Synchronizer Roots = 0,00 s (a
> = 0 us) (n = 9) (lvls, us = 0, 0,
> 0, 0, 0)
>
>
> I.e. even though the work of scanning synchronizer roots is added to
> thread roots scanning, thread-roots scanning does not very significantly
> take longer, but sync roots scanning drops to 0 (there's usually nothing
> to do for global in-use list).
>
> I guarded this new behaviour with -XX:+ShenandoahFastSyncRoots, and
> defaulting to false for now. This will allow us to do more testing and
> get feedback from hotspot-runtime-dev, before enabling it by default.
>
> http://cr.openjdk.java.net/~rkennke/fastsyncroots/webrev.00/
> <http://cr.openjdk.java.net/%7Erkennke/fastsyncroots/webrev.00/>
>
> Testing: hotspot_gc_shenandoah, jcstress -m quick, jmh-specjvm
>
> Ok?
>
>
More information about the shenandoah-dev
mailing list