RFR: Mark-compact performance improvements and cleanups
Zhengyu Gu
zgu at redhat.com
Tue May 29 21:22:09 UTC 2018
Good to me.
-Zhengyu
On 05/29/2018 03:20 PM, Aleksey Shipilev wrote:
> http://cr.openjdk.java.net/~shade/shenandoah/mark-compact-improvs/webrev.01/
>
> This is the pack of mark-compact cleanups and improvements.
>
> *) mc-logging: More verbose profiling for phase 4 in mark-compact
>
> Adds a few more profiling points in "Copy object" phase of mark compact, which enables better
> performance diagnostics.
>
> *) mc-liveness: Full GC always comes with liveness data
>
> We used to skip liveness counting for mark-compact, because the core algorithm does not require it.
> It provided some boosts when our liveness calculation was a major performance hog. It is not
> anymore, and having liveness data enables us to do shortcuts, like below. This also cleans up shared
> code substantially.
>
> *) mc-immediate-trash: Reclaim immediate garbage after mark-compact marking
>
> Once we know liveness, we can reclaim immediate garbage regions right after marking. This lets
> threads down below treat the regions as the targets for compaction immediately, instead of
> compacting through them. This is especially important for figuring out compaction for humongous
> regions, which is planned before the regular object moves.
>
> *) mc-shortcut-live: Shortcut regions that are known not to be alive
>
> Same here, liveness provides us with insight if we even want to walk marked objects in the region,
> or not. For the fully-garbage region it would be futile, and it will yield no marked objects.
>
> Motivational performance data:
>
> - Serial: 8191M->4M Full GC cycles
>
> before:
> Pause Full GC (N) = 0.90 s (a = 64425 us) (n = 14)
> (lvls, us = 56250, 56836, 57617, 58594, 103983)
>
> after:
> Pause Full GC (N) = 0.22 s (a = 14914 us) (n = 15)
> (lvls, us = 12891, 13281, 14453, 15820, 16818)
>
> - retain.tree: 10239M->1070M Full GC cycles
>
> before:
> Pause Full GC (N) = 3.50 s (a = 291548 us) (n = 12)
> (lvls, us = 275391, 281250, 287109, 296875, 314651)
>
> after:
> Pause Full GC (N) = 3.54 s (a = 294925 us) (n = 12)
> (lvls, us = 285156, 287109, 292969, 296875, 304701)
>
> - LRUFragger: 102138M->65687M Full GC cycles
>
> before:
> Pause Full GC (N) = 151.24 s (a = 4726195 us) (n = 32)
> (lvls, us = 4570312, 4648438, 4707031, 4765625, 4889809)
>
> after:
> Pause Full GC (N) = 153.10 s (a = 4784420 us) (n = 32)
> (lvls, us = 4667969, 4746094, 4765625, 4804688, 4929369)
>
> Testing: hotspot_gc_shenandoah {fastdebug|release}, benchmarks
>
> Thanks,
> -Aleksey
>
More information about the shenandoah-dev
mailing list