--- a/src/hotspot/share/gc/g1/g1GCPhaseTimes.hpp Thu Oct 17 20:27:44 2019 +0100
+++ b/src/hotspot/share/gc/g1/g1GCPhaseTimes.hpp Thu Oct 17 20:53:35 2019 +0100
@@ -56,14 +56,15 @@
CLDGRoots,
JVMTIRoots,
AOT_ONLY(AOTCodeRoots COMMA)
- JVMCI_ONLY(JVMCIRoots COMMA)
CMRefRoots,
- WaitForStrongCLD,
- WeakCLDRoots,
- UpdateRS,
- ScanHCC,
- ScanRS,
- OptScanRS,
+ WaitForStrongRoots,
+ MergeER,
+ MergeRS,
+ OptMergeRS,
+ MergeLB,
+ MergeHCC,
+ ScanHR,
+ OptScanHR,
CodeRoots,
OptCodeRoots,
ObjCopy,
@@ -82,20 +83,30 @@
};
static const GCParPhases ExtRootScanSubPhasesFirst = ThreadRoots;
- static const GCParPhases ExtRootScanSubPhasesLast = WeakCLDRoots;
+ static const GCParPhases ExtRootScanSubPhasesLast = WaitForStrongRoots;
- enum GCScanRSWorkItems {
- ScanRSScannedCards,
- ScanRSClaimedCards,
- ScanRSSkippedCards,
- ScanRSScannedOptRefs,
- ScanRSUsedMemory
+ enum GCMergeRSWorkTimes {
+ MergeRSMergedSparse,
+ MergeRSMergedFine,
+ MergeRSMergedCoarse
};
- enum GCUpdateRSWorkItems {
- UpdateRSProcessedBuffers,
- UpdateRSScannedCards,
- UpdateRSSkippedCards
+ enum GCScanHRWorkItems {
+ ScanHRScannedCards,
+ ScanHRScannedBlocks,
+ ScanHRClaimedChunks,
+ ScanHRScannedOptRefs,
+ ScanHRUsedMemory
+ };
+
+ enum GCMergeHCCWorkItems {
+ MergeHCCDirtyCards,
+ MergeHCCSkippedCards
+ };
+
+ enum GCMergeLBWorkItems {
+ MergeLBDirtyCards,
+ MergeLBSkippedCards
};
enum GCObjCopyWorkItems {
@@ -109,19 +120,29 @@
WorkerDataArray<double>* _gc_par_phases[GCParPhasesSentinel];
- WorkerDataArray<size_t>* _update_rs_processed_buffers;
- WorkerDataArray<size_t>* _update_rs_scanned_cards;
- WorkerDataArray<size_t>* _update_rs_skipped_cards;
+ WorkerDataArray<size_t>* _merge_rs_merged_sparse;
+ WorkerDataArray<size_t>* _merge_rs_merged_fine;
+ WorkerDataArray<size_t>* _merge_rs_merged_coarse;
+
+ WorkerDataArray<size_t>* _merge_hcc_dirty_cards;
+ WorkerDataArray<size_t>* _merge_hcc_skipped_cards;
+
+ WorkerDataArray<size_t>* _merge_lb_dirty_cards;
+ WorkerDataArray<size_t>* _merge_lb_skipped_cards;
- WorkerDataArray<size_t>* _scan_rs_scanned_cards;
- WorkerDataArray<size_t>* _scan_rs_claimed_cards;
- WorkerDataArray<size_t>* _scan_rs_skipped_cards;
+ WorkerDataArray<size_t>* _scan_hr_scanned_cards;
+ WorkerDataArray<size_t>* _scan_hr_scanned_blocks;
+ WorkerDataArray<size_t>* _scan_hr_claimed_chunks;
- WorkerDataArray<size_t>* _opt_scan_rs_scanned_cards;
- WorkerDataArray<size_t>* _opt_scan_rs_claimed_cards;
- WorkerDataArray<size_t>* _opt_scan_rs_skipped_cards;
- WorkerDataArray<size_t>* _opt_scan_rs_scanned_opt_refs;
- WorkerDataArray<size_t>* _opt_scan_rs_used_memory;
+ WorkerDataArray<size_t>* _opt_merge_rs_merged_sparse;
+ WorkerDataArray<size_t>* _opt_merge_rs_merged_fine;
+ WorkerDataArray<size_t>* _opt_merge_rs_merged_coarse;
+
+ WorkerDataArray<size_t>* _opt_scan_hr_scanned_cards;
+ WorkerDataArray<size_t>* _opt_scan_hr_scanned_blocks;
+ WorkerDataArray<size_t>* _opt_scan_hr_claimed_chunks;
+ WorkerDataArray<size_t>* _opt_scan_hr_scanned_opt_refs;
+ WorkerDataArray<size_t>* _opt_scan_hr_used_memory;
WorkerDataArray<size_t>* _obj_copy_lab_waste;
WorkerDataArray<size_t>* _obj_copy_lab_undo_waste;
@@ -145,6 +166,12 @@
double _cur_string_deduplication_time_ms;
+ double _cur_merge_heap_roots_time_ms;
+ double _cur_optional_merge_heap_roots_time_ms;
+
+ double _cur_prepare_merge_heap_roots_time_ms;
+ double _cur_optional_prepare_merge_heap_roots_time_ms;
+
double _cur_prepare_tlab_time_ms;
double _cur_resize_tlab_time_ms;
@@ -159,6 +186,8 @@
double _external_accounted_time_ms;
+ double _recorded_prepare_heap_roots_time_ms;
+
double _recorded_clear_claimed_marks_time_ms;
double _recorded_young_cset_choice_time_ms;
@@ -208,7 +237,8 @@
void trace_count(const char* name, size_t value) const;
double print_pre_evacuate_collection_set() const;
- double print_evacuate_collection_set() const;
+ double print_merge_heap_roots_time() const;
+ double print_evacuate_initial_collection_set() const;
double print_evacuate_optional_collection_set() const;
double print_post_evacuate_collection_set() const;
void print_other(double accounted_ms) const;
@@ -220,20 +250,20 @@
static const char* phase_name(GCParPhases phase);
// record the time a phase took in seconds
- void record_time_secs(GCParPhases phase, uint worker_i, double secs);
+ void record_time_secs(GCParPhases phase, uint worker_id, double secs);
// add a number of seconds to a phase
- void add_time_secs(GCParPhases phase, uint worker_i, double secs);
+ void add_time_secs(GCParPhases phase, uint worker_id, double secs);
- void record_or_add_time_secs(GCParPhases phase, uint worker_i, double secs);
+ void record_or_add_time_secs(GCParPhases phase, uint worker_id, double secs);
- double get_time_secs(GCParPhases phase, uint worker_i);
+ double get_time_secs(GCParPhases phase, uint worker_id);
- void record_thread_work_item(GCParPhases phase, uint worker_i, size_t count, uint index = 0);
+ void record_thread_work_item(GCParPhases phase, uint worker_id, size_t count, uint index = 0);
- void record_or_add_thread_work_item(GCParPhases phase, uint worker_i, size_t count, uint index = 0);
+ void record_or_add_thread_work_item(GCParPhases phase, uint worker_id, size_t count, uint index = 0);
- size_t get_thread_work_item(GCParPhases phase, uint worker_i, uint index = 0);
+ size_t get_thread_work_item(GCParPhases phase, uint worker_id, uint index = 0);
// return the average time for a phase in milliseconds
double average_time_ms(GCParPhases phase);
@@ -278,6 +308,22 @@
_cur_strong_code_root_purge_time_ms = ms;
}
+ void record_merge_heap_roots_time(double ms) {
+ _cur_merge_heap_roots_time_ms += ms;
+ }
+
+ void record_or_add_optional_merge_heap_roots_time(double ms) {
+ _cur_optional_merge_heap_roots_time_ms += ms;
+ }
+
+ void record_prepare_merge_heap_roots_time(double ms) {
+ _cur_prepare_merge_heap_roots_time_ms += ms;
+ }
+
+ void record_or_add_optional_prepare_merge_heap_roots_time(double ms) {
+ _cur_optional_prepare_merge_heap_roots_time_ms += ms;
+ }
+
void record_evac_fail_recalc_used_time(double ms) {
_cur_evac_fail_recalc_used = ms;
}
@@ -357,6 +403,10 @@
_external_accounted_time_ms += time_ms;
}
+ void record_prepare_heap_roots_time_ms(double recorded_prepare_heap_roots_time_ms) {
+ _recorded_prepare_heap_roots_time_ms = recorded_prepare_heap_roots_time_ms;
+ }
+
void record_clear_claimed_marks_time_ms(double recorded_clear_claimed_marks_time_ms) {
_recorded_clear_claimed_marks_time_ms = recorded_clear_claimed_marks_time_ms;
}
@@ -397,6 +447,10 @@
return _cur_fast_reclaim_humongous_time_ms;
}
+ size_t fast_reclaim_humongous_candidates() const {
+ return _cur_fast_reclaim_humongous_candidates;
+ }
+
ReferenceProcessorPhaseTimes* ref_phase_times() { return &_ref_phase_times; }
WeakProcessorPhaseTimes* weak_phase_times() { return &_weak_phase_times; }
@@ -424,8 +478,10 @@
G1GCPhaseTimes* _phase_times;
uint _worker_id;
EventGCPhaseParallel _event;
+ bool _must_record;
+
public:
- G1GCParPhaseTimesTracker(G1GCPhaseTimes* phase_times, G1GCPhaseTimes::GCParPhases phase, uint worker_id);
+ G1GCParPhaseTimesTracker(G1GCPhaseTimes* phase_times, G1GCPhaseTimes::GCParPhases phase, uint worker_id, bool must_record = true);
virtual ~G1GCParPhaseTimesTracker();
};