< prev index next >

src/share/vm/gc/g1/g1GCPhaseTimes.cpp

Print this page
rev 11593 : imported patch 8034842-par-free-cset-old


  74   _gc_par_phases[Other] = new WorkerDataArray<double>(max_gc_threads, "GC Worker Other (ms):");
  75 
  76   _update_rs_processed_buffers = new WorkerDataArray<size_t>(max_gc_threads, "Processed Buffers:");
  77   _gc_par_phases[UpdateRS]->link_thread_work_items(_update_rs_processed_buffers);
  78 
  79   _termination_attempts = new WorkerDataArray<size_t>(max_gc_threads, "Termination Attempts:");
  80   _gc_par_phases[Termination]->link_thread_work_items(_termination_attempts);
  81 
  82   if (UseStringDeduplication) {
  83     _gc_par_phases[StringDedupQueueFixup] = new WorkerDataArray<double>(max_gc_threads, "Queue Fixup (ms):");
  84     _gc_par_phases[StringDedupTableFixup] = new WorkerDataArray<double>(max_gc_threads, "Table Fixup (ms):");
  85   } else {
  86     _gc_par_phases[StringDedupQueueFixup] = NULL;
  87     _gc_par_phases[StringDedupTableFixup] = NULL;
  88   }
  89 
  90   _gc_par_phases[RedirtyCards] = new WorkerDataArray<double>(max_gc_threads, "Parallel Redirty (ms):");
  91   _redirtied_cards = new WorkerDataArray<size_t>(max_gc_threads, "Redirtied Cards:");
  92   _gc_par_phases[RedirtyCards]->link_thread_work_items(_redirtied_cards);
  93 



  94   _gc_par_phases[PreserveCMReferents] = new WorkerDataArray<double>(max_gc_threads, "Parallel Preserve CM Refs (ms):");
  95 }
  96 
  97 void G1GCPhaseTimes::note_gc_start() {
  98   _gc_start_counter = os::elapsed_counter();
  99   _cur_expand_heap_time_ms = 0.0;
 100   _external_accounted_time_ms = 0.0;
 101 
 102   for (int i = 0; i < GCParPhasesSentinel; i++) {
 103     if (_gc_par_phases[i] != NULL) {
 104       _gc_par_phases[i]->reset();
 105     }
 106   }
 107 }
 108 
 109 #define ASSERT_PHASE_UNINITIALIZED(phase) \
 110     assert(_gc_par_phases[phase]->get(i) == uninitialized, "Phase " #phase " reported for thread that was not started");
 111 
 112 double G1GCPhaseTimes::worker_time(GCParPhases phase, uint worker) {
 113   double value = _gc_par_phases[phase]->get(worker);


 261   debug_phase(_gc_par_phases[ScanRS]);
 262   debug_phase(_gc_par_phases[CodeRoots]);
 263   debug_phase(_gc_par_phases[ObjCopy]);
 264   debug_phase(_gc_par_phases[Termination]);
 265   debug_phase(_gc_par_phases[Other]);
 266   debug_phase(_gc_par_phases[GCWorkerTotal]);
 267   trace_phase(_gc_par_phases[GCWorkerEnd], false);
 268 
 269   info_line_and_account("Code Roots", _cur_collection_code_root_fixup_time_ms + _cur_strong_code_root_purge_time_ms);
 270   debug_line("Code Roots Fixup", _cur_collection_code_root_fixup_time_ms);
 271   debug_line("Code Roots Purge", _cur_strong_code_root_purge_time_ms);
 272 
 273   if (G1StringDedup::is_enabled()) {
 274     info_line_and_account("String Dedup Fixup", _cur_string_dedup_fixup_time_ms);
 275     debug_phase(_gc_par_phases[StringDedupQueueFixup]);
 276     debug_phase(_gc_par_phases[StringDedupTableFixup]);
 277   }
 278   info_line_and_account("Clear Card Table", _cur_clear_ct_time_ms);
 279   info_line_and_account("Expand Heap After Collection", _cur_expand_heap_time_ms);
 280 
 281   double free_cset_time = _recorded_young_free_cset_time_ms + _recorded_non_young_free_cset_time_ms;
 282   info_line_and_account("Free Collection Set", free_cset_time);
 283   debug_line("Young Free Collection Set", _recorded_young_free_cset_time_ms);
 284   debug_line("Non-Young Free Collection Set", _recorded_non_young_free_cset_time_ms);

 285   info_line_and_account("Merge Per-Thread State", _recorded_merge_pss_time_ms);
 286 
 287   info_line("Other", _gc_pause_time_ms - accounted_time_ms);
 288   if (_cur_verify_before_time_ms > 0.0) {
 289     debug_line("Verify Before", _cur_verify_before_time_ms);
 290   }
 291   if (G1CollectedHeap::heap()->evacuation_failed()) {
 292     double evac_fail_handling = _cur_evac_fail_recalc_used + _cur_evac_fail_remove_self_forwards +
 293       _cur_evac_fail_restore_remsets;
 294     debug_line("Evacuation Failure", evac_fail_handling);
 295     trace_line("Recalculate Used", _cur_evac_fail_recalc_used);
 296     trace_line("Remove Self Forwards",_cur_evac_fail_remove_self_forwards);
 297     trace_line("Restore RemSet", _cur_evac_fail_restore_remsets);
 298   }
 299   debug_line("Choose CSet", (_recorded_young_cset_choice_time_ms + _recorded_non_young_cset_choice_time_ms));
 300   debug_line("Preserve CM Refs", _recorded_preserve_cm_referents_time_ms);
 301   trace_phase(_gc_par_phases[PreserveCMReferents]);
 302   debug_line("Reference Processing", _cur_ref_proc_time_ms);
 303   debug_line("Reference Enqueuing", _cur_ref_enq_time_ms);
 304   debug_line("Redirty Cards", _recorded_redirty_logged_cards_time_ms);




  74   _gc_par_phases[Other] = new WorkerDataArray<double>(max_gc_threads, "GC Worker Other (ms):");
  75 
  76   _update_rs_processed_buffers = new WorkerDataArray<size_t>(max_gc_threads, "Processed Buffers:");
  77   _gc_par_phases[UpdateRS]->link_thread_work_items(_update_rs_processed_buffers);
  78 
  79   _termination_attempts = new WorkerDataArray<size_t>(max_gc_threads, "Termination Attempts:");
  80   _gc_par_phases[Termination]->link_thread_work_items(_termination_attempts);
  81 
  82   if (UseStringDeduplication) {
  83     _gc_par_phases[StringDedupQueueFixup] = new WorkerDataArray<double>(max_gc_threads, "Queue Fixup (ms):");
  84     _gc_par_phases[StringDedupTableFixup] = new WorkerDataArray<double>(max_gc_threads, "Table Fixup (ms):");
  85   } else {
  86     _gc_par_phases[StringDedupQueueFixup] = NULL;
  87     _gc_par_phases[StringDedupTableFixup] = NULL;
  88   }
  89 
  90   _gc_par_phases[RedirtyCards] = new WorkerDataArray<double>(max_gc_threads, "Parallel Redirty (ms):");
  91   _redirtied_cards = new WorkerDataArray<size_t>(max_gc_threads, "Redirtied Cards:");
  92   _gc_par_phases[RedirtyCards]->link_thread_work_items(_redirtied_cards);
  93 
  94   _gc_par_phases[YoungFreeCSet] = new WorkerDataArray<double>(max_gc_threads, "Young Free Collection Set (ms):");
  95   _gc_par_phases[NonYoungFreeCSet] = new WorkerDataArray<double>(max_gc_threads, "Non-Young Free Collection Set (ms):");
  96 
  97   _gc_par_phases[PreserveCMReferents] = new WorkerDataArray<double>(max_gc_threads, "Parallel Preserve CM Refs (ms):");
  98 }
  99 
 100 void G1GCPhaseTimes::note_gc_start() {
 101   _gc_start_counter = os::elapsed_counter();
 102   _cur_expand_heap_time_ms = 0.0;
 103   _external_accounted_time_ms = 0.0;
 104 
 105   for (int i = 0; i < GCParPhasesSentinel; i++) {
 106     if (_gc_par_phases[i] != NULL) {
 107       _gc_par_phases[i]->reset();
 108     }
 109   }
 110 }
 111 
 112 #define ASSERT_PHASE_UNINITIALIZED(phase) \
 113     assert(_gc_par_phases[phase]->get(i) == uninitialized, "Phase " #phase " reported for thread that was not started");
 114 
 115 double G1GCPhaseTimes::worker_time(GCParPhases phase, uint worker) {
 116   double value = _gc_par_phases[phase]->get(worker);


 264   debug_phase(_gc_par_phases[ScanRS]);
 265   debug_phase(_gc_par_phases[CodeRoots]);
 266   debug_phase(_gc_par_phases[ObjCopy]);
 267   debug_phase(_gc_par_phases[Termination]);
 268   debug_phase(_gc_par_phases[Other]);
 269   debug_phase(_gc_par_phases[GCWorkerTotal]);
 270   trace_phase(_gc_par_phases[GCWorkerEnd], false);
 271 
 272   info_line_and_account("Code Roots", _cur_collection_code_root_fixup_time_ms + _cur_strong_code_root_purge_time_ms);
 273   debug_line("Code Roots Fixup", _cur_collection_code_root_fixup_time_ms);
 274   debug_line("Code Roots Purge", _cur_strong_code_root_purge_time_ms);
 275 
 276   if (G1StringDedup::is_enabled()) {
 277     info_line_and_account("String Dedup Fixup", _cur_string_dedup_fixup_time_ms);
 278     debug_phase(_gc_par_phases[StringDedupQueueFixup]);
 279     debug_phase(_gc_par_phases[StringDedupTableFixup]);
 280   }
 281   info_line_and_account("Clear Card Table", _cur_clear_ct_time_ms);
 282   info_line_and_account("Expand Heap After Collection", _cur_expand_heap_time_ms);
 283 
 284   info_line_and_account("Free Collection Set", _recorded_total_free_cset_time_ms);
 285   debug_line("Free Collection Set Serial", _recorded_serial_free_cset_time_ms);
 286   debug_phase(_gc_par_phases[YoungFreeCSet]);
 287   debug_phase(_gc_par_phases[NonYoungFreeCSet]);
 288 
 289   info_line_and_account("Merge Per-Thread State", _recorded_merge_pss_time_ms);
 290 
 291   info_line("Other", _gc_pause_time_ms - accounted_time_ms);
 292   if (_cur_verify_before_time_ms > 0.0) {
 293     debug_line("Verify Before", _cur_verify_before_time_ms);
 294   }
 295   if (G1CollectedHeap::heap()->evacuation_failed()) {
 296     double evac_fail_handling = _cur_evac_fail_recalc_used + _cur_evac_fail_remove_self_forwards +
 297       _cur_evac_fail_restore_remsets;
 298     debug_line("Evacuation Failure", evac_fail_handling);
 299     trace_line("Recalculate Used", _cur_evac_fail_recalc_used);
 300     trace_line("Remove Self Forwards",_cur_evac_fail_remove_self_forwards);
 301     trace_line("Restore RemSet", _cur_evac_fail_restore_remsets);
 302   }
 303   debug_line("Choose CSet", (_recorded_young_cset_choice_time_ms + _recorded_non_young_cset_choice_time_ms));
 304   debug_line("Preserve CM Refs", _recorded_preserve_cm_referents_time_ms);
 305   trace_phase(_gc_par_phases[PreserveCMReferents]);
 306   debug_line("Reference Processing", _cur_ref_proc_time_ms);
 307   debug_line("Reference Enqueuing", _cur_ref_enq_time_ms);
 308   debug_line("Redirty Cards", _recorded_redirty_logged_cards_time_ms);


< prev index next >