diff -r 13588c901957 -r 9cf78a70fa4f src/hotspot/share/gc/g1/g1GCPhaseTimes.hpp --- 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* _gc_par_phases[GCParPhasesSentinel]; - WorkerDataArray* _update_rs_processed_buffers; - WorkerDataArray* _update_rs_scanned_cards; - WorkerDataArray* _update_rs_skipped_cards; + WorkerDataArray* _merge_rs_merged_sparse; + WorkerDataArray* _merge_rs_merged_fine; + WorkerDataArray* _merge_rs_merged_coarse; + + WorkerDataArray* _merge_hcc_dirty_cards; + WorkerDataArray* _merge_hcc_skipped_cards; + + WorkerDataArray* _merge_lb_dirty_cards; + WorkerDataArray* _merge_lb_skipped_cards; - WorkerDataArray* _scan_rs_scanned_cards; - WorkerDataArray* _scan_rs_claimed_cards; - WorkerDataArray* _scan_rs_skipped_cards; + WorkerDataArray* _scan_hr_scanned_cards; + WorkerDataArray* _scan_hr_scanned_blocks; + WorkerDataArray* _scan_hr_claimed_chunks; - WorkerDataArray* _opt_scan_rs_scanned_cards; - WorkerDataArray* _opt_scan_rs_claimed_cards; - WorkerDataArray* _opt_scan_rs_skipped_cards; - WorkerDataArray* _opt_scan_rs_scanned_opt_refs; - WorkerDataArray* _opt_scan_rs_used_memory; + WorkerDataArray* _opt_merge_rs_merged_sparse; + WorkerDataArray* _opt_merge_rs_merged_fine; + WorkerDataArray* _opt_merge_rs_merged_coarse; + + WorkerDataArray* _opt_scan_hr_scanned_cards; + WorkerDataArray* _opt_scan_hr_scanned_blocks; + WorkerDataArray* _opt_scan_hr_claimed_chunks; + WorkerDataArray* _opt_scan_hr_scanned_opt_refs; + WorkerDataArray* _opt_scan_hr_used_memory; WorkerDataArray* _obj_copy_lab_waste; WorkerDataArray* _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(); };