src/share/vm/gc_implementation/g1/g1_globals.hpp

Wed, 19 Jan 2011 09:35:17 -0500

author
tonyp
date
Wed, 19 Jan 2011 09:35:17 -0500
changeset 2469
7e37af9d69ef
parent 2314
f95d63e2154a
child 2472
0fa27f37d4d4
permissions
-rw-r--r--

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

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

mercurial