# HG changeset patch # User shade # Date 1590592229 -7200 # Wed May 27 17:10:29 2020 +0200 # Node ID 6a783ef8ad7385856a6ac3b6f0e0b39038252a29 # Parent ebbb6bfe0cb4f5fed576e9a9ce08ab653a56eca4 8245718: Epsilon: improve configuration logging Reviewed-by: XXX diff --git a/src/hotspot/share/gc/epsilon/epsilonArguments.cpp b/src/hotspot/share/gc/epsilon/epsilonArguments.cpp --- a/src/hotspot/share/gc/epsilon/epsilonArguments.cpp +++ b/src/hotspot/share/gc/epsilon/epsilonArguments.cpp @@ -45,18 +45,6 @@ FLAG_SET_DEFAULT(ExitOnOutOfMemoryError, true); } - // Warn users that non-resizable heap might be better for some configurations. - // We are not adjusting the heap size by ourselves, because it affects startup time. - if (InitialHeapSize != MaxHeapSize) { - log_warning(gc)("Consider setting -Xms equal to -Xmx to avoid resizing hiccups"); - } - - // Warn users that AlwaysPreTouch might be better for some configurations. - // We are not turning this on by ourselves, because it affects startup time. - if (FLAG_IS_DEFAULT(AlwaysPreTouch) && !AlwaysPreTouch) { - log_warning(gc)("Consider enabling -XX:+AlwaysPreTouch to avoid memory commit hiccups"); - } - if (EpsilonMaxTLABSize < MinTLABSize) { log_warning(gc)("EpsilonMaxTLABSize < MinTLABSize, adjusting it to " SIZE_FORMAT, MinTLABSize); EpsilonMaxTLABSize = MinTLABSize; diff --git a/src/hotspot/share/gc/epsilon/epsilonHeap.cpp b/src/hotspot/share/gc/epsilon/epsilonHeap.cpp --- a/src/hotspot/share/gc/epsilon/epsilonHeap.cpp +++ b/src/hotspot/share/gc/epsilon/epsilonHeap.cpp @@ -24,6 +24,7 @@ #include "precompiled.hpp" #include "gc/epsilon/epsilonHeap.hpp" +#include "gc/epsilon/epsilonInitLogger.hpp" #include "gc/epsilon/epsilonMemoryPool.hpp" #include "gc/epsilon/epsilonThreadLocalData.hpp" #include "gc/shared/gcArguments.hpp" @@ -67,24 +68,7 @@ BarrierSet::set_barrier_set(new EpsilonBarrierSet()); // All done, print out the configuration - if (init_byte_size != max_byte_size) { - log_info(gc)("Resizeable heap; starting at " SIZE_FORMAT "M, max: " SIZE_FORMAT "M, step: " SIZE_FORMAT "M", - init_byte_size / M, max_byte_size / M, EpsilonMinHeapExpand / M); - } else { - log_info(gc)("Non-resizeable heap; start/max: " SIZE_FORMAT "M", init_byte_size / M); - } - - if (UseTLAB) { - log_info(gc)("Using TLAB allocation; max: " SIZE_FORMAT "K", _max_tlab_size * HeapWordSize / K); - if (EpsilonElasticTLAB) { - log_info(gc)("Elastic TLABs enabled; elasticity: %.2fx", EpsilonTLABElasticity); - } - if (EpsilonElasticTLABDecay) { - log_info(gc)("Elastic TLABs decay enabled; decay time: " SIZE_FORMAT "ms", EpsilonTLABDecayTime); - } - } else { - log_info(gc)("Not using TLAB allocation"); - } + EpsilonInitLogger::print(); return JNI_OK; } diff --git a/src/hotspot/share/gc/epsilon/epsilonInitLogger.cpp b/src/hotspot/share/gc/epsilon/epsilonInitLogger.cpp new file mode 100644 --- /dev/null +++ b/src/hotspot/share/gc/epsilon/epsilonInitLogger.cpp @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2020, Red Hat, Inc. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#include "precompiled.hpp" +#include "gc/epsilon/epsilonHeap.hpp" +#include "gc/epsilon/epsilonInitLogger.hpp" +#include "logging/log.hpp" +#include "runtime/globals.hpp" +#include "utilities/globalDefinitions.hpp" + +void EpsilonInitLogger::print_gc_specific() { + // Warn users that non-resizable heap might be better for some configurations. + // We are not adjusting the heap size by ourselves, because it affects startup time. + if (InitialHeapSize != MaxHeapSize) { + log_warning(gc, init)("Consider setting -Xms equal to -Xmx to avoid resizing hiccups"); + } + + // Warn users that AlwaysPreTouch might be better for some configurations. + // We are not turning this on by ourselves, because it affects startup time. + if (FLAG_IS_DEFAULT(AlwaysPreTouch) && !AlwaysPreTouch) { + log_warning(gc, init)("Consider enabling -XX:+AlwaysPreTouch to avoid memory commit hiccups"); + } + + if (UseTLAB) { + size_t max_tlab = EpsilonHeap::heap()->max_tlab_size() * HeapWordSize; + log_info(gc, init)("TLAB Size Max: " SIZE_FORMAT "%s", + byte_size_in_exact_unit(max_tlab), exact_unit_for_byte_size(max_tlab)); + if (EpsilonElasticTLAB) { + log_info(gc, init)("TLAB Size Elasticity: %.2fx", EpsilonTLABElasticity); + } + if (EpsilonElasticTLABDecay) { + log_info(gc, init)("TLAB Size Decay Time: " SIZE_FORMAT "ms", EpsilonTLABDecayTime); + } + } else { + log_info(gc, init)("TLAB: Disabled"); + } +} + +void EpsilonInitLogger::print() { + EpsilonInitLogger init_log; + init_log.print_all(); +} diff --git a/src/hotspot/share/gc/epsilon/epsilonInitLogger.hpp b/src/hotspot/share/gc/epsilon/epsilonInitLogger.hpp new file mode 100644 --- /dev/null +++ b/src/hotspot/share/gc/epsilon/epsilonInitLogger.hpp @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2020, Red Hat, Inc. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#ifndef SHARE_GC_EPSILON_EPSILONINITLOGGER_HPP +#define SHARE_GC_EPSILON_EPSILONINITLOGGER_HPP + +#include "gc/shared/gcInitLogger.hpp" + +class EpsilonInitLogger : public GCInitLogger { +protected: + virtual void print_gc_specific(); + +public: + static void print(); +}; + +#endif // SHARE_GC_EPSILON_EPSILONINITLOGGER_HPP