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

Mon, 03 Aug 2009 12:59:30 -0700

author
johnc
date
Mon, 03 Aug 2009 12:59:30 -0700
changeset 1324
15c5903cf9e1
parent 1319
83b687ce3090
child 1325
6cb8e9df7174
permissions
-rw-r--r--

6865703: G1: Parallelize hot card cache cleanup
Summary: Have the GC worker threads clear the hot card cache in parallel by having each worker thread claim a chunk of the card cache and process the cards in that chunk. The size of the chunks that each thread will claim is determined at VM initialization from the size of the card cache and the number of worker threads.
Reviewed-by: jmasa, tonyp

ysr@777 1 /*
xdono@1014 2 * Copyright 2001-2009 Sun Microsystems, Inc. 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 *
ysr@777 19 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
ysr@777 20 * CA 95054 USA or visit www.sun.com if you need additional information or
ysr@777 21 * have any questions.
ysr@777 22 *
ysr@777 23 */
ysr@777 24
ysr@777 25 //
ysr@777 26 // Defines all globals flags used by the garbage-first compiler.
ysr@777 27 //
ysr@777 28
ysr@785 29 #define G1_FLAGS(develop, develop_pd, product, product_pd, diagnostic, experimental, notproduct, manageable, product_rw) \
ysr@777 30 \
johnc@1186 31 product(intx, G1ParallelGCAllocBufferSize, 8*K, \
ysr@777 32 "Size of parallel G1 allocation buffers in to-space.") \
ysr@777 33 \
johnc@1186 34 product(intx, G1ConfidencePercent, 50, \
ysr@777 35 "Confidence level for MMU/pause predictions") \
ysr@777 36 \
tonyp@1319 37 develop(intx, G1MarkingOverheadPercent, 0, \
ysr@777 38 "Overhead of concurrent marking") \
ysr@777 39 \
johnc@1186 40 develop(bool, G1AccountConcurrentOverhead, false, \
ysr@777 41 "Whether soft real-time compliance in G1 will take into account" \
ysr@777 42 "concurrent overhead") \
ysr@777 43 \
ysr@777 44 product(intx, G1YoungGenSize, 0, \
ysr@777 45 "Size of the G1 young generation, 0 is the adaptive policy") \
ysr@777 46 \
johnc@1186 47 develop(bool, G1Gen, true, \
ysr@777 48 "If true, it will enable the generational G1") \
ysr@777 49 \
tonyp@1319 50 develop(intx, G1GCPercent, 10, \
ysr@777 51 "The desired percent time spent on GC") \
ysr@777 52 \
johnc@1186 53 develop(intx, G1PolicyVerbose, 0, \
ysr@777 54 "The verbosity level on G1 policy decisions") \
ysr@777 55 \
ysr@777 56 develop(bool, G1UseHRIntoRS, true, \
ysr@777 57 "Determines whether the 'advanced' HR Into rem set is used.") \
ysr@777 58 \
ysr@777 59 develop(intx, G1MarkingVerboseLevel, 0, \
ysr@777 60 "Level (0-4) of verboseness of the marking code") \
ysr@777 61 \
tonyp@1180 62 develop(bool, G1VerifyConcMarkPrintReachable, false, \
ysr@777 63 "If conc mark verification fails, print reachable objects") \
ysr@777 64 \
ysr@777 65 develop(bool, G1TraceMarkStackOverflow, false, \
ysr@777 66 "If true, extra debugging code for CM restart for ovflw.") \
ysr@777 67 \
ysr@777 68 develop(intx, G1PausesBtwnConcMark, -1, \
ysr@777 69 "If positive, fixed number of pauses between conc markings") \
ysr@777 70 \
johnc@1186 71 diagnostic(bool, G1SummarizeConcurrentMark, false, \
ysr@777 72 "Summarize concurrent mark info") \
ysr@777 73 \
johnc@1186 74 diagnostic(bool, G1SummarizeRSetStats, false, \
ysr@777 75 "Summarize remembered set processing info") \
ysr@777 76 \
tonyp@1319 77 diagnostic(intx, G1SummarizeRSetStatsPeriod, 0, \
tonyp@1319 78 "The period (in number of GCs) at which we will generate " \
tonyp@1319 79 "update buffer processing info " \
tonyp@1319 80 "(0 means do not periodically generate this info); " \
tonyp@1319 81 "it also requires -XX:+G1SummarizeRSetStats") \
tonyp@1319 82 \
johnc@1186 83 diagnostic(bool, G1SummarizeZFStats, false, \
ysr@777 84 "Summarize zero-filling info") \
ysr@777 85 \
johnc@1186 86 develop(bool, G1TraceConcurrentRefinement, false, \
ysr@777 87 "Trace G1 concurrent refinement") \
ysr@777 88 \
johnc@1186 89 product(intx, G1MarkStackSize, 2 * 1024 * 1024, \
ysr@777 90 "Size of the mark stack for concurrent marking.") \
ysr@777 91 \
johnc@1186 92 product(intx, G1MarkRegionStackSize, 1024 * 1024, \
ysr@777 93 "Size of the region stack for concurrent marking.") \
ysr@777 94 \
ysr@777 95 develop(bool, G1ConcRefine, true, \
ysr@777 96 "If true, run concurrent rem set refinement for G1") \
ysr@777 97 \
ysr@777 98 develop(intx, G1ConcRefineTargTraversals, 4, \
ysr@777 99 "Number of concurrent refinement we try to achieve") \
ysr@777 100 \
ysr@777 101 develop(intx, G1ConcRefineInitialDelta, 4, \
ysr@777 102 "Number of heap regions of alloc ahead of starting collection " \
ysr@777 103 "pause to start concurrent refinement (initially)") \
ysr@777 104 \
johnc@1186 105 develop(bool, G1SmoothConcRefine, true, \
ysr@777 106 "Attempts to smooth out the overhead of concurrent refinement") \
ysr@777 107 \
ysr@777 108 develop(bool, G1ConcZeroFill, true, \
ysr@777 109 "If true, run concurrent zero-filling thread") \
ysr@777 110 \
ysr@777 111 develop(intx, G1ConcZFMaxRegions, 1, \
ysr@777 112 "Stop zero-filling when # of zf'd regions reaches") \
ysr@777 113 \
ysr@777 114 product(intx, G1SteadyStateUsed, 90, \
ysr@777 115 "If non-0, try to maintain 'used' at this pct (of max)") \
ysr@777 116 \
ysr@777 117 product(intx, G1SteadyStateUsedDelta, 30, \
ysr@777 118 "If G1SteadyStateUsed is non-0, then do pause this number of " \
ysr@777 119 "of percentage points earlier if no marking is in progress.") \
ysr@777 120 \
ysr@777 121 develop(bool, G1SATBBarrierPrintNullPreVals, false, \
ysr@777 122 "If true, count frac of ptr writes with null pre-vals.") \
ysr@777 123 \
ysr@777 124 product(intx, G1SATBLogBufferSize, 1*K, \
ysr@777 125 "Number of entries in an SATB log buffer.") \
ysr@777 126 \
ysr@777 127 product(intx, G1SATBProcessCompletedThreshold, 20, \
ysr@777 128 "Number of completed buffers that triggers log processing.") \
ysr@777 129 \
ysr@777 130 develop(intx, G1ExtraRegionSurvRate, 33, \
ysr@777 131 "If the young survival rate is S, and there's room left in " \
ysr@777 132 "to-space, we will allow regions whose survival rate is up to " \
ysr@777 133 "S + (1 - S)*X, where X is this parameter (as a fraction.)") \
ysr@777 134 \
ysr@777 135 develop(intx, G1InitYoungSurvRatio, 50, \
ysr@777 136 "Expected Survival Rate for newly allocated bytes") \
ysr@777 137 \
ysr@777 138 develop(bool, G1SATBPrintStubs, false, \
ysr@777 139 "If true, print generated stubs for the SATB barrier") \
ysr@777 140 \
johnc@1186 141 product(intx, G1ExpandByPercentOfAvailable, 20, \
ysr@777 142 "When expanding, % of uncommitted space to claim.") \
ysr@777 143 \
ysr@777 144 develop(bool, G1RSBarrierRegionFilter, true, \
ysr@777 145 "If true, generate region filtering code in RS barrier") \
ysr@777 146 \
ysr@777 147 develop(bool, G1RSBarrierNullFilter, true, \
ysr@777 148 "If true, generate null-pointer filtering code in RS barrier") \
ysr@777 149 \
ysr@777 150 develop(bool, G1PrintCTFilterStats, false, \
ysr@777 151 "If true, print stats on RS filtering effectiveness") \
ysr@777 152 \
iveresov@1051 153 develop(bool, G1DeferredRSUpdate, true, \
iveresov@1051 154 "If true, use deferred RS updates") \
iveresov@1051 155 \
ysr@777 156 develop(bool, G1RSLogCheckCardTable, false, \
ysr@777 157 "If true, verify that no dirty cards remain after RS log " \
ysr@777 158 "processing.") \
ysr@777 159 \
ysr@777 160 develop(bool, G1RSCountHisto, false, \
ysr@777 161 "If true, print a histogram of RS occupancies after each pause") \
ysr@777 162 \
ysr@777 163 develop(intx, G1PrintRegionLivenessInfo, 0, \
ysr@777 164 "When > 0, print the occupancies of the <n> best and worst" \
ysr@777 165 "regions.") \
ysr@777 166 \
ysr@777 167 develop(bool, G1PrintParCleanupStats, false, \
ysr@777 168 "When true, print extra stats about parallel cleanup.") \
ysr@777 169 \
ysr@777 170 develop(bool, G1DisablePreBarrier, false, \
ysr@777 171 "Disable generation of pre-barrier (i.e., marking barrier) ") \
ysr@777 172 \
ysr@777 173 develop(bool, G1DisablePostBarrier, false, \
ysr@777 174 "Disable generation of post-barrier (i.e., RS barrier) ") \
ysr@777 175 \
tonyp@1318 176 product(intx, G1UpdateBufferSize, 256, \
tonyp@1318 177 "Size of an update buffer") \
tonyp@1318 178 \
tonyp@1318 179 product(intx, G1UpdateBufferQueueProcessingThreshold, 5, \
tonyp@1318 180 "Number of enqueued update buffers that will " \
tonyp@1318 181 "trigger concurrent processing") \
tonyp@1318 182 \
tonyp@1318 183 product(intx, G1UpdateBufferQueueMaxLength, 30, \
tonyp@1318 184 "Maximum number of enqueued update buffers before mutator " \
tonyp@1318 185 "threads start processing new ones instead of enqueueing them") \
ysr@777 186 \
ysr@777 187 develop(intx, G1ConcRSLogCacheSize, 10, \
ysr@777 188 "Log base 2 of the length of conc RS hot-card cache.") \
ysr@777 189 \
johnc@1186 190 develop(bool, G1ConcRSCountTraversals, false, \
ysr@777 191 "If true, gather data about the number of times CR traverses " \
ysr@777 192 "cards ") \
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 \
johnc@1186 200 develop(intx, G1LogRSRegionEntries, 7, \
ysr@777 201 "Log_2 of max number of regions for which we keep bitmaps.") \
ysr@777 202 \
ysr@777 203 develop(bool, G1RecordHRRSOops, false, \
ysr@777 204 "When true, record recent calls to rem set operations.") \
ysr@777 205 \
ysr@777 206 develop(bool, G1RecordHRRSEvents, false, \
ysr@777 207 "When true, record recent calls to rem set operations.") \
ysr@777 208 \
ysr@777 209 develop(intx, G1MaxVerifyFailures, -1, \
ysr@777 210 "The maximum number of verification failrues to print. " \
ysr@777 211 "-1 means print all.") \
ysr@777 212 \
ysr@777 213 develop(bool, G1ScrubRemSets, true, \
ysr@777 214 "When true, do RS scrubbing after cleanup.") \
ysr@777 215 \
ysr@777 216 develop(bool, G1RSScrubVerbose, false, \
ysr@777 217 "When true, do RS scrubbing with verbose output.") \
ysr@777 218 \
ysr@777 219 develop(bool, G1YoungSurvRateVerbose, false, \
ysr@777 220 "print out the survival rate of young regions according to age.") \
ysr@777 221 \
ysr@777 222 develop(intx, G1YoungSurvRateNumRegionsSummary, 0, \
ysr@777 223 "the number of regions for which we'll print a surv rate " \
ysr@777 224 "summary.") \
ysr@777 225 \
ysr@777 226 product(bool, G1UseScanOnlyPrefix, false, \
ysr@777 227 "It determines whether the system will calculate an optimum " \
ysr@777 228 "scan-only set.") \
ysr@777 229 \
johnc@1186 230 product(intx, G1MinReservePercent, 10, \
ysr@777 231 "It determines the minimum reserve we should have in the heap " \
ysr@777 232 "to minimize the probability of promotion failure.") \
ysr@777 233 \
johnc@1186 234 diagnostic(bool, G1PrintRegions, false, \
ysr@777 235 "If set G1 will print information on which regions are being " \
ysr@777 236 "allocated and which are reclaimed.") \
ysr@777 237 \
ysr@777 238 develop(bool, G1HRRSUseSparseTable, true, \
ysr@777 239 "When true, use sparse table to save space.") \
ysr@777 240 \
ysr@777 241 develop(bool, G1HRRSFlushLogBuffersOnVerify, false, \
ysr@777 242 "Forces flushing of log buffers before verification.") \
ysr@777 243 \
johnc@1186 244 product(bool, G1UseSurvivorSpaces, true, \
apetrusenko@980 245 "When true, use survivor space.") \
apetrusenko@980 246 \
johnc@1186 247 develop(bool, G1FixedTenuringThreshold, false, \
apetrusenko@980 248 "When set, G1 will not adjust the tenuring threshold") \
apetrusenko@980 249 \
johnc@1186 250 develop(bool, G1FixedEdenSize, false, \
apetrusenko@980 251 "When set, G1 will not allocate unused survivor space regions") \
apetrusenko@980 252 \
johnc@1186 253 develop(uintx, G1FixedSurvivorSpaceSize, 0, \
apetrusenko@980 254 "If non-0 is the size of the G1 survivor space, " \
tonyp@1073 255 "otherwise SurvivorRatio is used to determine the size") \
tonyp@1073 256 \
johnc@1186 257 experimental(bool, G1ParallelRSetUpdatingEnabled, false, \
tonyp@1073 258 "Enables the parallelization of remembered set updating " \
tonyp@1073 259 "during evacuation pauses") \
tonyp@1073 260 \
johnc@1186 261 experimental(bool, G1ParallelRSetScanningEnabled, false, \
tonyp@1073 262 "Enables the parallelization of remembered set scanning " \
iveresov@1229 263 "during evacuation pauses") \
iveresov@1229 264 \
iveresov@1229 265 product(uintx, G1ParallelRSetThreads, 0, \
iveresov@1229 266 "If non-0 is the number of parallel rem set update threads, " \
iveresov@1229 267 "otherwise the value is determined ergonomically.")
ysr@777 268
ysr@785 269 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)

mercurial