src/hotspot/share/gc/g1/g1Analytics.cpp
author sjohanss
Tue, 14 Nov 2017 11:33:23 +0100
changeset 47885 5caa1d5f74c1
parent 47216 71c04702a3d5
child 48010 cd8f5f780750
permissions -rw-r--r--
8186571: Implementation: JEP 307: Parallel Full GC for G1 Summary: Improve G1 worst-case latencies by making the full GC parallel. Reviewed-by: tschatzl, sangheki, ehelin
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
     1
/*
37134
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
     2
 * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
     4
 *
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
     7
 * published by the Free Software Foundation.
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
     8
 *
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    13
 * accompanied this code).
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    14
 *
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    18
 *
5547
f4b087cbb361 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 5350
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
f4b087cbb361 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 5350
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
f4b087cbb361 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 5350
diff changeset
    21
 * questions.
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    22
 *
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    23
 */
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    24
7397
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6759
diff changeset
    25
#include "precompiled.hpp"
37134
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
    26
#include "gc/g1/g1Analytics.hpp"
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
    27
#include "gc/g1/g1Predictions.hpp"
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
    28
#include "runtime/os.hpp"
7397
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6759
diff changeset
    29
#include "utilities/debug.hpp"
37134
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
    30
#include "utilities/numberSeq.hpp"
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    31
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    32
// Different defaults for different number of GC threads
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    33
// They were chosen by running GCOld and SPECjbb on debris with different
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    34
//   numbers of GC threads and choosing them based on the results
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    35
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    36
// all the same
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    37
static double rs_length_diff_defaults[] = {
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    38
  0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    39
};
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    40
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    41
static double cost_per_card_ms_defaults[] = {
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    42
  0.01, 0.005, 0.005, 0.003, 0.003, 0.002, 0.002, 0.0015
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    43
};
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    44
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    45
// all the same
11249
b0c1cc35cafe 7113012: G1: rename not-fully-young GCs as "mixed"
tonyp
parents: 11206
diff changeset
    46
static double young_cards_per_entry_ratio_defaults[] = {
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    47
  1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    48
};
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    49
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    50
static double cost_per_entry_ms_defaults[] = {
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    51
  0.015, 0.01, 0.01, 0.008, 0.008, 0.0055, 0.0055, 0.005
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    52
};
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    53
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    54
static double cost_per_byte_ms_defaults[] = {
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    55
  0.00006, 0.00003, 0.00003, 0.000015, 0.000015, 0.00001, 0.00001, 0.000009
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    56
};
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    57
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    58
// these should be pretty consistent
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    59
static double constant_other_time_ms_defaults[] = {
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    60
  5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    61
};
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    62
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    63
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    64
static double young_other_cost_per_region_ms_defaults[] = {
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    65
  0.3, 0.2, 0.2, 0.15, 0.15, 0.12, 0.12, 0.1
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    66
};
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    67
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    68
static double non_young_other_cost_per_region_ms_defaults[] = {
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    69
  1.0, 0.7, 0.7, 0.5, 0.5, 0.42, 0.42, 0.30
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    70
};
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    71
37134
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
    72
