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