comparison src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp @ 794:315a5d70b295

6484957: G1: parallel concurrent refinement 6826318: G1: remove traversal-based refinement code Summary: Removed traversal-based refinement code as it's no longer used. Made the concurrent refinement (queue-based) parallel. Reviewed-by: tonyp
author iveresov
date Mon, 11 May 2009 16:30:56 -0700
parents 20c6f43950b5
children df6caf649ff7
comparison
equal deleted inserted replaced
758:9b3a41ccc927 794:315a5d70b295
164 _num_markings(0), 164 _num_markings(0),
165 _n_marks(0), 165 _n_marks(0),
166 _n_pauses_at_mark_end(0), 166 _n_pauses_at_mark_end(0),
167 167
168 _all_full_gc_times_ms(new NumberSeq()), 168 _all_full_gc_times_ms(new NumberSeq()),
169
170 _conc_refine_enabled(0),
171 _conc_refine_zero_traversals(0),
172 _conc_refine_max_traversals(0),
173 _conc_refine_current_delta(G1ConcRefineInitialDelta),
174 169
175 // G1PausesBtwnConcMark defaults to -1 170 // G1PausesBtwnConcMark defaults to -1
176 // so the hack is to do the cast QQQ FIXME 171 // so the hack is to do the cast QQQ FIXME
177 _pauses_btwn_concurrent_mark((size_t)G1PausesBtwnConcMark), 172 _pauses_btwn_concurrent_mark((size_t)G1PausesBtwnConcMark),
178 _n_marks_since_last_pause(0), 173 _n_marks_since_last_pause(0),
1632 } 1627 }
1633 if (parallel) { 1628 if (parallel) {
1634 print_stats(1, "Parallel Time", _cur_collection_par_time_ms); 1629 print_stats(1, "Parallel Time", _cur_collection_par_time_ms);
1635 print_par_stats(2, "Update RS (Start)", _par_last_update_rs_start_times_ms, false); 1630 print_par_stats(2, "Update RS (Start)", _par_last_update_rs_start_times_ms, false);
1636 print_par_stats(2, "Update RS", _par_last_update_rs_times_ms); 1631 print_par_stats(2, "Update RS", _par_last_update_rs_times_ms);
1637 if (G1RSBarrierUseQueue) 1632 print_par_buffers(3, "Processed Buffers",
1638 print_par_buffers(3, "Processed Buffers", 1633 _par_last_update_rs_processed_buffers, true);
1639 _par_last_update_rs_processed_buffers, true);
1640 print_par_stats(2, "Ext Root Scanning", _par_last_ext_root_scan_times_ms); 1634 print_par_stats(2, "Ext Root Scanning", _par_last_ext_root_scan_times_ms);
1641 print_par_stats(2, "Mark Stack Scanning", _par_last_mark_stack_scan_times_ms); 1635 print_par_stats(2, "Mark Stack Scanning", _par_last_mark_stack_scan_times_ms);
1642 print_par_stats(2, "Scan-Only Scanning", _par_last_scan_only_times_ms); 1636 print_par_stats(2, "Scan-Only Scanning", _par_last_scan_only_times_ms);
1643 print_par_buffers(3, "Scan-Only Regions", 1637 print_par_buffers(3, "Scan-Only Regions",
1644 _par_last_scan_only_regions_scanned, true); 1638 _par_last_scan_only_regions_scanned, true);
1647 print_par_stats(2, "Termination", _par_last_termination_times_ms); 1641 print_par_stats(2, "Termination", _par_last_termination_times_ms);
1648 print_stats(2, "Other", parallel_other_time); 1642 print_stats(2, "Other", parallel_other_time);
1649 print_stats(1, "Clear CT", _cur_clear_ct_time_ms); 1643 print_stats(1, "Clear CT", _cur_clear_ct_time_ms);
1650 } else { 1644 } else {
1651 print_stats(1, "Update RS", update_rs_time); 1645 print_stats(1, "Update RS", update_rs_time);
1652 if (G1RSBarrierUseQueue) 1646 print_stats(2, "Processed Buffers",
1653 print_stats(2, "Processed Buffers", 1647 (int)update_rs_processed_buffers);
1654 (int)update_rs_processed_buffers);
1655 print_stats(1, "Ext Root Scanning", ext_root_scan_time); 1648 print_stats(1, "Ext Root Scanning", ext_root_scan_time);
1656 print_stats(1, "Mark Stack Scanning", mark_stack_scan_time); 1649 print_stats(1, "Mark Stack Scanning", mark_stack_scan_time);
1657 print_stats(1, "Scan-Only Scanning", scan_only_time); 1650 print_stats(1, "Scan-Only Scanning", scan_only_time);
1658 print_stats(1, "Scan RS", scan_rs_time); 1651 print_stats(1, "Scan RS", scan_rs_time);
1659 print_stats(1, "Object Copying", obj_copy_time); 1652 print_stats(1, "Object Copying", obj_copy_time);
2465 all_region_num, 2458 all_region_num,
2466 _region_num_young, 2459 _region_num_young,
2467 (double) _region_num_young / (double) all_region_num * 100.0, 2460 (double) _region_num_young / (double) all_region_num * 100.0,
2468 _region_num_tenured, 2461 _region_num_tenured,
2469 (double) _region_num_tenured / (double) all_region_num * 100.0); 2462 (double) _region_num_tenured / (double) all_region_num * 100.0);
2470
2471 if (!G1RSBarrierUseQueue) {
2472 gclog_or_tty->print_cr("Of %d times conc refinement was enabled, %d (%7.2f%%) "
2473 "did zero traversals.",
2474 _conc_refine_enabled, _conc_refine_zero_traversals,
2475 _conc_refine_enabled > 0 ?
2476 100.0 * (float)_conc_refine_zero_traversals/
2477 (float)_conc_refine_enabled : 0.0);
2478 gclog_or_tty->print_cr(" Max # of traversals = %d.",
2479 _conc_refine_max_traversals);
2480 gclog_or_tty->print_cr("");
2481 }
2482 } 2463 }
2483 if (TraceGen1Time) { 2464 if (TraceGen1Time) {
2484 if (_all_full_gc_times_ms->num() > 0) { 2465 if (_all_full_gc_times_ms->num() > 0) {
2485 gclog_or_tty->print("\n%4d full_gcs: total time = %8.2f s", 2466 gclog_or_tty->print("\n%4d full_gcs: total time = %8.2f s",
2486 _all_full_gc_times_ms->num(), 2467 _all_full_gc_times_ms->num(),
2496 void G1CollectorPolicy::print_yg_surv_rate_info() const { 2477 void G1CollectorPolicy::print_yg_surv_rate_info() const {
2497 #ifndef PRODUCT 2478 #ifndef PRODUCT
2498 _short_lived_surv_rate_group->print_surv_rate_summary(); 2479 _short_lived_surv_rate_group->print_surv_rate_summary();
2499 // add this call for any other surv rate groups 2480 // add this call for any other surv rate groups
2500 #endif // PRODUCT 2481 #endif // PRODUCT
2501 }
2502
2503 void G1CollectorPolicy::update_conc_refine_data() {
2504 unsigned traversals = _g1->concurrent_g1_refine()->disable();
2505 if (traversals == 0) _conc_refine_zero_traversals++;
2506 _conc_refine_max_traversals = MAX2(_conc_refine_max_traversals,
2507 (size_t)traversals);
2508
2509 if (G1PolicyVerbose > 1)
2510 gclog_or_tty->print_cr("Did a CR traversal series: %d traversals.", traversals);
2511 double multiplier = 1.0;
2512 if (traversals == 0) {
2513 multiplier = 4.0;
2514 } else if (traversals > (size_t)G1ConcRefineTargTraversals) {
2515 multiplier = 1.0/1.5;
2516 } else if (traversals < (size_t)G1ConcRefineTargTraversals) {
2517 multiplier = 1.5;
2518 }
2519 if (G1PolicyVerbose > 1) {
2520 gclog_or_tty->print_cr(" Multiplier = %7.2f.", multiplier);
2521 gclog_or_tty->print(" Delta went from %d regions to ",
2522 _conc_refine_current_delta);
2523 }
2524 _conc_refine_current_delta =
2525 MIN2(_g1->n_regions(),
2526 (size_t)(_conc_refine_current_delta * multiplier));
2527 _conc_refine_current_delta =
2528 MAX2(_conc_refine_current_delta, (size_t)1);
2529 if (G1PolicyVerbose > 1) {
2530 gclog_or_tty->print_cr("%d regions.", _conc_refine_current_delta);
2531 }
2532 _conc_refine_enabled++;
2533 } 2482 }
2534 2483
2535 bool 2484 bool
2536 G1CollectorPolicy::should_add_next_region_to_young_list() { 2485 G1CollectorPolicy::should_add_next_region_to_young_list() {
2537 assert(in_young_gc_mode(), "should be in young GC mode"); 2486 assert(in_young_gc_mode(), "should be in young GC mode");