G1Analytics::G1Analytics(const G1Predictions* predictor) :
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
    73
    _predictor(predictor),
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
    74
    _recent_gc_times_ms(new TruncatedSeq(NumPrevPausesForHeuristics)),
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
    75
    _concurrent_mark_remark_times_ms(new TruncatedSeq(NumPrevPausesForHeuristics)),
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
    76
    _concurrent_mark_cleanup_times_ms(new TruncatedSeq(NumPrevPausesForHeuristics)),
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
    77
    _alloc_rate_ms_seq(new TruncatedSeq(TruncatedSeqLength)),
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
    78
    _prev_collection_pause_end_ms(0.0),
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
    79
    _rs_length_diff_seq(new TruncatedSeq(TruncatedSeqLength)),
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
    80
    _cost_per_card_ms_seq(new TruncatedSeq(TruncatedSeqLength)),
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
    81
    _cost_scan_hcc_seq(new TruncatedSeq(TruncatedSeqLength)),
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
    82
    _young_cards_per_entry_ratio_seq(new TruncatedSeq(TruncatedSeqLength)),
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
    83
    _mixed_cards_per_entry_ratio_seq(new TruncatedSeq(TruncatedSeqLength)),
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
    84
    _cost_per_entry_ms_seq(new TruncatedSeq(TruncatedSeqLength)),
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
    85
    _mixed_cost_per_entry_ms_seq(new TruncatedSeq(TruncatedSeqLength)),
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
    86
    _cost_per_byte_ms_seq(new TruncatedSeq(TruncatedSeqLength)),
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
    87
    _cost_per_byte_ms_during_cm_seq(new TruncatedSeq(TruncatedSeqLength)),
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
    88
    _constant_other_time_ms_seq(new TruncatedSeq(TruncatedSeqLength)),
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
    89
    _young_other_cost_per_region_ms_seq(new TruncatedSeq(TruncatedSeqLength)),
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
    90
    _non_young_other_cost_per_region_ms_seq(new TruncatedSeq(TruncatedSeqLength)),
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
    91
    _pending_cards_seq(new TruncatedSeq(TruncatedSeqLength)),
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
    92
    _rs_lengths_seq(new TruncatedSeq(TruncatedSeqLength)),
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
    93
    _recent_prev_end_times_for_all_gcs_sec(new TruncatedSeq(NumPrevPausesForHeuristics)) {
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    94
37134
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
    95
  // Seed sequences with initial values.
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    96
  _recent_prev_end_times_for_all_gcs_sec->add(os::elapsedTime());
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    97
  _prev_collection_pause_end_ms = os::elapsedTime() * 1000.0;
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
    98
36191
07d2ba48d1d3 8149013: Remove unused and dead code from G1CollectorPolicy
mgerdin
parents: 36102
diff changeset
    99
  int index = MIN2(ParallelGCThreads - 1, 7u);
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   100
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   101
  _rs_length_diff_seq->add(rs_length_diff_defaults[index]);
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   102
  _cost_per_card_ms_seq->add(cost_per_card_ms_defaults[index]);
33204
b8a3901ac5b3 8069330: Adjustment of concurrent refinement thresholds does not take hot card cache into account
tschatzl
parents: 33150
diff changeset
   103
  _cost_scan_hcc_seq->add(0.0);
37134
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   104
  _young_cards_per_entry_ratio_seq->add(young_cards_per_entry_ratio_defaults[index]);
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   105
  _cost_per_entry_ms_seq->add(cost_per_entry_ms_defaults[index]);
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   106
  _cost_per_byte_ms_seq->add(cost_per_byte_ms_defaults[index]);
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   107
  _constant_other_time_ms_seq->add(constant_other_time_ms_defaults[index]);
37134
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   108
  _young_other_cost_per_region_ms_seq->add(young_other_cost_per_region_ms_defaults[index]);
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   109
  _non_young_other_cost_per_region_ms_seq->add(non_young_other_cost_per_region_ms_defaults[index]);
15806
f3fb856749cf 8008546: Wrong G1ConfidencePercent results in GUARANTEE(VARIANCE() > -1.0) FAILED
poonam
parents: 15089
diff changeset
   110
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   111
  // start conservatively (around 50ms is about right)
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   112
  _concurrent_mark_remark_times_ms->add(0.05);
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   113
  _concurrent_mark_cleanup_times_ms->add(0.20);
21561
c619b1cb4554 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents: 21558
diff changeset
   114
}
c619b1cb4554 8016309: assert(eden_size > 0 && survivor_size > 0) failed: just checking
jwilhelm
parents: 21558
diff changeset
   115
37134
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   116
double G1Analytics::get_new_prediction(TruncatedSeq const* seq) const {
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   117
  return _predictor->get_new_prediction(seq);
34298
f3c9dcc5af96 8136681: Factor out IHOP calculation from G1CollectorPolicy
tschatzl
parents: 34134
diff changeset
   118
}
f3c9dcc5af96 8136681: Factor out IHOP calculation from G1CollectorPolicy
tschatzl
parents: 34134
diff changeset
   119
