RFR: Improve Traversal CSet logging

Aleksey Shipilev shade at redhat.com
Tue Aug 14 09:56:00 UTC 2018


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