RFR (S): Parallelize code cache scan better

Aleksey Shipilev shade at redhat.com
Thu Apr 27 17:00:33 UTC 2017


Hi,

Turns out, our parallel code cache iterator is not that parallel: it processes
entire code heaps in one stride. In our current mode, there are only three code
heaps. So, in some workloads, e.g. Compiler.sunflow, code cache scan for the
largest code heap for initial evacuation dominates the final mark pause time.

The fix is to parallelize iterator better:
  http://cr.openjdk.java.net/~shade/shenandoah/code-cache-parallel/webrev.01/

Before:

 Final Mark Pauses (N) = 0.35 s (a = 6797 us) (n =    51)
     (lvls, us = 4219, 5508, 6680, 7168, 12895)

    Initial Evacuation = 0.28 s (a = 5499 us) (n =    51)
     (lvls, us = 3516, 4570, 5625, 5996, 9967)

After:

 Final Mark Pauses (N) = 0.26 s (a = 5261 us) (n =    49)
     (lvls, us = 3574, 3926, 4375, 5547, 14308)

    Initial Evacuation = 0.16 s (a = 3183 us) (n =    49)
     (lvls, us = 2324, 2617, 2949, 3262, 5801)

Testing: hotspot_gc_shenandoah, jcstress -m quick

Thanks,
-Aleksey



More information about the shenandoah-dev mailing list