37134
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   120
size_t G1Analytics::get_new_size_prediction(TruncatedSeq const* seq) const {
35196
c83940b346b2 8143215: gcc 4.1.2: fix three issues breaking the build.
goetz
parents: 35163
diff changeset
   121
  return (size_t)get_new_prediction(seq);
c83940b346b2 8143215: gcc 4.1.2: fix three issues breaking the build.
goetz
parents: 35163
diff changeset
   122
}
c83940b346b2 8143215: gcc 4.1.2: fix three issues breaking the build.
goetz
parents: 35163
diff changeset
   123
37134
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   124
int G1Analytics::num_alloc_rate_ms() const {
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   125
  return _alloc_rate_ms_seq->num();
2009
4adf43957a1b 6484959: G1: introduce survivor spaces
apetrusenko
parents: 1902
diff changeset
   126
}
4adf43957a1b 6484959: G1: introduce survivor spaces
apetrusenko
parents: 1902
diff changeset
   127
37134
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   128
void G1Analytics::report_concurrent_mark_remark_times_ms(double ms) {
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   129
  _concurrent_mark_remark_times_ms->add(ms);
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   130
}
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   131
37134
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   132
void G1Analytics::report_alloc_rate_ms(double alloc_rate) {
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   133
  _alloc_rate_ms_seq->add(alloc_rate);
33591
4a2823c696ce 8138975: G1CollectorPolicy::calculate_young_list_target_length should be const
ehelin
parents: 33218
diff changeset
   134
}
10528
06fab03478df 7084509: G1: fix inconsistencies and mistakes in the young list target length calculations
tonyp
parents: 10523
diff changeset
   135
37134
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   136
void G1Analytics::compute_pause_time_ratio(double interval_ms, double pause_time_ms) {
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   137
  _recent_avg_pause_time_ratio = _recent_gc_times_ms->sum() / interval_ms;
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   138
  if (_recent_avg_pause_time_ratio < 0.0 ||
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   139
      (_recent_avg_pause_time_ratio - 1.0 > 0.0)) {
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   140
    // Clip ratio between 0.0 and 1.0, and continue. This will be fixed in
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   141
    // CR 6902692 by redoing the manner in which the ratio is incrementally computed.
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   142
    if (_recent_avg_pause_time_ratio < 0.0) {
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   143
      _recent_avg_pause_time_ratio = 0.0;
10528
06fab03478df 7084509: G1: fix inconsistencies and mistakes in the young list target length calculations
tonyp
parents: 10523
diff changeset
   144
    } else {
37134
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   145
      assert(_recent_avg_pause_time_ratio - 1.0 > 0.0, "Ctl-point invariant");
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   146
      _recent_avg_pause_time_ratio = 1.0;
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   147
    }
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   148
  }
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   149
37134
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   150
  // Compute the ratio of just this last pause time to the entire time range stored
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   151
  // in the vectors. Comparing this pause to the entire range, rather than only the
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   152
  // most recent interval, has the effect of smoothing over a possible transient 'burst'
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   153
  // of more frequent pauses that don't really reflect a change in heap occupancy.
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   154
  // This reduces the likelihood of a needless heap expansion being triggered.
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   155
  _last_pause_time_ratio =
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   156
    (pause_time_ms * _recent_prev_end_times_for_all_gcs_sec->num()) / interval_ms;
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   157
}
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   158
37134
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   159
void G1Analytics::report_cost_per_card_ms(double cost_per_card_ms) {
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   160
  _cost_per_card_ms_seq->add(cost_per_card_ms);
33747
2dfa9256eb77 8140602: Split other time calculation into methods in G1CollectorPolicy
ehelin
parents: 33739
diff changeset
   161
}
2dfa9256eb77 8140602: Split other time calculation into methods in G1CollectorPolicy
ehelin
parents: 33739
diff changeset
   162
37134
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   163
void G1Analytics::report_cost_scan_hcc(double cost_scan_hcc) {
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   164
  _cost_scan_hcc_seq->add(cost_scan_hcc);
11576
e0bef5ca4602 6976060: G1: humongous object allocations should initiate marking cycles when necessary
brutisso
parents: 11455
diff changeset
   165
}
e0bef5ca4602 6976060: G1: humongous object allocations should initiate marking cycles when necessary
brutisso
parents: 11455
diff changeset
   166
