RFR(S): 8142341: GC: current flags need ranges to be implemented
sangheon.kim
sangheon.kim at oracle.com
Fri Nov 20 21:04:27 UTC 2015
Hi all,
Could I have a couple of reviews for this change to add explicit 'range'
for flags?
Previously, we added 'range' when it is needed to avoid assert/crash but
now explicit 'range' are needed for all flags.
All flags should have 'range' or 'constraint' at least.
CR: https://bugs.openjdk.java.net/browse/JDK-8142341
Webrev: http://cr.openjdk.java.net/~sangheki/8142341/webrev.00
Testing: JPRT, RBT (hotspot/test/:hotspot_all,testlist,noncolo.testlist
--add-tonga-keyword quick), hotspot/test/runtime/CommandLine for embedded
* Summary
1. Added 3 new constraint functions.
1) HeapBaseMinAddress: Added to avoid an overflow after align up and
this flag makes hang up without constraint function. (newly added as a
part of GC work)
2) TLABWasteIncrement: Without this constraint function we don't
have problems (even many GCs happen). But added to avoid an overflow at
ThreadLocalAllocBuffer::record_slow_allocation(). There are also
separate CR for this overflow ( JDK-8143352 ).
3) NUMAInterleaveGranularity: Added to avoid an overflow after align up.
2. Some flags have narrower range than their type.
1) Here's the reason why some flags should have different range.
(same order from globals.hpp)
{flag type} {flag name}: (range), {comment}
size_t NUMAInterleaveGranularity: (os::vm_allocation_granularity(),
max_uintx), there is a comment at numa_interleaving_init() that this
flag should be larger than vm_allocation_granularity().
uintx CMSOldPLABReactivityFactor: (1,max_uintx), couldn't be zero as
used for multiplication
uintx CMS_FLSPadding: (0, max_juint), used to set a function which has
'unsigned int' type input parameter.
uintx CMS_SweepPadding: (0, max_juint), used to set a function which has
'unsigned int' type input parameter.
intx CMSWaitDuration: (min_jint, max_jint), used to set a function which
has 'long' type input parameter.
uintx PausePadding: (0, max_juint), used to set a function which has
'unsigned int' type input parameter.
uintx PromotedPadding: (0, max_juint), used to set a function which has
'unsigned int' type input parameter.
uintx SurvivorPadding: (0, max_juint), used to set a function which has
'unsigned int' type input parameter.
uintx AdaptiveSizePolicyCollectionCostMargin: (0, 100), as this flag is
divided by 100 I assume this is percentage.
uintx GCTimeRatio: (0, max_juint), used to set a function which has
'unsigned int' type input parameter.
intx PrefetchCopyIntervalInBytes: (-1, max_jint)
intx PrefetchScanIntervalInBytes: (-1, max_jint)
intx PrefetchFieldsAhead: (-1, max_jint), I think these 3 Prefetch*
flags should have same upper limit and looking at their related codes
'max_jint' seems appropriate ( no problem with 'max_jint' during
testing). However, as Prefetch::read/write() needs 'intx', 'intx' also
seems good but we have to fix some codes (maybe including generated codes).
uintx CPUForCMSThread: (0, max_juint), used to set a function which has
'unsigned int' type input parameter.
uintx ProcessDistributionStride: (0, max_juint), used to set uint
variable and used 'for loop' which has uint increment. i.e. for (uint
i=0; i<ProcessDistributionStride; i++)
uintx CMSCoordinatorYieldSleepCount: (0, max_juint), used at 'increment
for loop()' as max value and the increment is uint.
uintx CMSYieldSleepCount: (0, max_juint), used at 'increment for
loop()' as max value and the increment is uint.
uintx TLABRefillWasteFraction: (1, max_juint), used as a return value of
uint type function and for division. i.e. uint
GCTLABConfiguration::tlab_refill_waste_limit()() { return
TLABRefillWasteFraction; }
uintx TLABWasteIncrement: (0, max_jint), type cast to (int)
intx PrintCMSStatistics: (0,2), flag to choose print mode and we only
use " if (a !=0, >0, >1)".
intx PrintFLSStatistics: (0,2), flag to choose print mode and we only
use " if (a !=0, >0, >1)".
intx PrintFLSCensus: (0,1), flag to choose print mode and we only use "
if (a !=0, >0)".
uintx GCDrainStackTargetSize: (0, max_juint), type cast to 'unsigned int'
(g1_globals.hpp)
intx G1ConcRefinementThresholdStep: (0, max_jint), used to set (int)
type variable.
3. Excluded flags from TestOptionsWithRanges.java
1) Memory and thread related flags: tests for these flags will consume
too many resources from the system.
2) VMThreadStackSize: range work for this flag is not included in this
patch but I faced OOME several times, so excluded.
* I will reflect Dmitry's enhancement(JDK-8143038: [TESTBUG]
TestOptionsWithRanges: allow excluding only a subset of tested values
specified for a flag) next time.
Thanks,
Sangheon
More information about the hotspot-dev
mailing list