1229 } 1230 1231 void G1CollectorPolicy::report_ihop_statistics() { 1232 _ihop_control->print(); 1233 } 1234 1235 void G1CollectorPolicy::print_phases() { 1236 phase_times()->print(); 1237 } 1238 1239 void G1CollectorPolicy::adjust_concurrent_refinement(double update_rs_time, 1240 double update_rs_processed_buffers, 1241 double goal_ms) { 1242 DirtyCardQueueSet& dcqs = JavaThread::dirty_card_queue_set(); 1243 ConcurrentG1Refine *cg1r = G1CollectedHeap::heap()->concurrent_g1_refine(); 1244 1245 if (G1UseAdaptiveConcRefinement) { 1246 const int k_gy = 3, k_gr = 6; 1247 const double inc_k = 1.1, dec_k = 0.9; 1248 1249 int g = cg1r->green_zone(); 1250 if (update_rs_time > goal_ms) { 1251 g = (int)(g * dec_k); // Can become 0, that's OK. That would mean a mutator-only processing. 1252 } else { 1253 if (update_rs_time < goal_ms && update_rs_processed_buffers > g) { 1254 g = (int)MAX2(g * inc_k, g + 1.0); 1255 } 1256 } 1257 // Change the refinement threads params 1258 cg1r->set_green_zone(g); 1259 cg1r->set_yellow_zone(g * k_gy); 1260 cg1r->set_red_zone(g * k_gr); 1261 cg1r->reinitialize_threads(); 1262 1263 int processing_threshold_delta = MAX2((int)(cg1r->green_zone() * _predictor.sigma()), 1); 1264 int processing_threshold = MIN2(cg1r->green_zone() + processing_threshold_delta, 1265 cg1r->yellow_zone()); 1266 // Change the barrier params 1267 dcqs.set_process_completed_threshold(processing_threshold); 1268 dcqs.set_max_completed_queue(cg1r->red_zone()); 1269 } 1270 1271 int curr_queue_size = dcqs.completed_buffers_num(); 1272 if (curr_queue_size >= cg1r->yellow_zone()) { 1273 dcqs.set_completed_queue_padding(curr_queue_size); 1274 } else { 1275 dcqs.set_completed_queue_padding(0); 1276 } 1277 dcqs.notify_if_necessary(); 1278 } 1279 1280 size_t G1CollectorPolicy::predict_rs_length_diff() const { 1281 return get_new_size_prediction(_rs_length_diff_seq); 1282 } 1283 1284 double G1CollectorPolicy::predict_alloc_rate_ms() const { 1285 return get_new_prediction(_alloc_rate_ms_seq); 1286 } 1287 1288 double G1CollectorPolicy::predict_cost_per_card_ms() const { 1289 return get_new_prediction(_cost_per_card_ms_seq); 1290 } 1291 | 1229 } 1230 1231 void G1CollectorPolicy::report_ihop_statistics() { 1232 _ihop_control->print(); 1233 } 1234 1235 void G1CollectorPolicy::print_phases() { 1236 phase_times()->print(); 1237 } 1238 1239 void G1CollectorPolicy::adjust_concurrent_refinement(double update_rs_time, 1240 double update_rs_processed_buffers, 1241 double goal_ms) { 1242 DirtyCardQueueSet& dcqs = JavaThread::dirty_card_queue_set(); 1243 ConcurrentG1Refine *cg1r = G1CollectedHeap::heap()->concurrent_g1_refine(); 1244 1245 if (G1UseAdaptiveConcRefinement) { 1246 const int k_gy = 3, k_gr = 6; 1247 const double inc_k = 1.1, dec_k = 0.9; 1248 1249 size_t g = cg1r->green_zone(); 1250 if (update_rs_time > goal_ms) { 1251 g = (size_t)(g * dec_k); // Can become 0, that's OK. That would mean a mutator-only processing. 1252 } else { 1253 if (update_rs_time < goal_ms && update_rs_processed_buffers > g) { 1254 g = (size_t)MAX2(g * inc_k, g + 1.0); 1255 } 1256 } 1257 // Change the refinement threads params 1258 cg1r->set_green_zone(g); 1259 cg1r->set_yellow_zone(g * k_gy); 1260 cg1r->set_red_zone(g * k_gr); 1261 cg1r->reinitialize_threads(); 1262 1263 size_t processing_threshold_delta = MAX2((int)(cg1r->green_zone() * _predictor.sigma()), 1); 1264 size_t processing_threshold = MIN2(cg1r->green_zone() + processing_threshold_delta, 1265 cg1r->yellow_zone()); 1266 // Change the barrier params 1267 dcqs.set_process_completed_threshold(processing_threshold); 1268 dcqs.set_max_completed_queue(cg1r->red_zone()); 1269 } 1270 1271 size_t curr_queue_size = dcqs.completed_buffers_num(); 1272 if (curr_queue_size >= cg1r->yellow_zone()) { 1273 dcqs.set_completed_queue_padding(curr_queue_size); 1274 } else { 1275 dcqs.set_completed_queue_padding(0); 1276 } 1277 dcqs.notify_if_necessary(); 1278 } 1279 1280 size_t G1CollectorPolicy::predict_rs_length_diff() const { 1281 return get_new_size_prediction(_rs_length_diff_seq); 1282 } 1283 1284 double G1CollectorPolicy::predict_alloc_rate_ms() const { 1285 return get_new_prediction(_alloc_rate_ms_seq); 1286 } 1287 1288 double G1CollectorPolicy::predict_cost_per_card_ms() const { 1289 return get_new_prediction(_cost_per_card_ms_seq); 1290 } 1291 |