Hi Yasumasa,

Looks good.

Regards,
Kirk

> On Mar 3, 2016, at 2:23 PM, Yasumasa Suenaga <yasue...@gmail.com> wrote:
> 
> Hi all,
> 
> I've uploaded PoC of PerfCounter for STW phase in concurrent GC:
> 
>  hotspot: http://cr.openjdk.java.net/~ysuenaga/perfcounter-for-cgc/hotspot/
>      jdk: http://cr.openjdk.java.net/~ysuenaga/perfcounter-for-cgc/jdk/
> 
> These patches makes new jstat column CGC and CGCT as below:
> -------------
> $ jstat -gc 53494 3000
> S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     
> MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT    CGC    CGCT     GCT
> 0.0    0.0    0.0    0.0    4096.0    0.0     28672.0      0.0     4480.0 
> 948.9  384.0   77.6       0    0.000   0      0.000   0      0.000    0.000
> 0.0   1024.0  0.0   1024.0  3072.0    0.0     28672.0      0.0     4864.0 
> 2969.0 512.0  276.0       1    0.063   0      0.000   2      0.016    0.080
> -------------
> 
> They are shows STW phase in concurrent GC.
> 
>  CMS: Initial Mark and Remark
>   G1: Remark and Cleanup
> 
> GCT is sum of YGCT, FGCT, and CGCT.
> 
> 
> Can be this change accepted?
> If so, I will file it to JBS and will send RFR.
> 
> I cannot access JPRT.
> So I need a sponsor.
> 
> 
> Thanks,
> 
> Yasumasa
> 
> 
> On 2016/03/02 23:19, Yasumasa Suenaga wrote:
>> It is not difficult to create webrev for this proposal.
>> However, this proposal affects to jstat output, and
>> I cannot access JPRT.
>> So I want to find sponsor for it at first.
>> 
>> Could somebody be a sponsor?
>> 
>> 
>> Yasumasa
>> 
>> 
>> On 2016/03/02 22:29, k...@kodewerk.com wrote:
>>> Hi Yasumasa,
>>> 
>>> It all sounds reasonable and of course the impact on downstream tooling vs 
>>> the value of the change must be evaluated. In this case I think adding a 
>>> CGC counter makes sense especially in prep for G1 becoming default in 9.
>>> 
>>> Regards,
>>> Kirk
>>> 
>>>> On Mar 2, 2016, at 6:58 AM, Yasumasa Suenaga <yasue...@gmail.com> wrote:
>>>> 
>>>> Hi Kirk,
>>>> 
>>>> Agree to you.
>>>> However, I use occasional FGC counter at CMS as below:
>>>> 
>>>> 1. Check major collection occurrence
>>>>      Some production systems have large memory as Java heap,
>>>>      and they are not set GC log.
>>>>      If their CPU usage becomes high, I want to check GC execution.
>>>>      (Of course, we have to check any other points :-) )
>>>> 
>>>> 2. Core image analysis
>>>>      If JVM is crashed, I want to check PerfCounter to know situation.
>>>>      (In the past, I sometimes encountered crash at GC worker thread.)
>>>> 
>>>> I guess that I will want to check them at G1.
>>>> 
>>>> Thus, at least, I want to add PerfCounter for CGC (and add JVMTI event 
>>>> hook).
>>>> However, this proposal will affect to jstat spec.
>>>> So I want to discuss about it before filing to JBS.
>>>> 
>>>> 
>>>> Thanks,
>>>> 
>>>> Yasumasa
>>>> 
>>>> 
>>>> On 2016/03/02 19:02, k...@kodewerk.com wrote:
>>>>> Hi Yasumasa,
>>>>> 
>>>>> Good question. I’ve never considered CMS to be a Full GC. This implies 
>>>>> that there should be separate performance counters for CMS pause phases 
>>>>> as it is possible to have FGC. Of course a FGC during CMS maybe user 
>>>>> triggered, triggered outside a CMS cycle, interrupts a CMS cycle, or 
>>>>> interrupts a CMS phase. I’m not sure how much of a distinction one needs 
>>>>> to make here as that could be a quick broader discussion. Certainly the 
>>>>> purpose isn’t to recreate the GC logs in these performance counters. But 
>>>>> at the very least not having a distinction between full and a STW-CMS 
>>>>> phase is kind of misleading in my opinion.
>>>>> 
>>>>> Regards,
>>>>> Kirk
>>>>> 
>>>>>> On Mar 1, 2016, at 5:03 PM, Yasumasa Suenaga <yasue...@gmail.com> wrote:
>>>>>> 
>>>>>> Hi Kirk,
>>>>>> 
>>>>>>> It is also incorrect to count initial mark and remark in CMS as a FGC.
>>>>>> 
>>>>>> Though, how can we check execution of major collection without GC log?
>>>>>> Should we add new PerfCounter for CGC (and add CGC column to jstat 
>>>>>> output)?
>>>>>> 
>>>>>> 
>>>>>> Yasumasa
>>>>>> 
>>>>>> 
>>>>>> On 2016/03/02 6:35, k...@kodewerk.com wrote:
>>>>>>> Hi,
>>>>>>> 
>>>>>>> I think it is incorrect to count remark and cleanup as FGC. They are 
>>>>>>> not full collections. It is also incorrect to count initial mark and 
>>>>>>> remark in CMS as a FGC. It is unfortunate that this is counted this way.
>>>>>>> 
>>>>>>> Regards,
>>>>>>> Kirk
>>>>>>> 
>>>>>>>> On Mar 1, 2016, at 8:56 AM, Yasumasa Suenaga <yasue...@gmail.com> 
>>>>>>>> wrote:
>>>>>>>> 
>>>>>>>> Hi all,
>>>>>>>> 
>>>>>>>> I wonder that STW phases (Remark and Cleanup) at G1 are not counted in 
>>>>>>>> jstat FGC column.
>>>>>>>> For example, Initial Mark and Remark at CMS are counted as FGC.
>>>>>>>> 
>>>>>>>> For consistency, I think that G1 STW phases should be counted as FGC.
>>>>>>>> What do you think about it?
>>>>>>>> 
>>>>>>>> If it is accepted, I will file it to JBS and will upload webrev.
>>>>>>>> 
>>>>>>>> 
>>>>>>>> suggested fix:
>>>>>>>> ----------------------
>>>>>>>> diff -r 8a103ba9a7b2 src/share/vm/gc/g1/g1MonitoringSupport.cpp
>>>>>>>> --- a/src/share/vm/gc/g1/g1MonitoringSupport.cpp    Mon Feb 29 
>>>>>>>> 22:54:24 2016 +0900
>>>>>>>> +++ b/src/share/vm/gc/g1/g1MonitoringSupport.cpp    Tue Mar 01 
>>>>>>>> 23:43:30 2016 +0900
>>>>>>>> @@ -103,7 +103,7 @@
>>>>>>>>   //   name "collector.1".  In a generational collector this would be 
>>>>>>>> the
>>>>>>>>   // old generation collection.
>>>>>>>>   _full_collection_counters =
>>>>>>>> -    new CollectorCounters("G1 stop-the-world full collections", 1);
>>>>>>>> +    new CollectorCounters("G1 stop-the-world phase", 1);
>>>>>>>> 
>>>>>>>>   // timer sampling for all counters supporting sampling only update 
>>>>>>>> the
>>>>>>>>   // used value.  See the take_sample() method.  G1 requires both used 
>>>>>>>> and
>>>>>>>> diff -r 8a103ba9a7b2 src/share/vm/gc/g1/vm_operations_g1.cpp
>>>>>>>> --- a/src/share/vm/gc/g1/vm_operations_g1.cpp    Mon Feb 29 22:54:24 
>>>>>>>> 2016 +0900
>>>>>>>> +++ b/src/share/vm/gc/g1/vm_operations_g1.cpp    Tue Mar 01 23:43:30 
>>>>>>>> 2016 +0900
>>>>>>>> @@ -230,6 +230,8 @@
>>>>>>>>   G1CollectedHeap* g1h = G1CollectedHeap::heap();
>>>>>>>>   GCTraceTime(Info, gc) t(_printGCMessage, g1h->gc_timer_cm(), 
>>>>>>>> GCCause::_no_gc, true);
>>>>>>>>   IsGCActiveMark x;
>>>>>>>> +  SvcGCMarker sgcm(SvcGCMarker::OTHER);
>>>>>>>> +  TraceCollectorStats tcs(g1h->g1mm()->full_collection_counters());
>>>>>>>>   _cl->do_void();
>>>>>>>> }
>>>>>>>> 
>>>>>>>> ----------------------
>>>>>>>> 
>>>>>>>> 
>>>>>>>> Thanks,
>>>>>>>> 
>>>>>>>> Yasumasa
>>>>>>>> 
>>>>>>>> 
>>>>>>> 
>>>>> 
>>> 

Reply via email to