1306 } 1307 1308 void G1CollectorPolicy::report_ihop_statistics() { 1309 _ihop_control->print(); 1310 } 1311 1312 void G1CollectorPolicy::print_phases() { 1313 phase_times()->print(); 1314 } 1315 1316 void G1CollectorPolicy::adjust_concurrent_refinement(double update_rs_time, 1317 double update_rs_processed_buffers, 1318 double goal_ms) { 1319 DirtyCardQueueSet& dcqs = JavaThread::dirty_card_queue_set(); 1320 ConcurrentG1Refine *cg1r = G1CollectedHeap::heap()->concurrent_g1_refine(); 1321 1322 if (G1UseAdaptiveConcRefinement) { 1323 const int k_gy = 3, k_gr = 6; 1324 const double inc_k = 1.1, dec_k = 0.9; 1325 1326 int g = cg1r->green_zone(); 1327 if (update_rs_time > goal_ms) { 1328 g = (int)(g * dec_k); // Can become 0, that's OK. That would mean a mutator-only processing. 1329 } else { 1330 if (update_rs_time < goal_ms && update_rs_processed_buffers > g) { 1331 g = (int)MAX2(g * inc_k, g + 1.0); 1332 } 1333 } 1334 // Change the refinement threads params 1335 cg1r->set_green_zone(g); 1336 cg1r->set_yellow_zone(g * k_gy); 1337 cg1r->set_red_zone(g * k_gr); 1338 cg1r->reinitialize_threads(); 1339 1340 int processing_threshold_delta = MAX2((int)(cg1r->green_zone() * _predictor.sigma()), 1); 1341 int processing_threshold = MIN2(cg1r->green_zone() + processing_threshold_delta, 1342 cg1r->yellow_zone()); 1343 // Change the barrier params 1344 dcqs.set_process_completed_threshold(processing_threshold); 1345 dcqs.set_max_completed_queue(cg1r->red_zone()); 1346 } 1347 1348 int curr_queue_size = dcqs.completed_buffers_num(); 1349 if (curr_queue_size >= cg1r->yellow_zone()) { 1350 dcqs.set_completed_queue_padding(curr_queue_size); 1351 } else { 1352 dcqs.set_completed_queue_padding(0); 1353 } 1354 dcqs.notify_if_necessary(); 1355 } 1356 1357 size_t G1CollectorPolicy::predict_rs_length_diff() const { 1358 return get_new_size_prediction(_rs_length_diff_seq); 1359 } 1360 1361 double G1CollectorPolicy::predict_alloc_rate_ms() const { 1362 return get_new_prediction(_alloc_rate_ms_seq); 1363 } 1364 1365 double G1CollectorPolicy::predict_cost_per_card_ms() const { 1366 return get_new_prediction(_cost_per_card_ms_seq); 1367 } 1368 | 1306 } 1307 1308 void G1CollectorPolicy::report_ihop_statistics() { 1309 _ihop_control->print(); 1310 } 1311 1312 void G1CollectorPolicy::print_phases() { 1313 phase_times()->print(); 1314 } 1315 1316 void G1CollectorPolicy::adjust_concurrent_refinement(double update_rs_time, 1317 double update_rs_processed_buffers, 1318 double goal_ms) { 1319 DirtyCardQueueSet& dcqs = JavaThread::dirty_card_queue_set(); 1320 ConcurrentG1Refine *cg1r = G1CollectedHeap::heap()->concurrent_g1_refine(); 1321 1322 if (G1UseAdaptiveConcRefinement) { 1323 const int k_gy = 3, k_gr = 6; 1324 const double inc_k = 1.1, dec_k = 0.9; 1325 1326 size_t g = cg1r->green_zone(); 1327 if (update_rs_time > goal_ms) { 1328 g = (size_t)(g * dec_k); // Can become 0, that's OK. That would mean a mutator-only processing. 1329 } else { 1330 if (update_rs_time < goal_ms && update_rs_processed_buffers > g) { 1331 g = (size_t)MAX2(g * inc_k, g + 1.0); 1332 } 1333 } 1334 // Change the refinement threads params 1335 cg1r->set_green_zone(g); 1336 cg1r->set_yellow_zone(g * k_gy); 1337 cg1r->set_red_zone(g * k_gr); 1338 cg1r->reinitialize_threads(); 1339 1340 size_t processing_threshold_delta = MAX2<size_t>(cg1r->green_zone() * _predictor.sigma(), 1); 1341 size_t processing_threshold = MIN2(cg1r->green_zone() + processing_threshold_delta, 1342 cg1r->yellow_zone()); 1343 // Change the barrier params 1344 dcqs.set_process_completed_threshold(processing_threshold); 1345 dcqs.set_max_completed_queue(cg1r->red_zone()); 1346 } 1347 1348 size_t curr_queue_size = dcqs.completed_buffers_num(); 1349 if (curr_queue_size >= cg1r->yellow_zone()) { 1350 dcqs.set_completed_queue_padding(curr_queue_size); 1351 } else { 1352 dcqs.set_completed_queue_padding(0); 1353 } 1354 dcqs.notify_if_necessary(); 1355 } 1356 1357 size_t G1CollectorPolicy::predict_rs_length_diff() const { 1358 return get_new_size_prediction(_rs_length_diff_seq); 1359 } 1360 1361 double G1CollectorPolicy::predict_alloc_rate_ms() const { 1362 return get_new_prediction(_alloc_rate_ms_seq); 1363 } 1364 1365 double G1CollectorPolicy::predict_cost_per_card_ms() const { 1366 return get_new_prediction(_cost_per_card_ms_seq); 1367 } 1368 |