RFR: Improve Traversal CSet logging
Roman Kennke
rkennke at redhat.com
Tue Aug 14 10:28:33 UTC 2018
Very good! Thanks!
Roman
> This prints better CSet logging when Traversal is enabled, which is also consistent with
> non-Traversal report:
>
> [261.575s][info][gc,ergo] GC(11) Collectable Garbage: 79992M, 135M CSet, 2504 CSet regions
> [261.578s][info][gc ] GC(11) Pause Init Traversal 2.516ms
> [263.809s][info][gc ] GC(11) Concurrent traversal 82344M->90856M(102400M) 2231.432ms
> [263.813s][info][gc ] GC(11) Pause Final Traversal 1.980ms
>
> Patch:
>
> diff -r fc91a5dfdbe2 src/hotspot/share/gc/shenandoah/heuristics/shenandoahTraversalHeuristics.cpp
> --- a/src/hotspot/share/gc/shenandoah/heuristics/shenandoahTraversalHeuristics.cpp Tue Aug 14
> 10:47:18 2018 +0200
> +++ b/src/hotspot/share/gc/shenandoah/heuristics/shenandoahTraversalHeuristics.cpp Tue Aug 14
> 11:54:04 2018 +0200
> @@ -76,21 +76,21 @@
> ShenandoahHeapRegionSet* root_regions = traversal_gc->root_regions();
> root_regions->clear();
>
> ShenandoahHeapRegionSet* traversal_set = traversal_gc->traversal_set();
> traversal_set->clear();
> +
> + size_t garbage_threshold = ShenandoahHeapRegion::region_size_bytes() / 100 *
> ShenandoahGarbageThreshold;
> +
> for (size_t i = 0; i < heap->num_regions(); i++) {
> ShenandoahHeapRegion* r = heap->get_region(i);
> assert(!collection_set->is_in(r), "must not yet be in cset");
> if (r->used() > 0) {
> - if (r->is_regular()) {
> - size_t garbage_percent = r->garbage() * 100 / ShenandoahHeapRegion::region_size_bytes();
> - if (garbage_percent > ShenandoahGarbageThreshold) {
> + if (r->is_regular() && (r->garbage() > garbage_threshold)) {
> collection_set->add_region(r);
> - }
> }
> - traversal_set->add_region(r);
> + traversal_set->add_region(r);
> }
> r->clear_live_data();
> }
> collection_set->update_region_status();
> }
> diff -r fc91a5dfdbe2 src/hotspot/share/gc/shenandoah/shenandoahTraversalGC.cpp
> --- a/src/hotspot/share/gc/shenandoah/shenandoahTraversalGC.cpp Tue Aug 14 10:47:18 2018 +0200
> +++ b/src/hotspot/share/gc/shenandoah/shenandoahTraversalGC.cpp Tue Aug 14 11:54:04 2018 +0200
> @@ -401,11 +401,15 @@
> prepare_regions();
>
> // Rebuild free set
> free_set->rebuild();
>
> - log_info(gc,ergo)("Got " SIZE_FORMAT " collection set regions and " SIZE_FORMAT " root set
> regions", collection_set->count(), _root_regions.count());
> + log_info(gc, ergo)("Collectable Garbage: " SIZE_FORMAT "M, " SIZE_FORMAT "M CSet, " SIZE_FORMAT "
> CSet regions",
> + collection_set->garbage() / M, collection_set->live_data() / M,
> collection_set->count());
> + if (_root_regions.count() > 0) {
> + log_info(gc, ergo)("Root set regions: " SIZE_FORMAT, _root_regions.count());
> + }
> }
>
> void ShenandoahTraversalGC::init_traversal_collection() {
> assert(ShenandoahSafepoint::is_at_shenandoah_safepoint(), "STW traversal GC");
>
>
> Testing: tier1_gc_shenandoah, benchmarks
>
> Thanks,
> -Aleksey
>
More information about the shenandoah-dev
mailing list