annotate src/share/vm/gc_implementation/g1/g1_globals.hpp @ 2034:7e37af9d69ef

7011379: G1: overly long concurrent marking cycles Summary: This changeset introduces filtering of SATB buffers at the point when they are about to be enqueued. If this filtering clears enough entries on each buffer, the buffer can then be re-used and not enqueued. This cuts down the number of SATB buffers that need to be processed by the concurrent marking threads. Reviewed-by: johnc, ysr
author tonyp
date Wed, 19 Jan 2011 09:35:17 -0500
parents f95d63e2154a
children 0fa27f37d4d4
rev   line source
ysr@342 1 /*
tonyp@2034 2 * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved.
ysr@342 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
ysr@342 4 *
ysr@342 5 * This code is free software; you can redistribute it and/or modify it
ysr@342 6 * under the terms of the GNU General Public License version 2 only, as
ysr@342 7 * published by the Free Software Foundation.
ysr@342 8 *
ysr@342 9 * This code is distributed in the hope that it will be useful, but WITHOUT
ysr@342 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
ysr@342 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
ysr@342 12 * version 2 for more details (a copy is included in the LICENSE file that
ysr@342 13 * accompanied this code).
ysr@342 14 *
ysr@342 15 * You should have received a copy of the GNU General Public License version
ysr@342 16 * 2 along with this work; if not, write to the Free Software Foundation,
ysr@342 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
ysr@342 18 *
trims@1472 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
trims@1472 20 * or visit www.oracle.com if you need additional information or have any
trims@1472 21 * questions.
ysr@342 22 *
ysr@342 23 */
ysr@342 24
stefank@1879 25 #ifndef SHARE_VM_GC_IMPLEMENTATION_G1_G1_GLOBALS_HPP
stefank@1879 26 #define SHARE_VM_GC_IMPLEMENTATION_G1_G1_GLOBALS_HPP
stefank@1879 27
stefank@1879 28 #include "runtime/globals.hpp"
stefank@1879 29
ysr@342 30 //
ysr@342 31 // Defines all globals flags used by the garbage-first compiler.
ysr@342 32 //
ysr@342 33
ysr@350 34 #define G1_FLAGS(develop, develop_pd, product, product_pd, diagnostic, experimental, notproduct, manageable, product_rw) \
ysr@342 35 \
johnc@751 36 product(intx, G1ConfidencePercent, 50, \
ysr@342 37 "Confidence level for MMU/pause predictions") \
ysr@342 38 \
tonyp@884 39 develop(intx, G1MarkingOverheadPercent, 0, \
ysr@342 40 "Overhead of concurrent marking") \
ysr@342 41 \
johnc@751 42 develop(bool, G1Gen, true, \
ysr@342 43 "If true, it will enable the generational G1") \
ysr@342 44 \
johnc@751 45 develop(intx, G1PolicyVerbose, 0, \
ysr@342 46 "The verbosity level on G1 policy decisions") \
ysr@342 47 \
ysr@342 48 develop(intx, G1MarkingVerboseLevel, 0, \
ysr@342 49 "Level (0-4) of verboseness of the marking code") \
ysr@342 50 \
tonyp@1044 51 develop(bool, G1PrintReachableAtInitialMark, false, \
tonyp@1044 52 "Reachable object dump at the initial mark pause") \
tonyp@1044 53 \
tonyp@1044 54 develop(bool, G1VerifyDuringGCPrintReachable, false, \
tonyp@1044 55 "If conc mark verification fails, dump reachable objects") \
tonyp@1044 56 \
tonyp@1044 57 develop(ccstr, G1PrintReachableBaseFile, NULL, \
tonyp@1044 58 "The base file name for the reachable object dumps") \
ysr@342 59 \
ysr@342 60 develop(bool, G1TraceMarkStackOverflow, false, \
ysr@342 61 "If true, extra debugging code for CM restart for ovflw.") \
ysr@342 62 \
ysr@342 63 develop(intx, G1PausesBtwnConcMark, -1, \
ysr@342 64 "If positive, fixed number of pauses between conc markings") \
ysr@342 65 \
tonyp@1282 66 diagnostic(bool, G1SummarizeConcMark, false, \
ysr@342 67 "Summarize concurrent mark info") \
ysr@342 68 \
johnc@751 69 diagnostic(bool, G1SummarizeRSetStats, false, \
ysr@342 70 "Summarize remembered set processing info") \
ysr@342 71 \
tonyp@884 72 diagnostic(intx, G1SummarizeRSetStatsPeriod, 0, \
tonyp@884 73 "The period (in number of GCs) at which we will generate " \
tonyp@884 74 "update buffer processing info " \
tonyp@884 75 "(0 means do not periodically generate this info); " \
tonyp@884 76 "it also requires -XX:+G1SummarizeRSetStats") \
tonyp@884 77 \
johnc@751 78 diagnostic(bool, G1SummarizeZFStats, false, \
ysr@342 79 "Summarize zero-filling info") \
ysr@342 80 \
tonyp@1282 81 diagnostic(bool, G1TraceConcRefinement, false, \
ysr@342 82 "Trace G1 concurrent refinement") \
ysr@342 83 \
johnc@751 84 product(intx, G1MarkRegionStackSize, 1024 * 1024, \
ysr@342 85 "Size of the region stack for concurrent marking.") \
ysr@342 86 \
ysr@342 87 develop(bool, G1ConcZeroFill, true, \
ysr@342 88 "If true, run concurrent zero-filling thread") \
ysr@342 89 \
ysr@342 90 develop(intx, G1ConcZFMaxRegions, 1, \
ysr@342 91 "Stop zero-filling when # of zf'd regions reaches") \
ysr@342 92 \
ysr@342 93 develop(bool, G1SATBBarrierPrintNullPreVals, false, \
ysr@342 94 "If true, count frac of ptr writes with null pre-vals.") \
ysr@342 95 \
tonyp@1282 96 product(intx, G1SATBBufferSize, 1*K, \
ysr@342 97 "Number of entries in an SATB log buffer.") \
ysr@342 98 \
tonyp@1282 99 develop(intx, G1SATBProcessCompletedThreshold, 20, \
ysr@342 100 "Number of completed buffers that triggers log processing.") \
ysr@342 101 \
tonyp@2034 102 product(uintx, G1SATBBufferEnqueueingThresholdPercent, 60, \
tonyp@2034 103 "Before enqueueing them, each mutator thread tries to do some " \
tonyp@2034 104 "filtering on the SATB buffers it generates. If post-filtering " \
tonyp@2034 105 "the percentage of retained entries is over this threshold " \
tonyp@2034 106 "the buffer will be enqueued for processing. A value of 0 " \
tonyp@2034 107 "specifies that mutator threads should not do such filtering.") \
tonyp@2034 108 \
ysr@342 109 develop(intx, G1ExtraRegionSurvRate, 33, \
ysr@342 110 "If the young survival rate is S, and there's room left in " \
ysr@342 111 "to-space, we will allow regions whose survival rate is up to " \
ysr@342 112 "S + (1 - S)*X, where X is this parameter (as a fraction.)") \
ysr@342 113 \
ysr@342 114 develop(intx, G1InitYoungSurvRatio, 50, \
ysr@342 115 "Expected Survival Rate for newly allocated bytes") \
ysr@342 116 \
ysr@342 117 develop(bool, G1SATBPrintStubs, false, \
ysr@342 118 "If true, print generated stubs for the SATB barrier") \
ysr@342 119 \
tonyp@1282 120 experimental(intx, G1ExpandByPercentOfAvailable, 20, \
ysr@342 121 "When expanding, % of uncommitted space to claim.") \
ysr@342 122 \
ysr@342 123 develop(bool, G1RSBarrierRegionFilter, true, \
ysr@342 124 "If true, generate region filtering code in RS barrier") \
ysr@342 125 \
ysr@342 126 develop(bool, G1RSBarrierNullFilter, true, \
ysr@342 127 "If true, generate null-pointer filtering code in RS barrier") \
ysr@342 128 \
ysr@342 129 develop(bool, G1PrintCTFilterStats, false, \
ysr@342 130 "If true, print stats on RS filtering effectiveness") \
ysr@342 131 \
iveresov@616 132 develop(bool, G1DeferredRSUpdate, true, \
iveresov@616 133 "If true, use deferred RS updates") \
iveresov@616 134 \
ysr@342 135 develop(bool, G1RSLogCheckCardTable, false, \
ysr@342 136 "If true, verify that no dirty cards remain after RS log " \
ysr@342 137 "processing.") \
ysr@342 138 \
ysr@342 139 develop(bool, G1RSCountHisto, false, \
ysr@342 140 "If true, print a histogram of RS occupancies after each pause") \
ysr@342 141 \
ysr@342 142 develop(intx, G1PrintRegionLivenessInfo, 0, \
ysr@342 143 "When > 0, print the occupancies of the <n> best and worst" \
ysr@342 144 "regions.") \
ysr@342 145 \
ysr@342 146 develop(bool, G1PrintParCleanupStats, false, \
ysr@342 147 "When true, print extra stats about parallel cleanup.") \
ysr@342 148 \
ysr@342 149 develop(bool, G1DisablePreBarrier, false, \
ysr@342 150 "Disable generation of pre-barrier (i.e., marking barrier) ") \
ysr@342 151 \
ysr@342 152 develop(bool, G1DisablePostBarrier, false, \
ysr@342 153 "Disable generation of post-barrier (i.e., RS barrier) ") \
ysr@342 154 \
tonyp@883 155 product(intx, G1UpdateBufferSize, 256, \
tonyp@883 156 "Size of an update buffer") \
tonyp@883 157 \
tonyp@1282 158 product(intx, G1ConcRefinementYellowZone, 0, \
tonyp@883 159 "Number of enqueued update buffers that will " \
iveresov@1111 160 "trigger concurrent processing. Will be selected ergonomically " \
iveresov@1111 161 "by default.") \
tonyp@883 162 \
tonyp@1282 163 product(intx, G1ConcRefinementRedZone, 0, \
tonyp@883 164 "Maximum number of enqueued update buffers before mutator " \
iveresov@1111 165 "threads start processing new ones instead of enqueueing them. " \
iveresov@1111 166 "Will be selected ergonomically by default. Zero will disable " \
iveresov@1111 167 "concurrent processing.") \
iveresov@1111 168 \
tonyp@1282 169 product(intx, G1ConcRefinementGreenZone, 0, \
iveresov@1111 170 "The number of update buffers that are left in the queue by the " \
iveresov@1111 171 "concurrent processing threads. Will be selected ergonomically " \
iveresov@1111 172 "by default.") \
iveresov@1111 173 \
tonyp@1282 174 product(intx, G1ConcRefinementServiceIntervalMillis, 300, \
iveresov@1111 175 "The last concurrent refinement thread wakes up every " \
iveresov@1111 176 "specified number of milliseconds to do miscellaneous work.") \
iveresov@1111 177 \
tonyp@1282 178 product(intx, G1ConcRefinementThresholdStep, 0, \
iveresov@1111 179 "Each time the rset update queue increases by this amount " \
iveresov@1111 180 "activate the next refinement thread if available. " \
iveresov@1111 181 "Will be selected ergonomically by default.") \
iveresov@1111 182 \
tonyp@1282 183 product(intx, G1RSetUpdatingPauseTimePercent, 10, \
iveresov@1111 184 "A target percentage of time that is allowed to be spend on " \
iveresov@1111 185 "process RS update buffers during the collection pause.") \
iveresov@1111 186 \
tonyp@1282 187 product(bool, G1UseAdaptiveConcRefinement, true, \
iveresov@1111 188 "Select green, yellow and red zones adaptively to meet the " \
iveresov@1111 189 "the pause requirements.") \
ysr@342 190 \
ysr@342 191 develop(intx, G1ConcRSLogCacheSize, 10, \
ysr@342 192 "Log base 2 of the length of conc RS hot-card cache.") \
ysr@342 193 \
johnc@751 194 develop(intx, G1ConcRSHotCardLimit, 4, \
ysr@342 195 "The threshold that defines (>=) a hot card.") \
ysr@342 196 \
ysr@342 197 develop(bool, G1PrintOopAppls, false, \
ysr@342 198 "When true, print applications of closures to external locs.") \
ysr@342 199 \
iveresov@1261 200 develop(intx, G1RSetRegionEntriesBase, 256, \
iveresov@1261 201 "Max number of regions in a fine-grain table per MB.") \
iveresov@1261 202 \
iveresov@1261 203 product(intx, G1RSetRegionEntries, 0, \
iveresov@1261 204 "Max number of regions for which we keep bitmaps." \
iveresov@1261 205 "Will be set ergonomically by default") \
iveresov@1261 206 \
iveresov@1261 207 develop(intx, G1RSetSparseRegionEntriesBase, 4, \
iveresov@1261 208 "Max number of entries per region in a sparse table " \
iveresov@1261 209 "per MB.") \
iveresov@1261 210 \
iveresov@1261 211 product(intx, G1RSetSparseRegionEntries, 0, \
iveresov@1261 212 "Max number of entries per region in a sparse table." \
iveresov@1261 213 "Will be set ergonomically by default.") \
ysr@342 214 \
ysr@342 215 develop(bool, G1RecordHRRSOops, false, \
ysr@342 216 "When true, record recent calls to rem set operations.") \
ysr@342 217 \
ysr@342 218 develop(bool, G1RecordHRRSEvents, false, \
ysr@342 219 "When true, record recent calls to rem set operations.") \
ysr@342 220 \
ysr@342 221 develop(intx, G1MaxVerifyFailures, -1, \
ysr@342 222 "The maximum number of verification failrues to print. " \
ysr@342 223 "-1 means print all.") \
ysr@342 224 \
ysr@342 225 develop(bool, G1ScrubRemSets, true, \
ysr@342 226 "When true, do RS scrubbing after cleanup.") \
ysr@342 227 \
ysr@342 228 develop(bool, G1RSScrubVerbose, false, \
ysr@342 229 "When true, do RS scrubbing with verbose output.") \
ysr@342 230 \
ysr@342 231 develop(bool, G1YoungSurvRateVerbose, false, \
ysr@342 232 "print out the survival rate of young regions according to age.") \
ysr@342 233 \
ysr@342 234 develop(intx, G1YoungSurvRateNumRegionsSummary, 0, \
ysr@342 235 "the number of regions for which we'll print a surv rate " \
ysr@342 236 "summary.") \
ysr@342 237 \
tonyp@1282 238 product(intx, G1ReservePercent, 10, \
ysr@342 239 "It determines the minimum reserve we should have in the heap " \
ysr@342 240 "to minimize the probability of promotion failure.") \
ysr@342 241 \
tonyp@1282 242 diagnostic(bool, G1PrintHeapRegions, false, \
ysr@342 243 "If set G1 will print information on which regions are being " \
ysr@342 244 "allocated and which are reclaimed.") \
ysr@342 245 \
ysr@342 246 develop(bool, G1HRRSUseSparseTable, true, \
ysr@342 247 "When true, use sparse table to save space.") \
ysr@342 248 \
ysr@342 249 develop(bool, G1HRRSFlushLogBuffersOnVerify, false, \
ysr@342 250 "Forces flushing of log buffers before verification.") \
ysr@342 251 \
ysr@1087 252 develop(bool, G1FailOnFPError, false, \
ysr@1087 253 "When set, G1 will fail when it encounters an FP 'error', " \
ysr@1087 254 "so as to allow debugging") \
ysr@1087 255 \
johnc@751 256 develop(bool, G1FixedTenuringThreshold, false, \
apetrusenko@545 257 "When set, G1 will not adjust the tenuring threshold") \
apetrusenko@545 258 \
johnc@751 259 develop(bool, G1FixedEdenSize, false, \
apetrusenko@545 260 "When set, G1 will not allocate unused survivor space regions") \
apetrusenko@545 261 \
johnc@751 262 develop(uintx, G1FixedSurvivorSpaceSize, 0, \
apetrusenko@545 263 "If non-0 is the size of the G1 survivor space, " \
tonyp@638 264 "otherwise SurvivorRatio is used to determine the size") \
tonyp@638 265 \
tonyp@942 266 product(uintx, G1HeapRegionSize, 0, \
tonyp@942 267 "Size of the G1 regions.") \
tonyp@942 268 \
tonyp@1357 269 experimental(bool, G1UseParallelRSetUpdating, true, \
tonyp@638 270 "Enables the parallelization of remembered set updating " \
tonyp@638 271 "during evacuation pauses") \
tonyp@638 272 \
tonyp@1357 273 experimental(bool, G1UseParallelRSetScanning, true, \
tonyp@638 274 "Enables the parallelization of remembered set scanning " \
iveresov@794 275 "during evacuation pauses") \
iveresov@794 276 \
tonyp@1282 277 product(uintx, G1ConcRefinementThreads, 0, \
iveresov@794 278 "If non-0 is the number of parallel rem set update threads, " \
johnc@890 279 "otherwise the value is determined ergonomically.") \
johnc@890 280 \
johnc@890 281 develop(intx, G1CardCountCacheExpandThreshold, 16, \
johnc@890 282 "Expand the card count cache if the number of collisions for " \
apetrusenko@940 283 "a particular entry exceeds this value.") \
apetrusenko@940 284 \
apetrusenko@940 285 develop(bool, G1VerifyCTCleanup, false, \
ysr@1194 286 "Verify card table cleanup.") \
ysr@1194 287 \
iveresov@1261 288 product(uintx, G1RSetScanBlockSize, 64, \
iveresov@1261 289 "Size of a work unit of cards claimed by a worker thread" \
iveresov@1261 290 "during RSet scanning.") \
iveresov@1261 291 \
ysr@1194 292 develop(bool, ReduceInitialCardMarksForG1, false, \
ysr@1194 293 "When ReduceInitialCardMarks is true, this flag setting " \
ysr@1194 294 " controls whether G1 allows the RICM optimization")
ysr@342 295
ysr@350 296 G1_FLAGS(DECLARE_DEVELOPER_FLAG, DECLARE_PD_DEVELOPER_FLAG, DECLARE_PRODUCT_FLAG, DECLARE_PD_PRODUCT_FLAG, DECLARE_DIAGNOSTIC_FLAG, DECLARE_EXPERIMENTAL_FLAG, DECLARE_NOTPRODUCT_FLAG, DECLARE_MANAGEABLE_FLAG, DECLARE_PRODUCT_RW_FLAG)
stefank@1879 297
stefank@1879 298 #endif // SHARE_VM_GC_IMPLEMENTATION_G1_G1_GLOBALS_HPP