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

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