Path: blob/master/src/hotspot/share/gc/parallel/psGCAdaptivePolicyCounters.cpp
41149 views
/*1* Copyright (c) 2003, 2021, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation.7*8* This code is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License11* version 2 for more details (a copy is included in the LICENSE file that12* accompanied this code).13*14* You should have received a copy of the GNU General Public License version15* 2 along with this work; if not, write to the Free Software Foundation,16* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.17*18* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA19* or visit www.oracle.com if you need additional information or have any20* questions.21*22*/2324#include "precompiled.hpp"25#include "gc/parallel/psGCAdaptivePolicyCounters.hpp"26#include "memory/resourceArea.hpp"2728PSGCAdaptivePolicyCounters::PSGCAdaptivePolicyCounters(const char* name_arg,29int collectors,30int generations,31PSAdaptiveSizePolicy* size_policy_arg)32: GCAdaptivePolicyCounters(name_arg,33collectors,34generations,35size_policy_arg) {36if (UsePerfData) {37EXCEPTION_MARK;38ResourceMark rm;3940const char* cname;4142cname = PerfDataManager::counter_name(name_space(), "oldPromoSize");43_old_promo_size = PerfDataManager::create_variable(SUN_GC, cname,44PerfData::U_Bytes, ps_size_policy()->calculated_promo_size_in_bytes(), CHECK);4546cname = PerfDataManager::counter_name(name_space(), "oldEdenSize");47_old_eden_size = PerfDataManager::create_variable(SUN_GC, cname,48PerfData::U_Bytes, ps_size_policy()->calculated_eden_size_in_bytes(), CHECK);4950cname = PerfDataManager::counter_name(name_space(), "oldCapacity");51_old_capacity = PerfDataManager::create_variable(SUN_GC, cname,52PerfData::U_Bytes, (jlong) InitialHeapSize, CHECK);5354cname = PerfDataManager::counter_name(name_space(), "avgPromotedAvg");55_avg_promoted_avg_counter =56PerfDataManager::create_variable(SUN_GC, cname, PerfData::U_Bytes,57ps_size_policy()->calculated_promo_size_in_bytes(), CHECK);5859cname = PerfDataManager::counter_name(name_space(), "avgPromotedDev");60_avg_promoted_dev_counter =61PerfDataManager::create_variable(SUN_GC, cname, PerfData::U_Bytes,62(jlong) 0 , CHECK);6364cname = PerfDataManager::counter_name(name_space(), "avgPromotedPaddedAvg");65_avg_promoted_padded_avg_counter =66PerfDataManager::create_variable(SUN_GC, cname, PerfData::U_Bytes,67ps_size_policy()->calculated_promo_size_in_bytes(), CHECK);6869cname = PerfDataManager::counter_name(name_space(),70"avgPretenuredPaddedAvg");71_avg_pretenured_padded_avg =72PerfDataManager::create_variable(SUN_GC, cname, PerfData::U_Bytes,73(jlong) 0, CHECK);747576cname = PerfDataManager::counter_name(name_space(),77"changeYoungGenForMajPauses");78_change_young_gen_for_maj_pauses_counter =79PerfDataManager::create_variable(SUN_GC, cname, PerfData::U_Events,80(jlong)0, CHECK);8182cname = PerfDataManager::counter_name(name_space(),83"changeOldGenForMinPauses");84_change_old_gen_for_min_pauses =85PerfDataManager::create_variable(SUN_GC, cname, PerfData::U_Events,86(jlong)0, CHECK);878889cname = PerfDataManager::counter_name(name_space(), "avgMajorPauseTime");90_avg_major_pause = PerfDataManager::create_variable(SUN_GC, cname,91PerfData::U_Ticks, (jlong) ps_size_policy()->_avg_major_pause->average(), CHECK);9293cname = PerfDataManager::counter_name(name_space(), "avgMajorIntervalTime");94_avg_major_interval = PerfDataManager::create_variable(SUN_GC, cname,95PerfData::U_Ticks, (jlong) ps_size_policy()->_avg_major_interval->average(), CHECK);9697cname = PerfDataManager::counter_name(name_space(), "majorGcCost");98_major_gc_cost_counter = PerfDataManager::create_variable(SUN_GC, cname,99PerfData::U_Ticks, (jlong) ps_size_policy()->major_gc_cost(), CHECK);100101cname = PerfDataManager::counter_name(name_space(), "liveSpace");102_live_space = PerfDataManager::create_variable(SUN_GC, cname,103PerfData::U_Bytes, ps_size_policy()->live_space(), CHECK);104105cname = PerfDataManager::counter_name(name_space(), "freeSpace");106_free_space = PerfDataManager::create_variable(SUN_GC, cname,107PerfData::U_Bytes, ps_size_policy()->free_space(), CHECK);108109cname = PerfDataManager::counter_name(name_space(), "avgBaseFootprint");110_avg_base_footprint = PerfDataManager::create_variable(SUN_GC, cname,111PerfData::U_Bytes, (jlong) ps_size_policy()->avg_base_footprint()->average(), CHECK);112113cname = PerfDataManager::counter_name(name_space(), "liveAtLastFullGc");114_live_at_last_full_gc_counter =115PerfDataManager::create_variable(SUN_GC, cname,116PerfData::U_Bytes, ps_size_policy()->live_at_last_full_gc(), CHECK);117118cname = PerfDataManager::counter_name(name_space(), "majorPauseOldSlope");119_major_pause_old_slope = PerfDataManager::create_variable(SUN_GC, cname,120PerfData::U_None, (jlong) 0, CHECK);121122cname = PerfDataManager::counter_name(name_space(), "minorPauseOldSlope");123_minor_pause_old_slope = PerfDataManager::create_variable(SUN_GC, cname,124PerfData::U_None, (jlong) 0, CHECK);125126cname = PerfDataManager::counter_name(name_space(), "majorPauseYoungSlope");127_major_pause_young_slope = PerfDataManager::create_variable(SUN_GC, cname,128PerfData::U_None, (jlong) 0, CHECK);129130cname = PerfDataManager::counter_name(name_space(), "scavengeSkipped");131_scavenge_skipped = PerfDataManager::create_variable(SUN_GC, cname,132PerfData::U_Bytes, (jlong) 0, CHECK);133134cname = PerfDataManager::counter_name(name_space(), "fullFollowsScavenge");135_full_follows_scavenge = PerfDataManager::create_variable(SUN_GC, cname,136PerfData::U_Bytes, (jlong) 0, CHECK);137138_counter_time_stamp.update();139}140141assert(size_policy()->is_gc_ps_adaptive_size_policy(),142"Wrong type of size policy");143}144145void PSGCAdaptivePolicyCounters::update_counters_from_policy() {146if (UsePerfData) {147GCAdaptivePolicyCounters::update_counters_from_policy();148update_eden_size();149update_promo_size();150update_avg_old_live();151update_survivor_size_counters();152update_avg_promoted_avg();153update_avg_promoted_dev();154update_avg_promoted_padded_avg();155update_avg_pretenured_padded_avg();156157update_avg_major_pause();158update_avg_major_interval();159update_minor_gc_cost_counter();160update_major_gc_cost_counter();161update_mutator_cost_counter();162update_decrement_tenuring_threshold_for_gc_cost();163update_increment_tenuring_threshold_for_gc_cost();164update_decrement_tenuring_threshold_for_survivor_limit();165update_live_space();166update_free_space();167update_avg_base_footprint();168169update_change_old_gen_for_maj_pauses();170update_change_young_gen_for_maj_pauses();171update_change_old_gen_for_min_pauses();172173update_change_old_gen_for_throughput();174update_change_young_gen_for_throughput();175176update_decrease_for_footprint();177update_decide_at_full_gc_counter();178179update_major_pause_old_slope();180update_minor_pause_old_slope();181update_major_pause_young_slope();182update_minor_collection_slope_counter();183update_gc_overhead_limit_exceeded_counter();184update_live_at_last_full_gc_counter();185}186}187188void PSGCAdaptivePolicyCounters::update_counters() {189if (UsePerfData) {190update_counters_from_policy();191}192}193194195