< prev index next >

src/share/vm/gc_implementation/shenandoah/shenandoahPhaseTimings.hpp

Print this page
rev 10493 : [Backport] Shenandoah string deduplication
rev 10503 : [backport] More verbose profiling for phase 4 in mark-compact
rev 10552 : [backport] Concurrent uncommit should be recorded as GC event
rev 10561 : [backport] Add task termination and enhanced task queue state tracking + weakrefs
rev 10571 : [backport] Complete liveness for recently allocated regions outside the allocation path
rev 10637 : [backport] Purge partial heuristics and connection matrix infrastructure

*** 30,39 **** --- 30,40 ---- #include "gc_implementation/shenandoah/shenandoahWorkerDataArray.hpp" #include "gc_implementation/shenandoah/shenandoahWorkerDataArray.inline.hpp" class ShenandoahCollectorPolicy; class ShenandoahWorkerTimings; + class ShenandoahTerminationTimings; class outputStream; class ShenandoahPhaseTimings : public CHeapObj<mtGC> { public: enum Phase {
*** 58,67 **** --- 59,69 ---- scan_flat_profiler_roots, scan_management_roots, scan_system_dictionary_roots, scan_cldg_roots, scan_jvmti_roots, + scan_string_dedup_roots, scan_finish_queues, resize_tlabs, final_mark_gross,
*** 79,105 **** update_flat_profiler_roots, update_management_roots, update_system_dictionary_roots, update_cldg_roots, update_jvmti_roots, update_finish_queues, finish_queues, weakrefs, weakrefs_process, weakrefs_enqueue, purge, purge_class_unload, purge_par, purge_par_codecache, purge_par_symbstring, purge_par_rmt, purge_par_classes, purge_par_sync, purge_cldg, - clean_str_dedup_table, prepare_evac, recycle_regions, // Per-thread timer block, should have "roots" counters in consistent order init_evac, evac_thread_roots, --- 81,111 ---- update_flat_profiler_roots, update_management_roots, update_system_dictionary_roots, update_cldg_roots, update_jvmti_roots, + update_string_dedup_roots, update_finish_queues, finish_queues, + termination, weakrefs, weakrefs_process, + weakrefs_termination, weakrefs_enqueue, purge, purge_class_unload, purge_par, purge_par_codecache, purge_par_symbstring, purge_par_rmt, purge_par_classes, purge_par_sync, + purge_par_string_dedup, purge_cldg, prepare_evac, + complete_liveness, recycle_regions, // Per-thread timer block, should have "roots" counters in consistent order init_evac, evac_thread_roots,
*** 112,121 **** --- 118,128 ---- evac_flat_profiler_roots, evac_management_roots, evac_system_dictionary_roots, evac_cldg_roots, evac_jvmti_roots, + evac_string_dedup_roots, evac_finish_queues, final_evac_gross, final_evac,
*** 138,172 **** final_update_refs_flat_profiler_roots, final_update_refs_management_roots, final_update_refs_system_dict_roots, final_update_refs_cldg_roots, final_update_refs_jvmti_roots, final_update_refs_finish_queues, final_update_refs_recycle, - partial_gc_gross, - partial_gc, - partial_gc_prepare, - - // Per-thread timer block, should have "roots" counters in consistent order - partial_gc_work, - partial_gc_thread_roots, - partial_gc_code_roots, - partial_gc_string_table_roots, - partial_gc_universe_roots, - partial_gc_jni_roots, - partial_gc_jni_weak_roots, - partial_gc_synchronizer_roots, - partial_gc_flat_profiler_roots, - partial_gc_management_roots, - partial_gc_system_dict_roots, - partial_gc_cldg_roots, - partial_gc_jvmti_roots, - partial_gc_update_str_dedup_table, - partial_gc_recycle, - degen_gc_gross, degen_gc, full_gc_gross, full_gc, --- 145,159 ---- final_update_refs_flat_profiler_roots, final_update_refs_management_roots, final_update_refs_system_dict_roots, final_update_refs_cldg_roots, final_update_refs_jvmti_roots, + final_update_refs_string_dedup_roots, final_update_refs_finish_queues, final_update_refs_recycle, degen_gc_gross, degen_gc, full_gc_gross, full_gc,
*** 185,239 **** full_gc_flat_profiler_roots, full_gc_management_roots, full_gc_system_dictionary_roots, full_gc_cldg_roots, full_gc_jvmti_roots, full_gc_finish_queues, full_gc_mark, full_gc_mark_finish_queues, full_gc_weakrefs, full_gc_weakrefs_process, full_gc_weakrefs_enqueue, full_gc_purge, full_gc_purge_class_unload, full_gc_purge_par, full_gc_purge_par_codecache, full_gc_purge_par_symbstring, full_gc_purge_par_rmt, full_gc_purge_par_classes, full_gc_purge_par_sync, full_gc_purge_cldg, full_gc_calculate_addresses, full_gc_calculate_addresses_regular, full_gc_calculate_addresses_humong, full_gc_adjust_pointers, full_gc_copy_objects, full_gc_copy_objects_regular, full_gc_copy_objects_humong, full_gc_update_str_dedup_table, full_gc_resize_tlabs, // Longer concurrent phases at the end conc_mark, conc_preclean, conc_evac, conc_update_refs, conc_cleanup, conc_cleanup_recycle, conc_cleanup_reset_bitmaps, // Unclassified pause_other, conc_other, _num_phases }; // These are the subphases of GC phases (scan_roots, update_roots, ! // init_evac, final_update_refs_roots, partial_gc_work and full_gc_roots). // Make sure they are following this order. enum GCParPhases { ThreadRoots, CodeCacheRoots, StringTableRoots, --- 172,236 ---- full_gc_flat_profiler_roots, full_gc_management_roots, full_gc_system_dictionary_roots, full_gc_cldg_roots, full_gc_jvmti_roots, + full_gc_string_dedup_roots, full_gc_finish_queues, full_gc_mark, full_gc_mark_finish_queues, + full_gc_mark_termination, full_gc_weakrefs, full_gc_weakrefs_process, + full_gc_weakrefs_termination, full_gc_weakrefs_enqueue, full_gc_purge, full_gc_purge_class_unload, full_gc_purge_par, full_gc_purge_par_codecache, full_gc_purge_par_symbstring, full_gc_purge_par_rmt, full_gc_purge_par_classes, full_gc_purge_par_sync, full_gc_purge_cldg, + full_gc_purge_par_string_dedup, full_gc_calculate_addresses, full_gc_calculate_addresses_regular, full_gc_calculate_addresses_humong, full_gc_adjust_pointers, full_gc_copy_objects, full_gc_copy_objects_regular, full_gc_copy_objects_humong, + full_gc_copy_objects_reset_next, + full_gc_copy_objects_reset_complete, + full_gc_copy_objects_rebuild, full_gc_update_str_dedup_table, full_gc_resize_tlabs, // Longer concurrent phases at the end conc_mark, + conc_termination, conc_preclean, conc_evac, conc_update_refs, conc_cleanup, conc_cleanup_recycle, conc_cleanup_reset_bitmaps, + conc_uncommit, + // Unclassified pause_other, conc_other, _num_phases }; // These are the subphases of GC phases (scan_roots, update_roots, ! // init_evac, final_update_refs_roots, and full_gc_roots). // Make sure they are following this order. enum GCParPhases { ThreadRoots, CodeCacheRoots, StringTableRoots,
*** 244,253 **** --- 241,251 ---- FlatProfilerRoots, ManagementRoots, SystemDictionaryRoots, CLDGRoots, JVMTIRoots, + StringDedupRoots, FinishQueues, GCParPhasesSentinel }; private:
*** 259,280 **** private: TimingData _timing_data[_num_phases]; const char* _phase_names[_num_phases]; ShenandoahWorkerTimings* _worker_times; ShenandoahCollectorPolicy* _policy; public: ShenandoahPhaseTimings(); ! ShenandoahWorkerTimings* worker_times() const { return _worker_times; } // record phase start void record_phase_start(Phase phase); // record phase end and return elapsed time in seconds for the phase void record_phase_end(Phase phase); ! // record an elapsed time in seconds for the phase void record_phase_time(Phase phase, jint time_us); void record_workers_start(Phase phase); void record_workers_end(Phase phase); --- 257,281 ---- private: TimingData _timing_data[_num_phases]; const char* _phase_names[_num_phases]; ShenandoahWorkerTimings* _worker_times; + ShenandoahTerminationTimings* _termination_times; + ShenandoahCollectorPolicy* _policy; public: ShenandoahPhaseTimings(); ! ShenandoahWorkerTimings* const worker_times() const { return _worker_times; } ! ShenandoahTerminationTimings* const termination_times() const { return _termination_times; } // record phase start void record_phase_start(Phase phase); // record phase end and return elapsed time in seconds for the phase void record_phase_end(Phase phase); ! // record an elapsed time in microseconds for the phase void record_phase_time(Phase phase, jint time_us); void record_workers_start(Phase phase); void record_workers_end(Phase phase);
*** 309,314 **** --- 310,352 ---- public: ShenandoahWorkerTimingsTracker(ShenandoahWorkerTimings* worker_times, ShenandoahPhaseTimings::GCParPhases phase, uint worker_id); ~ShenandoahWorkerTimingsTracker(); }; + class ShenandoahTerminationTimings : public CHeapObj<mtGC> { + private: + ShenandoahWorkerDataArray<double>* _gc_termination_phase; + public: + ShenandoahTerminationTimings(uint max_gc_threads); + + // record the time a phase took in seconds + void record_time_secs(uint worker_i, double secs); + + double average() const { return _gc_termination_phase->average(); } + void reset() { _gc_termination_phase->reset(); } + + void print() const; + }; + + class ShenandoahTerminationTimingsTracker : public StackObj { + private: + double _start_time; + uint _worker_id; + + public: + ShenandoahTerminationTimingsTracker(uint worker_id); + ~ShenandoahTerminationTimingsTracker(); + }; + + + // Tracking termination time in specific GC phase + class ShenandoahTerminationTracker : public StackObj { + private: + ShenandoahPhaseTimings::Phase _phase; + + static ShenandoahPhaseTimings::Phase currentPhase; + public: + ShenandoahTerminationTracker(ShenandoahPhaseTimings::Phase phase); + ~ShenandoahTerminationTracker(); + }; + #endif // SHARE_VM_GC_SHENANDOAH_SHENANDOAHGCPHASETIMEINGS_HPP
< prev index next >