RFR: JDK-8055845 - Add trace event for promoted objects
Staffan Friberg
staffan.friberg at oracle.com
Thu Aug 28 21:15:44 UTC 2014
Hi Erik,
Thanks for the comments.
> - Aren't the events for promotion to the tenured generation (SerialOld)
> and the CMS generation missing?
The reason for leaving out these two, Serial completely and CMS
promotion, was due to that neither as far as I understand make use of
PLABs. So without a good sampling type of event it would end up being an
event for each aging and/or promotion that happened in the GC. As this
would be a very large number of events so I decided not to support those
cases due to performance concerns. If you have a good idea on how to
support it please let me know. I would see CMS as the priority of the
two, client workloads can usually be analyzed with a different collector
which might not be the case for a latency sensitive application.
> - We try to keep the trace dependency (the header file) in
> gcTraceSend.cpp, see the pattern for all the other events in
> gcTrace.cpp (they all have a "report" and a "send" function).
Will update it to follow that pattern.
> - Would it make sense to differentiate, either by separate events or by
> a field in a event, between promotions to to-space and to the old
> generation?
> - The are two events for TLAB allocations,
> java/object_alloc_in_new_TLAB and java/object_alloc_outside_TLAB.
> What do you think about using two events for PLAB allocations as well:
> - java/object_alloc_in_new_PLAB
> - java/object_alloc_outside_PLAB
I think this is a matter of taste and probably how similar we want the
event to be to the existing allocation event. I personally prefer a
single event but if the GC team and serviceability team feel it would be
better to have two I can certainly rewrite. The reason for me preferring
a single event is just ease of analysis, you can easily filter a list of
events on a field, it is harder to merge two different events with
different fields and work with them in an straight forward fashion.
Any general preference for having a single or multiple events?
> - In PSPromotionManager, instead of utilizing the C++ friendship with
> PSScavenge, should we add a getter function for the gc_tracer?
Created a getter function.
Will upload a new webrev shortly.
//Staffan
On 08/28/2014 02:27 AM, Erik Helin wrote:
> Hi Staffan,
>
> thanks for the patch, looks like a useful event!
>
> A few initial comments:
> - Aren't the events for promotion to the tenured generation (SerialOld)
> and the CMS generation missing?
> - We try to keep the trace dependency (the header file) in
> gcTraceSend.cpp, see the pattern for all the other events in
> gcTrace.cpp (they all have a "report" and a "send" function).
> - Would it make sense to differentiate, either by separate events or by
> a field in a event, between promotions to to-space and to the old
> generation?
> - The are two events for TLAB allocations,
> java/object_alloc_in_new_TLAB and java/object_alloc_outside_TLAB.
> What do you think about using two events for PLAB allocations as well:
> - java/object_alloc_in_new_PLAB
> - java/object_alloc_outside_PLAB
> - In PSPromotionManager, instead of utilizing the C++ friendship with
> PSScavenge, should we add a getter function for the gc_tracer?
>
> Thanks,
> Erik
>
> On 2014-08-27 16:28, Bengt Rutisson wrote:
>>
>>
>> Hi Staffan,
>>
>> Overall I think this change looks fine. I know that Erik Helin has some
>> thoughts on the naming of the events. I'll let him communicate those
>> thoughts.
>>
>> Apart from Erik's comments and the missing test case (that I know you
>> are working on) I think the change looks good.
>>
>> Thanks,
>> Bengt
>>
>> On 8/26/14 10:50 AM, Bengt Rutisson wrote:
>>>
>>> Hi all,
>>>
>>> Staffan sent me an updated webrev based on Erik's comments. I uploaded
>>> it here:
>>> http://cr.openjdk.java.net/~brutisso/8055845/webrev.01/
>>>
>>> Thanks,
>>> Bengt
>>>
>>>
>>> On 2014-08-25 19:32, Staffan Friberg wrote:
>>>> Hi Erik,
>>>>
>>>> No issue with naming the field class, since the event is similar to
>>>> the Allocation event I used that as a starting point and it also uses
>>>> class as name together with a couple of other events.
>>>>
>>>> Will go through the descriptions and remove periods.
>>>>
>>>> Object age is basically the how many times an object has been kept in
>>>> survivor region, it is incremented each time a YC happens and the
>>>> object is aged.
>>>> Will see how I can update the description to make it clearer. Calling
>>>> the field tenuringAge might help?
>>>>
>>>>> From the documentation,
>>>>> http://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html
>>>>>
>>>>> -XX:MaxTenuringThreshold=/threshold/
>>>>>
>>>>> Sets the maximum tenuring threshold for use in adaptive GC
>>>>> sizing. The largest value is 15. The default value is 15 for the
>>>>> parallel (throughput) collector, and 6 for the CMS collector.
>>>>>
>>>>> The following example shows how to set the maximum tenuring
>>>>> threshold to 10:
>>>>>
>>>>> -XX:MaxTenuringThreshold=10
>>>>>
>>>>>
>>>>> -XX:+PrintTenuringDistribution
>>>>>
>>>>> Enables printing of tenuring age information. The following is
>>>>> an example of the output:
>>>>>
>>>>> Desired survivor size 48286924 bytes, new threshold 10 (max 10)
>>>>> - age 1: 28992024 bytes, 28992024 total
>>>>> - age 2: 1366864 bytes, 30358888 total
>>>>> - age 3: 1425912 bytes, 31784800 total
>>>>> ...
>>>>>
>>>>> Age 1 objects are the youngest survivors (they were created
>>>>> after the previous scavenge, survived the latest scavenge, and
>>>>> moved from eden to survivor space). Age 2 objects have survived
>>>>> two scavenges (during the second scavenge they were copied from
>>>>> one survivor space to the next). And so on.
>>>>>
>>>>> In the preceding example, 28 992 024 bytes survived one scavenge
>>>>> and were copied from eden to survivor space, 1 366 864 bytes are
>>>>> occupied by age 2 objects, etc. The third value in each row is
>>>>> the cumulative size of objects of age n or less.
>>>>>
>>>>> By default, this option is disabled.
>>>>>
>>>>
>>>> Thanks for the comments,
>>>> Staffan
>>>>
>>>> On 08/25/2014 09:55 AM, Erik Gahlin wrote:
>>>>> Did you manage to call the field "class"? It's a reserved word in
>>>>> C++, so we had to use "klass" in the past
>>>>>
>>>>> Descriptions with only one sentence shouldn't end with "."
>>>>>
>>>>> How is "Object Age" measured?
>>>>>
>>>>> As a user, I would expect the number to be in seconds/minutes/hours,
>>>>> but that is not the case. Perhaps an explanation in the description
>>>>> and/or a field name that better reflects what we really mean with
>>>>> age.
>>>>>
>>>>> Otherwise trace.xml looks good!
>>>>>
>>>>> Erik
>>>>>
>>>>> Staffan Friberg skrev 25/08/14 18:28:
>>>>>> Hi,
>>>>>>
>>>>>> Could I please get reviews for this RFE that adds a trace event for
>>>>>> aging and promotion for young collections in G1, CMS and Parallel
>>>>>> GC.
>>>>>> It works similarly to allocation events, and generates the event on
>>>>>> the slow path when either a direct copy occurs or a new PLAB is
>>>>>> request.
>>>>>>
>>>>>> Since I'm adding an event I cc:ed the serviceability list in case
>>>>>> anyone has any comments on the event and changes to trace.xml.
>>>>>>
>>>>>> RFE: https://bugs.openjdk.java.net/browse/JDK-8055845
>>>>>> Webrev: http://cr.openjdk.java.net/~brutisso/8055845/webrev.00
>>>>>>
>>>>>> Bengt has been kind and agreed to both sponsor and host the the
>>>>>> webrev.
>>>>>>
>>>>>> Thanks,
>>>>>> Staffan
>>>>>>
>>>>>
>>>>
>>>
>>
More information about the serviceability-dev
mailing list