1 /*
   2  * Copyright (c) 2017, 2018, Red Hat, Inc. 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  */
  24 
  25 #ifndef SHARE_VM_GC_EPSILON_GLOBALS_HPP
  26 #define SHARE_VM_GC_EPSILON_GLOBALS_HPP
  27 
  28 #include "runtime/globals.hpp"
  29 //
  30 // Defines all globals flags used by the Epsilon GC.
  31 //
  32 
  33 #define GC_EPSILON_FLAGS(develop,                                           \
  34                     develop_pd,                                             \
  35                     product,                                                \
  36                     product_pd,                                             \
  37                     diagnostic,                                             \
  38                     diagnostic_pd,                                          \
  39                     experimental,                                           \
  40                     notproduct,                                             \
  41                     manageable,                                             \
  42                     product_rw,                                             \
  43                     lp64_product,                                           \
  44                     range,                                                  \
  45                     constraint,                                             \
  46                     writeable)                                              \
  47                                                                             \
  48   experimental(size_t, EpsilonPrintHeapSteps, 20,                           \
  49           "Print heap occupancy stats with this number of steps. "          \
  50           "0 turns the printing off.")                                      \
  51           range(0, max_intx)                                                \
  52                                                                             \
  53   experimental(size_t, EpsilonUpdateCountersStep, 1 * M,                    \
  54           "Update heap occupancy counters after allocating this much "      \
  55           "memory. Higher values would make allocations faster at "         \
  56           "the expense of lower resolution in heap counters.")              \
  57           range(1, max_intx)                                                \
  58                                                                             \
  59   experimental(size_t, EpsilonMaxTLABSize, 4 * M,                           \
  60           "Max TLAB size to use with Epsilon GC. Larger value improves "    \
  61           "performance at the expense of per-thread memory waste. This "    \
  62           "asks TLAB machinery to cap TLAB sizes at this value.")           \
  63           range(1, max_intx)                                                \
  64                                                                             \
  65   experimental(bool, EpsilonElasticTLAB, true,                              \
  66           "Use elastic policy to manage TLAB sizes. This conserves memory " \
  67           "for non-actively allocating threads, even when they request "    \
  68           "large TLABs for themselves. Active threads would experience "    \
  69           "smaller TLABs until policy catches up.")                         \
  70                                                                             \
  71   experimental(bool, EpsilonElasticTLABDecay, true,                         \
  72           "Use timed decays to shrik TLAB sizes. This conserves memory "    \
  73           "for the threads that allocate in bursts of different sizes, "    \
  74           "for example the small/rare allocations coming after the initial "\
  75           "large burst.")                                                   \
  76                                                                             \
  77   experimental(double, EpsilonTLABElasticity, 1.1,                          \
  78           "Multiplier to use when deciding on next TLAB size. Larger value "\
  79           "improves performance at the expense of per-thread memory waste. "\
  80           "Lower value improves memory footprint, but penalizes actively "  \
  81           "allocating threads.")                                            \
  82           range(1.0, DBL_MAX)                                               \
  83                                                                             \
  84   experimental(size_t, EpsilonTLABDecayTime, 1000,                          \
  85           "TLAB sizing policy decays to initial size after thread had not " \
  86           "allocated for this long. Time is in milliseconds. Lower value "  \
  87           "improves memory footprint, but penalizes actively allocating "   \
  88           "threads.")                                                       \
  89           range(1, max_intx)                                                \
  90                                                                             \
  91   experimental(size_t, EpsilonMinHeapExpand, 128 * M,                       \
  92           "Min expansion step for heap. Larger value improves performance " \
  93           "at the potential expense of memory waste.")                      \
  94           range(1, max_intx)
  95 
  96 #endif // SHARE_VM_GC_EPSILON_GLOBALS_HPP