8200305: Update gc,liveness output with remset state after rebuild remset concurrently changes

Reviewed-by: sjohanss, sangheki
This commit is contained in:
Thomas Schatzl 2018-04-04 14:51:26 +02:00
parent d2ad998e7d
commit e5ec636e7d
3 changed files with 12 additions and 3 deletions

View File

@ -2826,6 +2826,8 @@ G1CMTask::G1CMTask(uint worker_id,
// For per-region info // For per-region info
#define G1PPRL_TYPE_FORMAT " %-4s" #define G1PPRL_TYPE_FORMAT " %-4s"
#define G1PPRL_TYPE_H_FORMAT " %4s" #define G1PPRL_TYPE_H_FORMAT " %4s"
#define G1PPRL_STATE_FORMAT " %-5s"
#define G1PPRL_STATE_H_FORMAT " %5s"
#define G1PPRL_BYTE_FORMAT " " SIZE_FORMAT_W(9) #define G1PPRL_BYTE_FORMAT " " SIZE_FORMAT_W(9)
#define G1PPRL_BYTE_H_FORMAT " %9s" #define G1PPRL_BYTE_H_FORMAT " %9s"
#define G1PPRL_DOUBLE_FORMAT " %14.1f" #define G1PPRL_DOUBLE_FORMAT " %14.1f"
@ -2862,10 +2864,11 @@ G1PrintRegionLivenessInfoClosure::G1PrintRegionLivenessInfoClosure(const char* p
G1PPRL_BYTE_H_FORMAT G1PPRL_BYTE_H_FORMAT
G1PPRL_DOUBLE_H_FORMAT G1PPRL_DOUBLE_H_FORMAT
G1PPRL_BYTE_H_FORMAT G1PPRL_BYTE_H_FORMAT
G1PPRL_STATE_H_FORMAT
G1PPRL_BYTE_H_FORMAT, G1PPRL_BYTE_H_FORMAT,
"type", "address-range", "type", "address-range",
"used", "prev-live", "next-live", "gc-eff", "used", "prev-live", "next-live", "gc-eff",
"remset", "code-roots"); "remset", "state", "code-roots");
log_trace(gc, liveness)(G1PPRL_LINE_PREFIX log_trace(gc, liveness)(G1PPRL_LINE_PREFIX
G1PPRL_TYPE_H_FORMAT G1PPRL_TYPE_H_FORMAT
G1PPRL_ADDR_BASE_H_FORMAT G1PPRL_ADDR_BASE_H_FORMAT
@ -2874,10 +2877,11 @@ G1PrintRegionLivenessInfoClosure::G1PrintRegionLivenessInfoClosure(const char* p
G1PPRL_BYTE_H_FORMAT G1PPRL_BYTE_H_FORMAT
G1PPRL_DOUBLE_H_FORMAT G1PPRL_DOUBLE_H_FORMAT
G1PPRL_BYTE_H_FORMAT G1PPRL_BYTE_H_FORMAT
G1PPRL_STATE_H_FORMAT
G1PPRL_BYTE_H_FORMAT, G1PPRL_BYTE_H_FORMAT,
"", "", "", "",
"(bytes)", "(bytes)", "(bytes)", "(bytes/ms)", "(bytes)", "(bytes)", "(bytes)", "(bytes/ms)",
"(bytes)", "(bytes)"); "(bytes)", "", "(bytes)");
} }
bool G1PrintRegionLivenessInfoClosure::do_heap_region(HeapRegion* r) { bool G1PrintRegionLivenessInfoClosure::do_heap_region(HeapRegion* r) {
@ -2891,6 +2895,7 @@ bool G1PrintRegionLivenessInfoClosure::do_heap_region(HeapRegion* r) {
double gc_eff = r->gc_efficiency(); double gc_eff = r->gc_efficiency();
size_t remset_bytes = r->rem_set()->mem_size(); size_t remset_bytes = r->rem_set()->mem_size();
size_t strong_code_roots_bytes = r->rem_set()->strong_code_roots_mem_size(); size_t strong_code_roots_bytes = r->rem_set()->strong_code_roots_mem_size();
const char* remset_type = r->rem_set()->get_short_state_str();
_total_used_bytes += used_bytes; _total_used_bytes += used_bytes;
_total_capacity_bytes += capacity_bytes; _total_capacity_bytes += capacity_bytes;
@ -2908,10 +2913,11 @@ bool G1PrintRegionLivenessInfoClosure::do_heap_region(HeapRegion* r) {
G1PPRL_BYTE_FORMAT G1PPRL_BYTE_FORMAT
G1PPRL_DOUBLE_FORMAT G1PPRL_DOUBLE_FORMAT
G1PPRL_BYTE_FORMAT G1PPRL_BYTE_FORMAT
G1PPRL_STATE_FORMAT
G1PPRL_BYTE_FORMAT, G1PPRL_BYTE_FORMAT,
type, p2i(bottom), p2i(end), type, p2i(bottom), p2i(end),
used_bytes, prev_live_bytes, next_live_bytes, gc_eff, used_bytes, prev_live_bytes, next_live_bytes, gc_eff,
remset_bytes, strong_code_roots_bytes); remset_bytes, remset_type, strong_code_roots_bytes);
return false; return false;
} }

View File

@ -40,6 +40,7 @@
#include "utilities/growableArray.hpp" #include "utilities/growableArray.hpp"
const char* HeapRegionRemSet::_state_strings[] = {"Untracked", "Updating", "Complete"}; const char* HeapRegionRemSet::_state_strings[] = {"Untracked", "Updating", "Complete"};
const char* HeapRegionRemSet::_short_state_strings[] = {"UNTRA", "UPDAT", "CMPLT"};
class PerRegionTable: public CHeapObj<mtGC> { class PerRegionTable: public CHeapObj<mtGC> {
friend class OtherRegionsTable; friend class OtherRegionsTable;

View File

@ -224,9 +224,11 @@ private:
RemSetState _state; RemSetState _state;
static const char* _state_strings[]; static const char* _state_strings[];
static const char* _short_state_strings[];
public: public:
const char* get_state_str() const { return _state_strings[_state]; } const char* get_state_str() const { return _state_strings[_state]; }
const char* get_short_state_str() const { return _short_state_strings[_state]; }
bool is_tracked() { return _state != Untracked; } bool is_tracked() { return _state != Untracked; }
bool is_updating() { return _state == Updating; } bool is_updating() { return _state == Updating; }