RFR (S): JDK-8027428: Different conditions for printing taskqueue statistics for parallel gc, parNew and G1
Sangheon Kim
sangheon.kim at oracle.com
Thu Oct 2 22:33:19 UTC 2014
Hi all,
Here's 2nd webrev and this fix includes:
- Changed 'ParallelGCVerbose' to 'PrintTaskqueue' and
'PrintTerminationStats'. (product type)
webrev:
http://cr.openjdk.java.net/~jwilhelm/8027428/webrev.01/
Thanks,
Sangheon
On 10/02/2014 02:17 AM, Jesper Wilhelmsson wrote:
>
>> 2 okt 2014 kl. 09:05 skrev Bengt Rutisson <bengt.rutisson at oracle.com>:
>>
>>
>>> On 2014-10-02 09:06, Jesper Wilhelmsson wrote:
>>>
>>> Bengt Rutisson skrev 2/10/14 08:54:
>>>>
>>>>> On 2014-10-01 19:45, Sangheon Kim wrote:
>>>>> Hi ,
>>>>>
>>>>>> On 10/01/2014 10:29 AM, Sangheon Kim wrote:
>>>>>> Hi,
>>>>>>
>>>>>>>> On 10/01/2014 03:51 AM, Jesper Wilhelmsson wrote:
>>>>>>>> Thomas Schatzl skrev 1/10/14 10:12:
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>>> On Tue, 2014-09-30 at 22:58 +0200, Jesper Wilhelmsson wrote:
>>>>>>>>> Hi,
>>>>>>>>>
>>>>>>>>> Sangheon Kim skrev 30/9/14 19:41:
>>>>>>>>>> Hi Bengt,
>>>>>>>>>>
>>>>>>>>>> Thank you for looking at this change.
>>>>>>>>>>
>>>>>>>>>>> On 09/30/2014 01:36 AM, Bengt Rutisson wrote:
>>>>>>>>>>>
>>>>>>>>>>> Hi Sangheon,
>>>>>>>>>>>
>>>>>>>>>>>> On 2014-09-30 01:30, Sangheon Kim wrote:
>>>>>>>>>>>> Hi all,
>>>>>>>>>>>>
>>>>>>>>>>>> can I have reviews for the following small change to print
>>>>>>>>>>>> taskqueue statistics
>>>>>>>>>>>> for parallel gc, parNew and G1?
>>>>>>>>>>>> Main changes are:
>>>>>>>>>>>> 1) printing by 'ParallelGCVerbose' flag, not
>>>>>>>>>>>> 'PrintGCDetails &&
>>>>>>>>>>>> ParallelGCVerbose'.
>>>>>>>>>>>> 2) printing logs via 'gclog_or_tty', not 'tty'.
>>>>>>>>>>>> 3) adding 'totals' row to sums up.
>>>>>>>>>>>>
>>>>>>>>>>>> CR:
>>>>>>>>>>>> https://bugs.openjdk.java.net/browse/JDK-8027428
>>>>>>>>>>>>
>>>>>>>>>>>> Webrev:
>>>>>>>>>>>> http://cr.openjdk.java.net/~jwilhelm/8027428/
>>>>>>>>
>>>>>>>> [...]
>>>>>>>>
>>>>>>>>>>> But there is a lot of logging that has to do with parallel
>>>>>>>>>>> work (at least in
>>>>>>>>>>> G1) that is not controlled by this flag. It seems to me that
>>>>>>>>>>> the flag actually
>>>>>>>>>>> only controls the task queue statistics. Ideally we could
>>>>>>>>>>> change the name of
>>>>>>>>>>> the flag, but that will be too much overhead I guess. But we
>>>>>>>>>>> can maybe updated
>>>>>>>>>>> the description to indicate more what it actually controls.
>>>>>>>>>> After applying this patch, I see this flag in 4 routines (3
>>>>>>>>>> files).
>>>>>>>>>> And as all of them are stats for 'taskqueue' and
>>>>>>>>>> 'termination', I changed the
>>>>>>>>>> description as a statistics related flag.
>>>>>>>>>> But if it's not enough, may I ask your opinion?
>>>>>>>>>
>>>>>>>>> I don't like that this flag controls some, but not all logging
>>>>>>>>> for parallel
>>>>>>>>> Stuff. I think we should do one of the following:
>>>>>>>>>
>>>>>>>>> A. Use ParallelGCVerbose for all verbose logging related to
>>>>>>>>> parallel stuff in
>>>>>>>>> all GCs, or
>>>>>>>>>
>>>>>>>>> B. Only use ParallelGCVerbose in ParallelGC.
>>>>>>>>>
>>>>>>>>> There aren't that many occurrences of the flag so at least B
>>>>>>>>> doesn't seem to be
>>>>>>>>> too much work. A is trickier since it involves finding all
>>>>>>>>> verbose logging
>>>>>>>>> related to parallel stuff.
>>>>>>>>
>>>>>>>> The question is, what how do we intend to print the task queue
>>>>>>>> statistics then, consistently across all collectors? This seems
>>>>>>>> to be
>>>>>>>> the only purpose of ParallelGCVerbose right now.
>>>>>>>> Sometimes (actually in very specific cases) this information is
>>>>>>>> interesting.
>>>>>>>>
>>>>>>>> There could be an option C) that just adds a new experimental or
>>>>>>>> diagnostic flag with a proper name that prints task queue
>>>>>>>> statistics,
>>>>>>>> and let ParallelGCVerbose do nothing and start retiring the flag.
>>>>>>>>
>>>>>>>> If the task queue statistics are not compiled in,
>>>>>>>> ParallelGCVerbose
>>>>>>>> prints nothing at all. So this would not be a change in
>>>>>>>> behavior too.
>>>>>>>
>>>>>>> Thomas, you always have the best suggestions! :)
>>>>>>> If task queue is all it verboses about today, can't we simply
>>>>>>> rename the flag to describe that? It would take a CCC, but I
>>>>>>> doubt that would meet any objections.
>>>>>>> I vote for PrintTaskQueue to get it into the Print<Stuff>
>>>>>>> convention.
>>>>>>> /Jesper
>>>>>> I agree to Jesper's suggestion.
>>>>>> If retiring ParallelGCVerbose is preferred, it would be better
>>>>>> just renaming it.
>>>>>> And a new one would be an experimental flag to print taskqueue
>>>>>> stats.
>>>>> Sorry for sending again.
>>>>> I forgot that ParallelGCVerbose prints not only taskqueue stats
>>>>> but also termination
>>>>> stats(G1ParScanThreadState::print_termination_stats).
>>>>> So the new flag name shouldn't be PrintTaskqueue.
>>>>
>>>> Flags names are always difficult. :)
>>>>
>>>>>
>>>>> How about leave the flag name as is?
>>>>> i.e. ParallelGCVerbose can be used widely and for now it will
>>>>> print two stats information.
>>>>
>>>> I still think we have lots of logging that concerns parallel work
>>>> that we don't want to guard with ParallelGCVerbose.
>>>>
>>>> How about doing a first change that separates out the termination
>>>> stat printing to be guarded by a separate flag (Maybe
>>>> PrintTerminationStats) and then rename ParallelGCVerbose to
>>>> PrintTaskqueue?
>>>
>>> Yes, I think this is good.
>>>
>>>>
>>>> If we do that I think both new flags, PrintTerminationStats and
>>>> PrintTaskqueue, should be diagnostic rather than experiemental.
>>>
>>> I'm curious, what is the rationale to make the flag diagnostic
>>> rather than product? We have had requests in the past to make more
>>> verbose information available in product. Is there any reason in
>>> particular to make the flags something else than product?
>>
>> Diagnostic options are available in product builds.
>>
>> Making it diagnostic is just an indication that it is a flag if for
>> diagnosing the VM as opposed to tuning it. We don't use that in any
>> strict way so I don't have strong opinions about it. I just figured
>> that experimental does not seem to be the right category for these
>> flags.
>
> Agreed that experimental is not the right category.
>
> My take on the product vs diagnostic is that since diagnostic flags
> require the additional XX:+UnlockDiagnosticVMOptions they should be
> used for stuff that is not supposed to be enabled per default in
> production systems. That could be logging that affects performance too
> much or other diagnostic stuff that is only enabled when debugging or
> testing a production system. Logging that is expected to be enabled by
> default out there should be product imho.
>
> The risk when setting verbose flags that people are likely to use in
> production systems as diagnostic are that they start enabling
> UnlockDiagnosticVMOptions per default, and suddenly they are running
> with various really expensive logging and verification code enabled
> without realizing it affects performance.
>
> I don't know if anyone out there is likely to use either flags
> discussed here per default in a running production system, but unless
> they are bad for performance I would prefer to have them be product
> flags and leave it to the user to decide.
>
> /Jesper
>
>>
>> Bengt
>>
>>> /Jesper
>>>
>>>>
>>>> Thanks,
>>>> Bengt
>>>>
>>>>>
>>>>> Thanks,
>>>>> Sangheon
>>>>>
>>>>>>
>>>>>> Thanks,
>>>>>> Sangheon
>>>>>>>
>>>>>>>
>>>>>>>>
>>>>>>>> Thanks,
>>>>>>>> Thomas
>>
More information about the hotspot-gc-dev
mailing list