< prev index next >

src/share/vm/gc_implementation/g1/g1GCPhaseTimes.hpp

Print this page
rev 7854 : imported patch 8027962-per-phase-timing-measurements-for-strong-roots-processing


  90     return _sum;
  91   }
  92 
  93   void print(int level, const char* title);
  94 
  95   void reset() PRODUCT_RETURN;
  96   void verify() PRODUCT_RETURN;
  97 
  98  private:
  99 
 100   void calculate_totals(){
 101     _sum = (T)0;
 102     for (uint i = 0; i < _length; ++i) {
 103       _sum += _data[i];
 104     }
 105     _average = (double)_sum / (double)_length;
 106     _has_new_data = false;
 107   }
 108 };
 109 



















 110 class G1GCPhaseTimes : public CHeapObj<mtGC> {
 111 
 112  private:
 113   uint _active_gc_threads;
 114   uint _max_gc_threads;



 115 
 116   WorkerDataArray<double> _last_gc_worker_start_times_ms;
 117   WorkerDataArray<double> _last_ext_root_scan_times_ms;

 118   WorkerDataArray<double> _last_satb_filtering_times_ms;
 119   WorkerDataArray<double> _last_update_rs_times_ms;
 120   WorkerDataArray<int>    _last_update_rs_processed_buffers;
 121   WorkerDataArray<double> _last_scan_rs_times_ms;
 122   WorkerDataArray<double> _last_strong_code_root_scan_times_ms;
 123   WorkerDataArray<double> _last_obj_copy_times_ms;
 124   WorkerDataArray<double> _last_termination_times_ms;
 125   WorkerDataArray<size_t> _last_termination_attempts;
 126   WorkerDataArray<double> _last_gc_worker_end_times_ms;
 127   WorkerDataArray<double> _last_gc_worker_times_ms;
 128   WorkerDataArray<double> _last_gc_worker_other_times_ms;
 129 
 130   double _cur_collection_par_time_ms;
 131   double _cur_collection_code_root_fixup_time_ms;
 132   double _cur_strong_code_root_purge_time_ms;
 133 
 134   double _cur_evac_fail_recalc_used;
 135   double _cur_evac_fail_restore_remsets;
 136   double _cur_evac_fail_remove_self_forwards;
 137 


 154   double _recorded_redirty_logged_cards_time_ms;
 155 
 156   double _recorded_young_free_cset_time_ms;
 157   double _recorded_non_young_free_cset_time_ms;
 158 
 159   double _cur_fast_reclaim_humongous_time_ms;
 160   double _cur_fast_reclaim_humongous_register_time_ms;
 161   size_t _cur_fast_reclaim_humongous_total;
 162   size_t _cur_fast_reclaim_humongous_candidates;
 163   size_t _cur_fast_reclaim_humongous_reclaimed;
 164 
 165   double _cur_verify_before_time_ms;
 166   double _cur_verify_after_time_ms;
 167 
 168   // Helper methods for detailed logging
 169   void print_stats(int level, const char* str, double value);
 170   void print_stats(int level, const char* str, size_t value);
 171   void print_stats(int level, const char* str, double value, uint workers);
 172 
 173  public:
 174   G1GCPhaseTimes(uint max_gc_threads);





 175   void note_gc_start(uint active_gc_threads);
 176   void note_gc_end();
 177   void print(double pause_time_sec);
 178 
 179   void record_gc_worker_start_time(uint worker_i, double ms) {
 180     _last_gc_worker_start_times_ms.set(worker_i, ms);
 181   }
 182 
 183   void record_ext_root_scan_time(uint worker_i, double ms) {
 184     _last_ext_root_scan_times_ms.set(worker_i, ms);
 185   }
 186 
 187   void record_satb_filtering_time(uint worker_i, double ms) {
 188     _last_satb_filtering_times_ms.set(worker_i, ms);
 189   }
 190 
 191   void record_update_rs_time(uint worker_i, double ms) {
 192     _last_update_rs_times_ms.set(worker_i, ms);
 193   }
 194 




  90     return _sum;
  91   }
  92 
  93   void print(int level, const char* title);
  94 
  95   void reset() PRODUCT_RETURN;
  96   void verify() PRODUCT_RETURN;
  97 
  98  private:
  99 
 100   void calculate_totals(){
 101     _sum = (T)0;
 102     for (uint i = 0; i < _length; ++i) {
 103       _sum += _data[i];
 104     }
 105     _average = (double)_sum / (double)_length;
 106     _has_new_data = false;
 107   }
 108 };
 109 
 110 class GCPhaseTimeTracker VALUE_OBJ_CLASS_SPEC {
 111 private:
 112   friend class G1GCPhaseTimes;
 113 
 114   WorkerDataArray<double>** _data;
 115   uint _num_phases;
 116   uint _worker_id;
 117 public:
 118   GCPhaseTimeTracker(WorkerDataArray<double>** data, uint num_phases, uint worker_id) :
 119     _data(data), _num_phases(num_phases), _worker_id(worker_id) { }
 120 
 121   bool active() const { return _num_phases > 0; }
 122 
 123   void set_value(uint phase, double value) {
 124     assert(_data != NULL, "just checking");
 125     _data[phase]->set(_worker_id, value);
 126   }
 127 };
 128 
 129 class G1GCPhaseTimes : public CHeapObj<mtGC> {
 130 
 131  private:
 132   uint _active_gc_threads;
 133   uint _max_gc_threads;
 134   uint _num_ext_root_scan_phases;
 135 
 136   bool track_ext_root_scan_phases() const { return _num_ext_root_scan_phases > 0; }
 137 
 138   WorkerDataArray<double> _last_gc_worker_start_times_ms;
 139   WorkerDataArray<double> _last_ext_root_scan_times_ms;
 140   WorkerDataArray<double>** _last_ext_root_scan_phase_times_ms;
 141   WorkerDataArray<double> _last_satb_filtering_times_ms;
 142   WorkerDataArray<double> _last_update_rs_times_ms;
 143   WorkerDataArray<int>    _last_update_rs_processed_buffers;
 144   WorkerDataArray<double> _last_scan_rs_times_ms;
 145   WorkerDataArray<double> _last_strong_code_root_scan_times_ms;
 146   WorkerDataArray<double> _last_obj_copy_times_ms;
 147   WorkerDataArray<double> _last_termination_times_ms;
 148   WorkerDataArray<size_t> _last_termination_attempts;
 149   WorkerDataArray<double> _last_gc_worker_end_times_ms;
 150   WorkerDataArray<double> _last_gc_worker_times_ms;
 151   WorkerDataArray<double> _last_gc_worker_other_times_ms;
 152 
 153   double _cur_collection_par_time_ms;
 154   double _cur_collection_code_root_fixup_time_ms;
 155   double _cur_strong_code_root_purge_time_ms;
 156 
 157   double _cur_evac_fail_recalc_used;
 158   double _cur_evac_fail_restore_remsets;
 159   double _cur_evac_fail_remove_self_forwards;
 160 


 177   double _recorded_redirty_logged_cards_time_ms;
 178 
 179   double _recorded_young_free_cset_time_ms;
 180   double _recorded_non_young_free_cset_time_ms;
 181 
 182   double _cur_fast_reclaim_humongous_time_ms;
 183   double _cur_fast_reclaim_humongous_register_time_ms;
 184   size_t _cur_fast_reclaim_humongous_total;
 185   size_t _cur_fast_reclaim_humongous_candidates;
 186   size_t _cur_fast_reclaim_humongous_reclaimed;
 187 
 188   double _cur_verify_before_time_ms;
 189   double _cur_verify_after_time_ms;
 190 
 191   // Helper methods for detailed logging
 192   void print_stats(int level, const char* str, double value);
 193   void print_stats(int level, const char* str, size_t value);
 194   void print_stats(int level, const char* str, double value, uint workers);
 195 
 196  public:
 197   G1GCPhaseTimes(uint max_gc_threads, uint num_ext_root_scan_phases);
 198   virtual ~G1GCPhaseTimes();
 199 
 200   WorkerDataArray<double>** get_ext_root_scan_phase_times() const { return _last_ext_root_scan_phase_times_ms; }
 201   uint num_ext_root_scan_phases() const { return _num_ext_root_scan_phases; }
 202 
 203   void note_gc_start(uint active_gc_threads);
 204   void note_gc_end();
 205   void print(double pause_time_sec);
 206 
 207   void record_gc_worker_start_time(uint worker_i, double ms) {
 208     _last_gc_worker_start_times_ms.set(worker_i, ms);
 209   }
 210 
 211   void record_ext_root_scan_time(uint worker_i, double ms) {
 212     _last_ext_root_scan_times_ms.set(worker_i, ms);
 213   }
 214 
 215   void record_satb_filtering_time(uint worker_i, double ms) {
 216     _last_satb_filtering_times_ms.set(worker_i, ms);
 217   }
 218 
 219   void record_update_rs_time(uint worker_i, double ms) {
 220     _last_update_rs_times_ms.set(worker_i, ms);
 221   }
 222 


< prev index next >