37134
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   167
void G1Analytics::report_cost_per_entry_ms(double cost_per_entry_ms, bool last_gc_was_young) {
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   168
  if (last_gc_was_young) {
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   169
    _cost_per_entry_ms_seq->add(cost_per_entry_ms);
33810
8bbfb74d1f6c 8138740: Start initial mark right after mixed GC if needed
tschatzl
parents: 33809
diff changeset
   170
  } else {
37134
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   171
    _mixed_cost_per_entry_ms_seq->add(cost_per_entry_ms);
10280
3463715b5ef7 6814390: G1: remove the concept of non-generational G1
brutisso
parents: 10243
diff changeset
   172
  }
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   173
}
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   174
37134
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   175
void G1Analytics::report_cards_per_entry_ratio(double cards_per_entry_ratio, bool last_gc_was_young) {
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   176
  if (last_gc_was_young) {
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   177
    _young_cards_per_entry_ratio_seq->add(cards_per_entry_ratio);
34299
3fdfdda0ac1f 8136678: Implement adaptive sizing algorithm for IHOP
tschatzl
parents: 34298
diff changeset
   178
  } else {
37134
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   179
    _mixed_cards_per_entry_ratio_seq->add(cards_per_entry_ratio);
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   180
  }
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   181
}
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   182
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   183
void G1Analytics::report_rs_length_diff(double rs_length_diff) {
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   184
  _rs_length_diff_seq->add(rs_length_diff);
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   185
}
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   186
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   187
void G1Analytics::report_cost_per_byte_ms(double cost_per_byte_ms, bool in_marking_window) {
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   188
  if (in_marking_window) {
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   189
    _cost_per_byte_ms_during_cm_seq->add(cost_per_byte_ms);
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   190
  } else {
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   191
    _cost_per_byte_ms_seq->add(cost_per_byte_ms);
34299
3fdfdda0ac1f 8136678: Implement adaptive sizing algorithm for IHOP
tschatzl
parents: 34298
diff changeset
   192
  }
34298
f3c9dcc5af96 8136681: Factor out IHOP calculation from G1CollectorPolicy
tschatzl
parents: 34134
diff changeset
   193
}
f3c9dcc5af96 8136681: Factor out IHOP calculation from G1CollectorPolicy
tschatzl
parents: 34134
diff changeset
   194
37134
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   195
void G1Analytics::report_young_other_cost_per_region_ms(double other_cost_per_region_ms) {
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   196
  _young_other_cost_per_region_ms_seq->add(other_cost_per_region_ms);
34298
f3c9dcc5af96 8136681: Factor out IHOP calculation from G1CollectorPolicy
tschatzl
parents: 34134
diff changeset
   197
}
f3c9dcc5af96 8136681: Factor out IHOP calculation from G1CollectorPolicy
tschatzl
parents: 34134
diff changeset
   198
37134
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   199
void G1Analytics::report_non_young_other_cost_per_region_ms(double other_cost_per_region_ms) {
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   200
  _non_young_other_cost_per_region_ms_seq->add(other_cost_per_region_ms);
33738
1708291bd3d7 8140508: Add utility method for logging phases to G1CollectorPolicy
ehelin
parents: 33624
diff changeset
   201
}
1708291bd3d7 8140508: Add utility method for logging phases to G1CollectorPolicy
ehelin
parents: 33624
diff changeset
   202
37134
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   203
void G1Analytics::report_constant_other_time_ms(double constant_other_time_ms) {
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   204
  _constant_other_time_ms_seq->add(constant_other_time_ms);
4481
de92ec484f5e 6862387: tune concurrent refinement further
iveresov
parents: 4458
diff changeset
   205
}
de92ec484f5e 6862387: tune concurrent refinement further
iveresov
parents: 4458
diff changeset
   206
37134
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   207
void G1Analytics::report_pending_cards(double pending_cards) {
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   208
  _pending_cards_seq->add(pending_cards);
37051
b02a3fb98142 8150362: G1 base elapsed time prediction is wrong because rs_length prediction is wrong
sangheki
parents: 37041
diff changeset
   209
}
b02a3fb98142 8150362: G1 base elapsed time prediction is wrong because rs_length prediction is wrong
sangheki
parents: 37041
diff changeset
   210
