src/share/vm/gc_implementation/parallelScavenge/psGCAdaptivePolicyCounters.hpp

Wed, 27 Apr 2016 01:25:04 +0800

author
aoqi
date
Wed, 27 Apr 2016 01:25:04 +0800
changeset 0
f90c822e73f8
child 6876
710a3c8b516e
permissions
-rw-r--r--

Initial load
http://hg.openjdk.java.net/jdk8u/jdk8u/hotspot/
changeset: 6782:28b50d07f6f8
tag: jdk8u25-b17

aoqi@0 1 /*
aoqi@0 2 * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
aoqi@0 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
aoqi@0 4 *
aoqi@0 5 * This code is free software; you can redistribute it and/or modify it
aoqi@0 6 * under the terms of the GNU General Public License version 2 only, as
aoqi@0 7 * published by the Free Software Foundation.
aoqi@0 8 *
aoqi@0 9 * This code is distributed in the hope that it will be useful, but WITHOUT
aoqi@0 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
aoqi@0 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
aoqi@0 12 * version 2 for more details (a copy is included in the LICENSE file that
aoqi@0 13 * accompanied this code).
aoqi@0 14 *
aoqi@0 15 * You should have received a copy of the GNU General Public License version
aoqi@0 16 * 2 along with this work; if not, write to the Free Software Foundation,
aoqi@0 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
aoqi@0 18 *
aoqi@0 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
aoqi@0 20 * or visit www.oracle.com if you need additional information or have any
aoqi@0 21 * questions.
aoqi@0 22 *
aoqi@0 23 */
aoqi@0 24
aoqi@0 25 #ifndef SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSGCADAPTIVEPOLICYCOUNTERS_HPP
aoqi@0 26 #define SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSGCADAPTIVEPOLICYCOUNTERS_HPP
aoqi@0 27
aoqi@0 28 #include "gc_implementation/parallelScavenge/psAdaptiveSizePolicy.hpp"
aoqi@0 29 #include "gc_implementation/shared/gcAdaptivePolicyCounters.hpp"
aoqi@0 30 #include "gc_implementation/shared/gcPolicyCounters.hpp"
aoqi@0 31
aoqi@0 32 // PSGCAdaptivePolicyCounters is a holder class for performance counters
aoqi@0 33 // that track the data and decisions for the ergonomics policy for the
aoqi@0 34 // parallel scavenge collector.
aoqi@0 35
aoqi@0 36 class PSGCAdaptivePolicyCounters : public GCAdaptivePolicyCounters {
aoqi@0 37 friend class VMStructs;
aoqi@0 38
aoqi@0 39 private:
aoqi@0 40 // survivor space vs. tenuring threshold
aoqi@0 41 PerfVariable* _old_promo_size;
aoqi@0 42 PerfVariable* _old_eden_size;
aoqi@0 43 PerfVariable* _avg_promoted_avg_counter;
aoqi@0 44 PerfVariable* _avg_promoted_dev_counter;
aoqi@0 45 PerfVariable* _avg_promoted_padded_avg_counter;
aoqi@0 46 PerfVariable* _avg_pretenured_padded_avg;
aoqi@0 47
aoqi@0 48 // young gen vs. old gen sizing
aoqi@0 49 PerfVariable* _avg_major_pause;
aoqi@0 50 PerfVariable* _avg_major_interval;
aoqi@0 51 PerfVariable* _live_space;
aoqi@0 52 PerfVariable* _free_space;
aoqi@0 53 PerfVariable* _avg_base_footprint;
aoqi@0 54 PerfVariable* _gc_overhead_limit_exceeded_counter;
aoqi@0 55 PerfVariable* _live_at_last_full_gc_counter;
aoqi@0 56 PerfVariable* _old_capacity;
aoqi@0 57 PerfVariable* _boundary_moved;
aoqi@0 58
aoqi@0 59 PerfVariable* _change_old_gen_for_min_pauses;
aoqi@0 60 PerfVariable* _change_young_gen_for_maj_pauses_counter;
aoqi@0 61
aoqi@0 62 PerfVariable* _major_pause_old_slope;
aoqi@0 63 PerfVariable* _minor_pause_old_slope;
aoqi@0 64 PerfVariable* _major_pause_young_slope;
aoqi@0 65
aoqi@0 66 PerfVariable* _scavenge_skipped;
aoqi@0 67 PerfVariable* _full_follows_scavenge;
aoqi@0 68
aoqi@0 69 // Use this time stamp if the gc time stamp is not available.
aoqi@0 70 TimeStamp _counter_time_stamp;
aoqi@0 71
aoqi@0 72 protected:
aoqi@0 73 PSAdaptiveSizePolicy* ps_size_policy() {
aoqi@0 74 return (PSAdaptiveSizePolicy*)_size_policy;
aoqi@0 75 }
aoqi@0 76
aoqi@0 77 public:
aoqi@0 78 PSGCAdaptivePolicyCounters(const char* name, int collectors, int generations,
aoqi@0 79 PSAdaptiveSizePolicy* size_policy);
aoqi@0 80 inline void update_old_capacity(size_t size_in_bytes) {
aoqi@0 81 _old_capacity->set_value(size_in_bytes);
aoqi@0 82 }
aoqi@0 83 inline void update_old_eden_size(size_t old_size) {
aoqi@0 84 _old_eden_size->set_value(old_size);
aoqi@0 85 }
aoqi@0 86 inline void update_old_promo_size(size_t old_size) {
aoqi@0 87 _old_promo_size->set_value(old_size);
aoqi@0 88 }
aoqi@0 89 inline void update_boundary_moved(int size_in_bytes) {
aoqi@0 90 _boundary_moved->set_value(size_in_bytes);
aoqi@0 91 }
aoqi@0 92 inline void update_avg_promoted_avg() {
aoqi@0 93 _avg_promoted_avg_counter->set_value(
aoqi@0 94 (jlong)(ps_size_policy()->avg_promoted()->average())
aoqi@0 95 );
aoqi@0 96 }
aoqi@0 97 inline void update_avg_promoted_dev() {
aoqi@0 98 _avg_promoted_dev_counter->set_value(
aoqi@0 99 (jlong)(ps_size_policy()->avg_promoted()->deviation())
aoqi@0 100 );
aoqi@0 101 }
aoqi@0 102 inline void update_avg_promoted_padded_avg() {
aoqi@0 103 _avg_promoted_padded_avg_counter->set_value(
aoqi@0 104 (jlong)(ps_size_policy()->avg_promoted()->padded_average())
aoqi@0 105 );
aoqi@0 106 }
aoqi@0 107
aoqi@0 108 inline void update_avg_pretenured_padded_avg() {
aoqi@0 109 _avg_pretenured_padded_avg->set_value(
aoqi@0 110 (jlong)(ps_size_policy()->_avg_pretenured->padded_average())
aoqi@0 111 );
aoqi@0 112 }
aoqi@0 113 inline void update_change_young_gen_for_maj_pauses() {
aoqi@0 114 _change_young_gen_for_maj_pauses_counter->set_value(
aoqi@0 115 ps_size_policy()->change_young_gen_for_maj_pauses());
aoqi@0 116 }
aoqi@0 117 inline void update_change_old_gen_for_min_pauses() {
aoqi@0 118 _change_old_gen_for_min_pauses->set_value(
aoqi@0 119 ps_size_policy()->change_old_gen_for_min_pauses());
aoqi@0 120 }
aoqi@0 121
aoqi@0 122 // compute_generations_free_space() statistics
aoqi@0 123
aoqi@0 124 inline void update_avg_major_pause() {
aoqi@0 125 _avg_major_pause->set_value(
aoqi@0 126 (jlong)(ps_size_policy()->_avg_major_pause->average() * 1000.0)
aoqi@0 127 );
aoqi@0 128 }
aoqi@0 129 inline void update_avg_major_interval() {
aoqi@0 130 _avg_major_interval->set_value(
aoqi@0 131 (jlong)(ps_size_policy()->_avg_major_interval->average() * 1000.0)
aoqi@0 132 );
aoqi@0 133 }
aoqi@0 134
aoqi@0 135 inline void update_major_gc_cost_counter() {
aoqi@0 136 _major_gc_cost_counter->set_value(
aoqi@0 137 (jlong)(ps_size_policy()->major_gc_cost() * 100.0)
aoqi@0 138 );
aoqi@0 139 }
aoqi@0 140 inline void update_mutator_cost_counter() {
aoqi@0 141 _mutator_cost_counter->set_value(
aoqi@0 142 (jlong)(ps_size_policy()->mutator_cost() * 100.0)
aoqi@0 143 );
aoqi@0 144 }
aoqi@0 145
aoqi@0 146 inline void update_live_space() {
aoqi@0 147 _live_space->set_value(ps_size_policy()->live_space());
aoqi@0 148 }
aoqi@0 149 inline void update_free_space() {
aoqi@0 150 _free_space->set_value(ps_size_policy()->free_space());
aoqi@0 151 }
aoqi@0 152
aoqi@0 153 inline void update_avg_base_footprint() {
aoqi@0 154 _avg_base_footprint->set_value(
aoqi@0 155 (jlong)(ps_size_policy()->avg_base_footprint()->average())
aoqi@0 156 );
aoqi@0 157 }
aoqi@0 158 inline void update_avg_old_live() {
aoqi@0 159 _avg_old_live_counter->set_value(
aoqi@0 160 (jlong)(ps_size_policy()->avg_old_live()->average())
aoqi@0 161 );
aoqi@0 162 }
aoqi@0 163 // Scale up all the slopes
aoqi@0 164 inline void update_major_pause_old_slope() {
aoqi@0 165 _major_pause_old_slope->set_value(
aoqi@0 166 (jlong)(ps_size_policy()->major_pause_old_slope() * 1000)
aoqi@0 167 );
aoqi@0 168 }
aoqi@0 169 inline void update_minor_pause_old_slope() {
aoqi@0 170 _minor_pause_old_slope->set_value(
aoqi@0 171 (jlong)(ps_size_policy()->minor_pause_old_slope() * 1000)
aoqi@0 172 );
aoqi@0 173 }
aoqi@0 174 inline void update_major_pause_young_slope() {
aoqi@0 175 _major_pause_young_slope->set_value(
aoqi@0 176 (jlong)(ps_size_policy()->major_pause_young_slope() * 1000)
aoqi@0 177 );
aoqi@0 178 }
aoqi@0 179 inline void update_gc_overhead_limit_exceeded_counter() {
aoqi@0 180 _gc_overhead_limit_exceeded_counter->set_value(
aoqi@0 181 (jlong) ps_size_policy()->gc_overhead_limit_exceeded());
aoqi@0 182 }
aoqi@0 183 inline void update_live_at_last_full_gc_counter() {
aoqi@0 184 _live_at_last_full_gc_counter->set_value(
aoqi@0 185 (jlong)(ps_size_policy()->live_at_last_full_gc()));
aoqi@0 186 }
aoqi@0 187
aoqi@0 188 inline void update_scavenge_skipped(int cause) {
aoqi@0 189 _scavenge_skipped->set_value(cause);
aoqi@0 190 }
aoqi@0 191
aoqi@0 192 inline void update_full_follows_scavenge(int event) {
aoqi@0 193 _full_follows_scavenge->set_value(event);
aoqi@0 194 }
aoqi@0 195
aoqi@0 196 // Update all the counters that can be updated from the size policy.
aoqi@0 197 // This should be called after all policy changes have been made
aoqi@0 198 // and reflected internall in the size policy.
aoqi@0 199 void update_counters_from_policy();
aoqi@0 200
aoqi@0 201 // Update counters that can be updated from fields internal to the
aoqi@0 202 // counter or from globals. This is distinguished from counters
aoqi@0 203 // that are updated via input parameters.
aoqi@0 204 void update_counters();
aoqi@0 205
aoqi@0 206 virtual GCPolicyCounters::Name kind() const {
aoqi@0 207 return GCPolicyCounters::PSGCAdaptivePolicyCountersKind;
aoqi@0 208 }
aoqi@0 209 };
aoqi@0 210
aoqi@0 211 #endif // SHARE_VM_GC_IMPLEMENTATION_PARALLELSCAVENGE_PSGCADAPTIVEPOLICYCOUNTERS_HPP

mercurial