src/share/vm/gc_implementation/concurrentMarkSweep/cmsGCAdaptivePolicyCounters.cpp

Tue, 08 Aug 2017 15:57:29 +0800

author
aoqi
date
Tue, 08 Aug 2017 15:57:29 +0800
changeset 6876
710a3c8b516e
parent 2314
f95d63e2154a
parent 0
f90c822e73f8
permissions
-rw-r--r--

merge

     1 /*
     2  * Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     5  * This code is free software; you can redistribute it and/or modify it
     6  * under the terms of the GNU General Public License version 2 only, as
     7  * published by the Free Software Foundation.
     8  *
     9  * This code is distributed in the hope that it will be useful, but WITHOUT
    10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    12  * version 2 for more details (a copy is included in the LICENSE file that
    13  * accompanied this code).
    14  *
    15  * You should have received a copy of the GNU General Public License version
    16  * 2 along with this work; if not, write to the Free Software Foundation,
    17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    18  *
    19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    20  * or visit www.oracle.com if you need additional information or have any
    21  * questions.
    22  *
    23  */
    25 #include "precompiled.hpp"
    26 #include "gc_implementation/concurrentMarkSweep/cmsGCAdaptivePolicyCounters.hpp"
    27 #include "memory/resourceArea.hpp"
    29 CMSGCAdaptivePolicyCounters::CMSGCAdaptivePolicyCounters(const char* name_arg,
    30                                         int collectors,
    31                                         int generations,
    32                                         AdaptiveSizePolicy* size_policy_arg)
    33         : GCAdaptivePolicyCounters(name_arg,
    34                                    collectors,
    35                                    generations,
    36                                    size_policy_arg) {
    37   if (UsePerfData) {
    38     EXCEPTION_MARK;
    39     ResourceMark rm;
    41     const char* cname =
    42       PerfDataManager::counter_name(name_space(), "cmsCapacity");
    43     _cms_capacity_counter = PerfDataManager::create_variable(SUN_GC, cname,
    44       PerfData::U_Bytes, (jlong) OldSize, CHECK);
    45 #ifdef NOT_PRODUCT
    46     cname =
    47       PerfDataManager::counter_name(name_space(), "initialPause");
    48     _initial_pause_counter = PerfDataManager::create_variable(SUN_GC, cname,
    49       PerfData::U_Ticks,
    50       (jlong) cms_size_policy()->avg_initial_pause()->last_sample(),
    51       CHECK);
    53     cname = PerfDataManager::counter_name(name_space(), "remarkPause");
    54     _remark_pause_counter = PerfDataManager::create_variable(SUN_GC, cname,
    55       PerfData::U_Ticks,
    56       (jlong) cms_size_policy()->avg_remark_pause()->last_sample(),
    57       CHECK);
    58 #endif
    59     cname =
    60       PerfDataManager::counter_name(name_space(), "avgInitialPause");
    61     _avg_initial_pause_counter = PerfDataManager::create_variable(SUN_GC, cname,
    62       PerfData::U_Ticks,
    63       (jlong) cms_size_policy()->avg_initial_pause()->average(),
    64       CHECK);
    66     cname = PerfDataManager::counter_name(name_space(), "avgRemarkPause");
    67     _avg_remark_pause_counter = PerfDataManager::create_variable(SUN_GC, cname,
    68     PerfData::U_Ticks,
    69       (jlong) cms_size_policy()->avg_remark_pause()->average(),
    70       CHECK);
    72     cname = PerfDataManager::counter_name(name_space(), "avgSTWGcCost");
    73     _avg_cms_STW_gc_cost_counter = PerfDataManager::create_variable(SUN_GC,
    74         cname,
    75         PerfData::U_Ticks,
    76       (jlong) cms_size_policy()->avg_cms_STW_gc_cost()->average(),
    77         CHECK);
    79     cname = PerfDataManager::counter_name(name_space(), "avgSTWTime");
    80     _avg_cms_STW_time_counter = PerfDataManager::create_variable(SUN_GC,
    81         cname,
    82         PerfData::U_Ticks,
    83       (jlong) cms_size_policy()->avg_cms_STW_time()->average(),
    84         CHECK);
    87     cname = PerfDataManager::counter_name(name_space(), "avgConcurrentTime");
    88     _avg_concurrent_time_counter = PerfDataManager::create_variable(SUN_GC,
    89         cname,
    90         PerfData::U_Ticks,
    91         (jlong) cms_size_policy()->avg_concurrent_time()->average(),
    92         CHECK);
    94     cname =
    95       PerfDataManager::counter_name(name_space(), "avgConcurrentInterval");
    96     _avg_concurrent_interval_counter = PerfDataManager::create_variable(SUN_GC,
    97         cname,
    98         PerfData::U_Ticks,
    99         (jlong) cms_size_policy()->avg_concurrent_interval()->average(),
   100         CHECK);
   102     cname = PerfDataManager::counter_name(name_space(), "avgConcurrentGcCost");
   103     _avg_concurrent_gc_cost_counter = PerfDataManager::create_variable(SUN_GC,
   104         cname,
   105         PerfData::U_Ticks,
   106         (jlong) cms_size_policy()->avg_concurrent_gc_cost()->average(),
   107         CHECK);
   109     cname = PerfDataManager::counter_name(name_space(), "avgCMSFreeAtSweep");
   110     _avg_cms_free_at_sweep_counter = PerfDataManager::create_variable(SUN_GC,
   111         cname,
   112         PerfData::U_Ticks,
   113         (jlong) cms_size_policy()->avg_cms_free_at_sweep()->average(),
   114         CHECK);
   116     cname = PerfDataManager::counter_name(name_space(), "avgCMSFree");
   117     _avg_cms_free_counter = PerfDataManager::create_variable(SUN_GC,
   118         cname,
   119         PerfData::U_Ticks,
   120         (jlong) cms_size_policy()->avg_cms_free()->average(),
   121         CHECK);
   123     cname = PerfDataManager::counter_name(name_space(), "avgCMSPromo");
   124     _avg_cms_promo_counter = PerfDataManager::create_variable(SUN_GC,
   125         cname,
   126         PerfData::U_Ticks,
   127         (jlong) cms_size_policy()->avg_cms_promo()->average(),
   128         CHECK);
   130     cname = PerfDataManager::counter_name(name_space(), "avgMscPause");
   131     _avg_msc_pause_counter = PerfDataManager::create_variable(SUN_GC,
   132         cname,
   133         PerfData::U_Ticks,
   134         (jlong) cms_size_policy()->avg_msc_pause()->average(),
   135         CHECK);
   137     cname = PerfDataManager::counter_name(name_space(), "avgMscInterval");
   138     _avg_msc_interval_counter = PerfDataManager::create_variable(SUN_GC,
   139         cname,
   140         PerfData::U_Ticks,
   141         (jlong) cms_size_policy()->avg_msc_interval()->average(),
   142         CHECK);
   144     cname = PerfDataManager::counter_name(name_space(), "mscGcCost");
   145     _msc_gc_cost_counter = PerfDataManager::create_variable(SUN_GC,
   146         cname,
   147         PerfData::U_Ticks,
   148         (jlong) cms_size_policy()->avg_msc_gc_cost()->average(),
   149         CHECK);
   151     cname = PerfDataManager::counter_name(name_space(), "avgMsPause");
   152     _avg_ms_pause_counter = PerfDataManager::create_variable(SUN_GC,
   153         cname,
   154         PerfData::U_Ticks,
   155         (jlong) cms_size_policy()->avg_ms_pause()->average(),
   156         CHECK);
   158     cname = PerfDataManager::counter_name(name_space(), "avgMsInterval");
   159     _avg_ms_interval_counter = PerfDataManager::create_variable(SUN_GC,
   160         cname,
   161         PerfData::U_Ticks,
   162         (jlong) cms_size_policy()->avg_ms_interval()->average(),
   163         CHECK);
   165     cname = PerfDataManager::counter_name(name_space(), "msGcCost");
   166     _ms_gc_cost_counter = PerfDataManager::create_variable(SUN_GC,
   167         cname,
   168         PerfData::U_Ticks,
   169         (jlong) cms_size_policy()->avg_ms_gc_cost()->average(),
   170         CHECK);
   172     cname = PerfDataManager::counter_name(name_space(), "majorGcCost");
   173     _major_gc_cost_counter = PerfDataManager::create_variable(SUN_GC, cname,
   174        PerfData::U_Ticks, (jlong) cms_size_policy()->cms_gc_cost(), CHECK);
   176     cname = PerfDataManager::counter_name(name_space(), "avgPromotedAvg");
   177     _promoted_avg_counter =
   178       PerfDataManager::create_variable(SUN_GC, cname, PerfData::U_Bytes,
   179         cms_size_policy()->calculated_promo_size_in_bytes(), CHECK);
   181     cname = PerfDataManager::counter_name(name_space(), "avgPromotedDev");
   182     _promoted_avg_dev_counter =
   183       PerfDataManager::create_variable(SUN_GC, cname, PerfData::U_Bytes,
   184         (jlong) 0 , CHECK);
   186     cname = PerfDataManager::counter_name(name_space(), "avgPromotedPaddedAvg");
   187     _promoted_padded_avg_counter =
   188       PerfDataManager::create_variable(SUN_GC, cname, PerfData::U_Bytes,
   189         cms_size_policy()->calculated_promo_size_in_bytes(), CHECK);
   191     cname = PerfDataManager::counter_name(name_space(),
   192       "changeYoungGenForMajPauses");
   193     _change_young_gen_for_maj_pauses_counter =
   194       PerfDataManager::create_variable(SUN_GC, cname, PerfData::U_Events,
   195         (jlong)0, CHECK);
   197     cname = PerfDataManager::counter_name(name_space(), "remarkPauseOldSlope");
   198     _remark_pause_old_slope_counter =
   199       PerfDataManager::create_variable(SUN_GC, cname, PerfData::U_Bytes,
   200         (jlong) cms_size_policy()->remark_pause_old_slope(), CHECK);
   202     cname = PerfDataManager::counter_name(name_space(), "initialPauseOldSlope");
   203     _initial_pause_old_slope_counter =
   204       PerfDataManager::create_variable(SUN_GC, cname, PerfData::U_Bytes,
   205         (jlong) cms_size_policy()->initial_pause_old_slope(), CHECK);
   207     cname =
   208       PerfDataManager::counter_name(name_space(), "remarkPauseYoungSlope") ;
   209     _remark_pause_young_slope_counter =
   210       PerfDataManager::create_variable(SUN_GC, cname, PerfData::U_Bytes,
   211         (jlong) cms_size_policy()->remark_pause_young_slope(), CHECK);
   213     cname =
   214       PerfDataManager::counter_name(name_space(), "initialPauseYoungSlope");
   215     _initial_pause_young_slope_counter =
   216       PerfDataManager::create_variable(SUN_GC, cname, PerfData::U_Bytes,
   217         (jlong) cms_size_policy()->initial_pause_young_slope(), CHECK);
   220   }
   221   assert(size_policy()->is_gc_cms_adaptive_size_policy(),
   222     "Wrong type of size policy");
   223 }
   225 void CMSGCAdaptivePolicyCounters::update_counters() {
   226   if (UsePerfData) {
   227     GCAdaptivePolicyCounters::update_counters_from_policy();
   228     update_counters_from_policy();
   229   }
   230 }
   232 void CMSGCAdaptivePolicyCounters::update_counters(CMSGCStats* gc_stats) {
   233   if (UsePerfData) {
   234     update_counters();
   235     update_promoted((size_t) gc_stats->avg_promoted()->last_sample());
   236     update_avg_promoted_avg(gc_stats);
   237     update_avg_promoted_dev(gc_stats);
   238     update_avg_promoted_padded_avg(gc_stats);
   239   }
   240 }
   242 void CMSGCAdaptivePolicyCounters::update_counters_from_policy() {
   243   if (UsePerfData && (cms_size_policy() != NULL)) {
   245     GCAdaptivePolicyCounters::update_counters_from_policy();
   247     update_major_gc_cost_counter();
   248     update_mutator_cost_counter();
   250     update_eden_size();
   251     update_promo_size();
   253     // If these updates from the last_sample() work,
   254     // revise the update methods for these counters
   255     // (both here and in PS).
   256     update_survived((size_t) cms_size_policy()->avg_survived()->last_sample());
   258     update_avg_concurrent_time_counter();
   259     update_avg_concurrent_interval_counter();
   260     update_avg_concurrent_gc_cost_counter();
   261 #ifdef NOT_PRODUCT
   262     update_initial_pause_counter();
   263     update_remark_pause_counter();
   264 #endif
   265     update_avg_initial_pause_counter();
   266     update_avg_remark_pause_counter();
   268     update_avg_cms_STW_time_counter();
   269     update_avg_cms_STW_gc_cost_counter();
   271     update_avg_cms_free_counter();
   272     update_avg_cms_free_at_sweep_counter();
   273     update_avg_cms_promo_counter();
   275     update_avg_msc_pause_counter();
   276     update_avg_msc_interval_counter();
   277     update_msc_gc_cost_counter();
   279     update_avg_ms_pause_counter();
   280     update_avg_ms_interval_counter();
   281     update_ms_gc_cost_counter();
   283     update_avg_old_live_counter();
   285     update_survivor_size_counters();
   286     update_avg_survived_avg_counters();
   287     update_avg_survived_dev_counters();
   289     update_decrement_tenuring_threshold_for_gc_cost();
   290     update_increment_tenuring_threshold_for_gc_cost();
   291     update_decrement_tenuring_threshold_for_survivor_limit();
   293     update_change_young_gen_for_maj_pauses();
   295     update_major_collection_slope_counter();
   296     update_remark_pause_old_slope_counter();
   297     update_initial_pause_old_slope_counter();
   298     update_remark_pause_young_slope_counter();
   299     update_initial_pause_young_slope_counter();
   301     update_decide_at_full_gc_counter();
   302   }
   303 }

mercurial