RFR 8134995(M): [REDO] GC: implement ranges (optionally constraints) for those flags that have them missing

Jon Masamitsu jon.masamitsu at oracle.com
Thu Sep 24 22:16:04 UTC 2015



On 09/23/2015 01:00 PM, Kim Barrett wrote:
> On Sep 22, 2015, at 7:04 PM, Jon Masamitsu <jon.masamitsu at oracle.com> wrote:
>>>> src/share/vm/gc/g1/g1_globals.hpp
>>>>   240   product(uintx, G1ConcRefinementThreads, 0,                                \
>>>> ...
>>>>   243           range(0, (max_jint-1)/4)                                          \
>>>>
>>>> I know we discussed the problem of thread counts.  I'd suggested
>>>> perhaps basing the upper bound on the number of processors. (Some
>>>> care might be needed for uniprocessor systems.) I couldn't find any
>>>> followup on that suggestion though.
>> Kim,
>>
>> My apologies but I dissuaded Sangheon from that idea.   I don't think the
>> number of processors was enough.  A hundred or a thousand times the
>> number of processors should be enough but if I had to pick some
>> multiplier like that, I'd rather pick something limited by the size
>> of the type and back off some.   It's still arbitrary but whereas I might
>> some decade be surprised that 1000 * #-of-processors was too few,
>> I'm not going to see 1,000,000,000 be too few.
> I suspect we're using different meanings for "processor".  I meant
> "number of processing units", e.g. the number of lines in Linux
> /proc/cpuinfo that begin with the word "processor".  A more precise
> term might be "hardware concurrency".  A maximum multiplier of 1-2
> seems to me sufficient for these generally CPU-intensive tasks.243           range(0, (max_jint-1)/4)
>

I try to use the term "hardware threads" which I think matches
your definition and I agree that I've never seen a case where a
small integer * #of hardware threads was not a reasonable limit.
But I think the test programs that check the ranges are
generated by looking at lines in the source such as 243

243           range(0, (max_jint-1)/4)

If the line had some call to a function to get the number of hardware
threads I could see things going wrong
     - Maybe generation of tests is not on the same machine as run the 
tests and
range is set at the time the test is generated
     - Maybe the determination of the number of hardware threads is not 
reliable
     - Maybe code gets moved around so that the number of hardware threads
are not available when argument parsing is done

Something simple like a really big number trimmed back some still
appeals to me.

Jon



More information about the hotspot-dev mailing list