37134
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   211
void G1Analytics::report_rs_lengths(double rs_lengths) {
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   212
  _rs_lengths_seq->add(rs_lengths);
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   213
}
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   214
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   215
size_t G1Analytics::predict_rs_length_diff() const {
35196
c83940b346b2 8143215: gcc 4.1.2: fix three issues breaking the build.
goetz
parents: 35163
diff changeset
   216
  return get_new_size_prediction(_rs_length_diff_seq);
33214
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   217
}
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   218
37134
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   219
double G1Analytics::predict_alloc_rate_ms() const {
33214
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   220
  return get_new_prediction(_alloc_rate_ms_seq);
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   221
}
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   222
37134
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   223
double G1Analytics::predict_cost_per_card_ms() const {
33214
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   224
  return get_new_prediction(_cost_per_card_ms_seq);
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   225
}
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   226
37134
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   227
double G1Analytics::predict_scan_hcc_ms() const {
33214
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   228
  return get_new_prediction(_cost_scan_hcc_seq);
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   229
}
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   230
37134
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   231
double G1Analytics::predict_rs_update_time_ms(size_t pending_cards) const {
33214
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   232
  return pending_cards * predict_cost_per_card_ms() + predict_scan_hcc_ms();
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   233
}
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   234
37134
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   235
double G1Analytics::predict_young_cards_per_entry_ratio() const {
33214
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   236
  return get_new_prediction(_young_cards_per_entry_ratio_seq);
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   237
}
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   238
37134
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   239
double G1Analytics::predict_mixed_cards_per_entry_ratio() const {
33214
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   240
  if (_mixed_cards_per_entry_ratio_seq->num() < 2) {
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   241
    return predict_young_cards_per_entry_ratio();
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   242
  } else {
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   243
    return get_new_prediction(_mixed_cards_per_entry_ratio_seq);
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   244
  }
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   245
}
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   246
37134
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   247
size_t G1Analytics::predict_card_num(size_t rs_length, bool gcs_are_young) const {
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   248
  if (gcs_are_young) {
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   249
    return (size_t) (rs_length * predict_young_cards_per_entry_ratio());
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   250
  } else {
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   251
    return (size_t) (rs_length * predict_mixed_cards_per_entry_ratio());
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   252
  }
33214
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   253
}
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   254
37134
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   255
double G1Analytics::predict_rs_scan_time_ms(size_t card_num, bool gcs_are_young) const {
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   256
  if (gcs_are_young) {
33214
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   257
    return card_num * get_new_prediction(_cost_per_entry_ms_seq);
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   258
  } else {
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   259
    return predict_mixed_rs_scan_time_ms(card_num);
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   260
  }
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   261
}
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   262
37134
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   263
double G1Analytics::predict_mixed_rs_scan_time_ms(size_t card_num) const {
33214
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   264
  if (_mixed_cost_per_entry_ms_seq->num() < 3) {
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   265
    return card_num * get_new_prediction(_cost_per_entry_ms_seq);
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   266
  } else {
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   267
    return card_num * get_new_prediction(_mixed_cost_per_entry_ms_seq);
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   268
  }
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   269
}
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   270
37134
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   271
double G1Analytics::predict_object_copy_time_ms_during_cm(size_t bytes_to_copy) const {
33214
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   272
  if (_cost_per_byte_ms_during_cm_seq->num() < 3) {
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   273
    return (1.1 * bytes_to_copy) * get_new_prediction(_cost_per_byte_ms_seq);
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   274
  } else {
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   275
    return bytes_to_copy * get_new_prediction(_cost_per_byte_ms_during_cm_seq);
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   276
  }
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   277
}
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   278
37134
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   279
double G1Analytics::predict_object_copy_time_ms(size_t bytes_to_copy, bool during_concurrent_mark) const {
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   280
  if (during_concurrent_mark) {
33214
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   281
    return predict_object_copy_time_ms_during_cm(bytes_to_copy);
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   282
  } else {
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   283
    return bytes_to_copy * get_new_prediction(_cost_per_byte_ms_seq);
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   284
  }
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   285
}
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   286
38249
51b1102fc197 8156022: Add prediction for cost_per_byte_ms to G1Analytics
ehelin
parents: 37134
diff changeset
   287
