< prev index next >

src/hotspot/share/gc/g1/g1ConcurrentRefineThread.cpp

Print this page
rev 55404 : 8226197: Reducing G1?s CPU cost with simplified write post-barrier and disabling concurrent refinement
Summary: A prototype to add a mode for G1 to use a simplified write post-barrier. Guarded by new flag G1FastWriteBarrier.


  75   if (!is_primary()) {
  76     set_active(true);
  77   } else {
  78     G1DirtyCardQueueSet& dcqs = G1BarrierSet::dirty_card_queue_set();
  79     dcqs.set_process_completed_buffers(true);
  80   }
  81   _monitor->notify();
  82 }
  83 
  84 void G1ConcurrentRefineThread::deactivate() {
  85   MutexLocker x(_monitor, Mutex::_no_safepoint_check_flag);
  86   if (!is_primary()) {
  87     set_active(false);
  88   } else {
  89     G1DirtyCardQueueSet& dcqs = G1BarrierSet::dirty_card_queue_set();
  90     dcqs.set_process_completed_buffers(false);
  91   }
  92 }
  93 
  94 void G1ConcurrentRefineThread::run_service() {

  95   _vtime_start = os::elapsedVTime();
  96 
  97   while (!should_terminate()) {
  98     // Wait for work
  99     wait_for_completed_buffers();
 100     if (should_terminate()) {
 101       break;
 102     }
 103 
 104     size_t buffers_processed = 0;
 105     log_debug(gc, refine)("Activated worker %d, on threshold: " SIZE_FORMAT ", current: " SIZE_FORMAT,
 106                           _worker_id, _cr->activation_threshold(_worker_id),
 107                            G1BarrierSet::dirty_card_queue_set().completed_buffers_num());
 108 
 109     {
 110       SuspendibleThreadSetJoiner sts_join;
 111 
 112       while (!should_terminate()) {
 113         if (sts_join.should_yield()) {
 114           sts_join.yield();




  75   if (!is_primary()) {
  76     set_active(true);
  77   } else {
  78     G1DirtyCardQueueSet& dcqs = G1BarrierSet::dirty_card_queue_set();
  79     dcqs.set_process_completed_buffers(true);
  80   }
  81   _monitor->notify();
  82 }
  83 
  84 void G1ConcurrentRefineThread::deactivate() {
  85   MutexLocker x(_monitor, Mutex::_no_safepoint_check_flag);
  86   if (!is_primary()) {
  87     set_active(false);
  88   } else {
  89     G1DirtyCardQueueSet& dcqs = G1BarrierSet::dirty_card_queue_set();
  90     dcqs.set_process_completed_buffers(false);
  91   }
  92 }
  93 
  94 void G1ConcurrentRefineThread::run_service() {
  95   assert(!G1FastWriteBarrier, "ConcurrentRefine should be disabled");
  96   _vtime_start = os::elapsedVTime();
  97 
  98   while (!should_terminate()) {
  99     // Wait for work
 100     wait_for_completed_buffers();
 101     if (should_terminate()) {
 102       break;
 103     }
 104 
 105     size_t buffers_processed = 0;
 106     log_debug(gc, refine)("Activated worker %d, on threshold: " SIZE_FORMAT ", current: " SIZE_FORMAT,
 107                           _worker_id, _cr->activation_threshold(_worker_id),
 108                            G1BarrierSet::dirty_card_queue_set().completed_buffers_num());
 109 
 110     {
 111       SuspendibleThreadSetJoiner sts_join;
 112 
 113       while (!should_terminate()) {
 114         if (sts_join.should_yield()) {
 115           sts_join.yield();


< prev index next >