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