double G1Analytics::predict_cost_per_byte_ms() const {
51b1102fc197 8156022: Add prediction for cost_per_byte_ms to G1Analytics
ehelin
parents: 37134
diff changeset
   288
  return get_new_prediction(_cost_per_byte_ms_seq);
51b1102fc197 8156022: Add prediction for cost_per_byte_ms to G1Analytics
ehelin
parents: 37134
diff changeset
   289
}
51b1102fc197 8156022: Add prediction for cost_per_byte_ms to G1Analytics
ehelin
parents: 37134
diff changeset
   290
37134
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   291
double G1Analytics::predict_constant_other_time_ms() const {
33214
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   292
  return get_new_prediction(_constant_other_time_ms_seq);
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   293
}
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   294
37134
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   295
double G1Analytics::predict_young_other_time_ms(size_t young_num) const {
33214
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   296
  return young_num * get_new_prediction(_young_other_cost_per_region_ms_seq);
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   297
}
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   298
37134
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   299
double G1Analytics::predict_non_young_other_time_ms(size_t non_young_num) const {
33214
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   300
  return non_young_num * get_new_prediction(_non_young_other_cost_per_region_ms_seq);
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   301
}
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   302
37134
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   303
double G1Analytics::predict_remark_time_ms() const {
33214
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   304
  return get_new_prediction(_concurrent_mark_remark_times_ms);
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   305
}
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   306
37134
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   307
double G1Analytics::predict_cleanup_time_ms() const {
33214
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   308
  return get_new_prediction(_concurrent_mark_cleanup_times_ms);
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   309
}
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   310
37134
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   311
size_t G1Analytics::predict_rs_lengths() const {
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   312
  return get_new_size_prediction(_rs_lengths_seq);
33214
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   313
}
5a00fba36171 8137082: Factor out G1 prediction code from G1CollectorPolicy and clean up
tschatzl
parents: 33204
diff changeset
   314
37134
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   315
size_t G1Analytics::predict_pending_cards() const {
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   316
  return get_new_size_prediction(_pending_cards_seq);
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   317
}
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   318
40523
20873f6704de 8164124: [BACKOUT] G1 does not implement millis_since_last_gc which is needed by RMI GC
jwilhelm
parents: 40328
diff changeset
   319
double G1Analytics::last_known_gc_end_time_sec() const {
40328
a2851f5f1cf6 8071770: G1 does not implement millis_since_last_gc which is needed by RMI GC
jprovino
parents: 38249
diff changeset
   320
  return _recent_prev_end_times_for_all_gcs_sec->oldest();
a2851f5f1cf6 8071770: G1 does not implement millis_since_last_gc which is needed by RMI GC
jprovino
parents: 38249
diff changeset
   321
}
a2851f5f1cf6 8071770: G1 does not implement millis_since_last_gc which is needed by RMI GC
jprovino
parents: 38249
diff changeset
   322
37134
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   323
void G1Analytics::update_recent_gc_times(double end_time_sec,
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   324
                                         double pause_time_ms) {
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   325
  _recent_gc_times_ms->add(pause_time_ms);
1374
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   326
  _recent_prev_end_times_for_all_gcs_sec->add(end_time_sec);
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   327
  _prev_collection_pause_end_ms = end_time_sec * 1000.0;
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   328
}
4c24294029a9 6711316: Open source the Garbage-First garbage collector
ysr
parents:
diff changeset
   329
37134
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   330
void G1Analytics::report_concurrent_mark_cleanup_times_ms(double ms) {
9dd3975ca940 8151711: Move G1 number sequences out of the G1 collector policy
mgerdin
parents: 37080
diff changeset
   331
  _concurrent_mark_cleanup_times_ms->add(ms);
34619
83b1fedf01e9 8143251: HeapRetentionTest.java Test is failing on jdk9/dev
sjohanss
parents: 34611
diff changeset
   332
}