Yunda,

sorry for taking a while. I created JDK-8014478 for this and I'll sponsor the 
change.

/R

On May 10, 2013, at 4:32 AM, 云达(Yunda) wrote:

> Thanks for looking at this, Rickard. David, do you like this option which is 
> easier to read, too :)
> 
> 
> Regards,
> Yunda
> 
>> -----Original Message-----
>> From: Rickard Bäckman [mailto:rickard.back...@oracle.com]
>> Sent: Thursday, May 09, 2013 4:53 PM
>> To: 云达(Yunda)
>> Cc: David Holmes; serviceability-dev@openjdk.java.net;
>> hotspot-runtime-...@openjdk.java.net
>> Subject: Re: [PATCH] EnableTracing: output from multiple threads may be mixed
>> together
>> 
>> Looks good to me!
>> 
>> /R
>> 
>> On May 9, 2013, at 8:38 AM, 云达(Yunda) wrote:
>> 
>>> Rickard,
>>> 
>>> Actually I've considered the option and I just thought it's less elegant. 
>>> But just
>> as you said, it's clearer and easier to read. The updated and tested change:
>>> 
>>> diff -r 627cf9e9ea31 src/share/vm/runtime/globals.hpp
>>> --- a/src/share/vm/runtime/globals.hpp  Mon May 06 10:29:49 2013 -0700
>>> +++ b/src/share/vm/runtime/globals.hpp  Thu May 09 14:36:35 2013 +0800
>>> @@ -3634,7 +3634,10 @@
>>>          "Include GC cause in GC logging")
>> \
>>> 
>> \
>>>  product(bool, EnableTracing, false,
>> \
>>> -                  "Enable event-based tracing")
>>> +                  "Enable event-based tracing")
>> \
>>> +
>> \
>>> +  product(bool, UseLockedTracing, false,
>> \
>>> +                  "Use locked-tracing when doing event-based
>>> + tracing")
>>> 
>>> /*
>>> *  Macros for factoring of globals
>>> diff -r 627cf9e9ea31 src/share/vm/trace/traceEventClasses.xsl
>>> --- a/src/share/vm/trace/traceEventClasses.xsl  Mon May 06 10:29:49
>>> 2013 -0700
>>> +++ b/src/share/vm/trace/traceEventClasses.xsl  Thu May 09 14:36:35
>>> +++ 2013 +0800
>>> @@ -132,6 +132,15 @@
>>>  void writeEvent(void) {
>>>    ResourceMark rm;
>>>    HandleMark hm;
>>> +    if (UseLockedTracing) {
>>> +      ttyLocker lock;
>>> +      writeEventContent();
>>> +    } else {
>>> +      writeEventContent();
>>> +    }
>>> +  }
>>> +
>>> +  void writeEventContent() {
>>>    TraceStream ts(*tty);
>>>    ts.print("<xsl:value-of select="@label"/>: [");
>>> <xsl:apply-templates select="value|structvalue" mode="write-data"/>
>>> 
>>> 
>>> Regards,
>>> Yunda
>>> 
>>>> -----Original Message-----
>>>> From: Rickard Bäckman [mailto:rickard.back...@oracle.com]
>>>> Sent: Wednesday, May 08, 2013 3:03 PM
>>>> To: David Holmes
>>>> Cc: 云达(Yunda); serviceability-dev@openjdk.java.net;
>>>> hotspot-runtime-...@openjdk.java.net
>>>> Subject: Re: [PATCH] EnableTracing: output from multiple threads may
>>>> be mixed together
>>>> 
>>>> One option could be to move the content of writeEvent() to its own
>>>> method (maybe writeEventContent()) and just do
>>>> 
>>>> if (UseLockedTracing) {
>>>> ttyLocker lock;
>>>> writeEventContent();
>>>> } else {
>>>> writeEventContent();
>>>> }
>>>> 
>>>> I think it makes it easier to read.
>>>> 
>>>> /R
>>>> 
>>>> On May 8, 2013, at 2:41 AM, David Holmes wrote:
>>>> 
>>>>> On 7/05/2013 10:33 PM, 云达(Yunda) wrote:
>>>>>> David,
>>>>>> 
>>>>>> Sorry about the stupid mistake. And please see the tested change below.
>>>> Since I don't find an elegant way to define a ttyLocker object, I use
>>>> the static methods of ttyLocker instead.
>>>>> 
>>>>> Yeah there's no elegant solution when you need to conditionalize
>>>>> things. :(
>>>>> 
>>>>> This looks fine to me but the serviceability folk should chime back in.
>>>>> 
>>>>> Thanks,
>>>>> David
>>>>> 
>>>>>> diff -r 627cf9e9ea31 src/share/vm/runtime/globals.hpp
>>>>>> --- a/src/share/vm/runtime/globals.hpp  Mon May 06 10:29:49 2013
>>>>>> -0700
>>>>>> +++ b/src/share/vm/runtime/globals.hpp  Tue May 07 20:04:24 2013
>>>>>> +++ +0800
>>>>>> @@ -3634,7 +3634,10 @@
>>>>>>          "Include GC cause in GC logging")
>>>> \
>>>>>> 
>>>> \
>>>>>>  product(bool, EnableTracing, false,
>>>> \
>>>>>> -                  "Enable event-based tracing")
>>>>>> +                  "Enable event-based tracing")
>>>> \
>>>>>> +
>>>> \
>>>>>> +  product(bool, UseLockedTracing, false,
>>>> \
>>>>>> +                  "Use locked-tracing when doing event-based
>>>>>> + tracing")
>>>>>> 
>>>>>> /*
>>>>>> *  Macros for factoring of globals diff -r 627cf9e9ea31
>>>>>> src/share/vm/trace/traceEventClasses.xsl
>>>>>> --- a/src/share/vm/trace/traceEventClasses.xsl  Mon May 06 10:29:49
>>>>>> 2013 -0700
>>>>>> +++ b/src/share/vm/trace/traceEventClasses.xsl  Tue May 07 20:04:24
>>>>>> +++ 2013 +0800
>>>>>> @@ -132,10 +132,17 @@
>>>>>>  void writeEvent(void) {
>>>>>>    ResourceMark rm;
>>>>>>    HandleMark hm;
>>>>>> +    int holder;
>>>>>> +    if (UseLockedTracing) {
>>>>>> +      holder = ttyLocker::hold_tty();
>>>>>> +    }
>>>>>>    TraceStream ts(*tty);
>>>>>>    ts.print("<xsl:value-of select="@label"/>: [");
>>>>>> <xsl:apply-templates select="value|structvalue" mode="write-data"/>
>>>>>>    ts.print("]\n");
>>>>>> +    if (UseLockedTracing) {
>>>>>> +      ttyLocker::release_tty(holder);
>>>>>> +    }
>>>>>>  }
>>>>>> };
>>>>>> 
>>>>>> 
>>>>>> Regards,
>>>>>> Yunda
>>>>>> 
>>>>>> 
>>>>>>> -----Original Message-----
>>>>>>> From: David Holmes [mailto:david.hol...@oracle.com]
>>>>>>> Sent: Tuesday, May 07, 2013 5:50 PM
>>>>>>> To: 云达(Yunda)
>>>>>>> Cc: hotspot-runtime-...@openjdk.java.net;
>>>>>>> serviceability-dev@openjdk.java.net
>>>>>>> Subject: Re: [PATCH] EnableTracing: output from multiple threads
>>>>>>> may be mixed together
>>>>>>> 
>>>>>>> On 7/05/2013 7:43 PM, 云达(Yunda) wrote:
>>>>>>>> Hi David,
>>>>>>>> 
>>>>>>>> Thanks for the review and I see your concern. Please see the
>>>>>>>> updated change
>>>>>>> below:
>>>>>>>> 
>>>>>>>> diff -r 627cf9e9ea31 src/share/vm/runtime/globals.hpp
>>>>>>>> --- a/src/share/vm/runtime/globals.hpp  Mon May 06 10:29:49 2013
>>>>>>>> -0700
>>>>>>>> +++ b/src/share/vm/runtime/globals.hpp  Tue May 07 17:38:58 2013
>>>>>>>> +++ +0800
>>>>>>>> @@ -3634,7 +3634,10 @@
>>>>>>>>           "Include GC cause in GC logging")
>>>>>>> \
>>>>>>>> 
>>>>>>> \
>>>>>>>>   product(bool, EnableTracing, false,
>>>>>>> \
>>>>>>>> -                  "Enable event-based tracing")
>>>>>>>> +                  "Enable event-based tracing")
>>>>>>> \
>>>>>>>> +
>>>>>>> \
>>>>>>>> +  product(bool, UseLockedTracing, false,
>>>>>>> \
>>>>>>>> +                  "Use locked-tracing when doing event-based
>>>>>>>> + tracing")
>>>>>>>> 
>>>>>>>> /*
>>>>>>>>  *  Macros for factoring of globals diff -r 627cf9e9ea31
>>>>>>>> src/share/vm/trace/traceEventClasses.xsl
>>>>>>>> --- a/src/share/vm/trace/traceEventClasses.xsl  Mon May 06
>>>>>>>> 10:29:49
>>>>>>>> 2013 -0700
>>>>>>>> +++ b/src/share/vm/trace/traceEventClasses.xsl  Tue May 07
>>>>>>>> +++ 17:38:58
>>>>>>>> +++ 2013 +0800
>>>>>>>> @@ -132,6 +132,9 @@
>>>>>>>>   void writeEvent(void) {
>>>>>>>>     ResourceMark rm;
>>>>>>>>     HandleMark hm;
>>>>>>>> +    if (UseLockedTracing) {
>>>>>>>> +      ttyLocker ttyl;
>>>>>>>> +    }
>>>>>>> 
>>>>>>> Ah that doesn't work - the ttyLocker is block-scoped by the if
>>>>>>> statement so it will be created, grab the lock, then immediately
>>>>>>> be destructed and the lock released.
>>>>>>> 
>>>>>>> David
>>>>>>> -----
>>>>>>> 
>>>>>>>>     TraceStream ts(*tty);
>>>>>>>>     ts.print("<xsl:value-of select="@label"/>: [");
>>>>>>>> <xsl:apply-templates select="value|structvalue"
>>>>>>>> mode="write-data"/>
>>>>>>>> 
>>>>>>>> Regards,
>>>>>>>> Yunda
>>>>>>>> 
>>>>>>>>> -----Original Message-----
>>>>>>>>> From: David Holmes [mailto:david.hol...@oracle.com]
>>>>>>>>> Sent: Tuesday, May 07, 2013 10:39 AM
>>>>>>>>> To: 云达(Yunda)
>>>>>>>>> Cc: hotspot-runtime-...@openjdk.java.net;
>>>>>>>>> serviceability-dev@openjdk.java.net
>>>>>>>>> Subject: Re: [PATCH] EnableTracing: output from multiple threads
>>>>>>>>> may be mixed together
>>>>>>>>> 
>>>>>>>>> Hi Yunda,
>>>>>>>>> 
>>>>>>>>> There is a potential problem with using a ttyLocker here,
>>>>>>>>> depending on exactly what events are being traced and from where
>>>>>>>>> - you must always be in code where it is both safe to acquire
>>>>>>>>> the lock, and safe to block waiting for the lock if it is not 
>>>>>>>>> available.
>>>>>>>>> 
>>>>>>>>> I think I would prefer to see unlocked tracing by default with a
>>>>>>>>> flag to use locked-tracing if requested.
>>>>>>>>> 
>>>>>>>>> David
>>>>>>>>> 
>>>>>>>>> On 19/04/2013 6:26 PM, 云达(Yunda) wrote:
>>>>>>>>>> Hi all,
>>>>>>>>>> 
>>>>>>>>>> I found that the output from multiple threads may be mixed
>>>>>>>>>> together when using EnableTracing. It happens many times in my
>>>>>>>>>> test
>>>> case like this:
>>>>>>>>>> 
>>>>>>>>>> Allocation outside TLAB: [Allocation in new TLAB: [Allocation
>>>>>>>>>> in new
>>>>>>>>>> TLAB: [Allocation in new TLAB: [Class = [C, Allocation in new TLAB:
>>>>>>>>>> [Class = [I, Allocation in new TLAB: [Java Monitor Wait: [Class
>>>>>>>>>> = java/lang/String, Allocation Size = 24, Allocation Size = 24,
>>>>>>>>>> Class = java/lang/String, Class = [I, Allocation in new TLAB:
>>>>>>>>>> [Class = [C, Allocation in new TLAB: [Allocation Size = 192]
>>>>>>>>>> 
>>>>>>>>>> Class =
>>>>>>>>>> com/sun/org/apache/xerces/internal/dom/DeferredElementNSImpl,
>>>>>>>>>> Allocation Size = 24, Allocation Size = 24, TLAB Size =
>>>>>>>>>> 23712280]
>>>>>>>>>> 
>>>>>>>>>> TLAB Size = 24607080]
>>>>>>>>>> 
>>>>>>>>>> Allocation Size = 24, Monitor Class =
>>>>>>>>>> java/lang/ref/Reference$Lock, TLAB Size = 25054480]
>>>>>>>>>> 
>>>>>>>>>> TLAB Size = 25054480]
>>>>>>>>>> 
>>>>>>>>>> Allocation in new TLAB: [Class = [CTLAB Size = 24607080]
>>>>>>>>>> 
>>>>>>>>>> Allocation Size = 72, Class = [C, TLAB Size = 24159728]
>>>>>>>>>> 
>>>>>>>>>> , Allocation Size = 32, TLAB Size = 23712288]
>>>>>>>>>> 
>>>>>>>>>> It's very confusing and it's even not easy to tell how many
>>>>>>>>>> events there are. I think the reason is that the writeEvent()
>>>>>>>>>> method of each
>>>>>>>>>> Event* class output the fields of event one by one without
>>>>>>>>>> using any lock. So I made a small patch which add ttyLocker to
>>>>>>>>>> writeEvent() method and after applying this patch there's no
>>>>>>>>>> output mixed together in my test case(against
>>>>>>> http://hg.openjdk.java.net/hsx/hsx24/hotspot/):
>>>>>>>>>> 
>>>>>>>>>> diff -r edd1619a3ae4 src/share/vm/trace/traceEventClasses.xsl
>>>>>>>>>> 
>>>>>>>>>> --- a/src/share/vm/trace/traceEventClasses.xsl    Thu Apr 18
>>>> 13:50:58
>>>>>>>>>> 2013 -0700
>>>>>>>>>> 
>>>>>>>>>> +++ b/src/share/vm/trace/traceEventClasses.xsl Fri Apr 19
>>>>>>>>>> +++ 16:12:38
>>>>>>>>>> +++ 2013
>>>>>>>>>> +0800
>>>>>>>>>> 
>>>>>>>>>> @@ -132,6 +132,7 @@
>>>>>>>>>> 
>>>>>>>>>>    void writeEvent(void) {
>>>>>>>>>> 
>>>>>>>>>>      ResourceMark rm;
>>>>>>>>>> 
>>>>>>>>>>      HandleMark hm;
>>>>>>>>>> 
>>>>>>>>>> +    ttyLocker ttyl;
>>>>>>>>>> 
>>>>>>>>>>      TraceStream ts(*tty);
>>>>>>>>>> 
>>>>>>>>>>      ts.print("<xsl:value-of select="@label"/>: [");
>>>>>>>>>> 
>>>>>>>>>> <xsl:apply-templates select="value|structvalue"
>>>>>>>>>> mode="write-data"/>
>>>>>>>>>> 
>>>>>>>>>> I searched before sending this mail I didn't find anyone who
>>>>>>>>>> covering thisJ
>>>>>>>>>> 
>>>>>>>>>> Regards,
>>>>>>>>>> 
>>>>>>>>>> Yunda
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> ---------------------------------------------------------------
>>>>>>>>>> --
>>>>>>>>>> ---
>>>>>>>>>> --
>>>>>>>>>> --
>>>>>>>>>> 
>>>>>>>>>> This email (including any attachments) is confidential and may
>>>>>>>>>> be legally privileged. If you received this email in error,
>>>>>>>>>> please delete it immediately and do not copy it or use it for
>>>>>>>>>> any purpose or disclose its contents to any other person. Thank you.
>>>>>>>>>> 
>>>>>>>>>> 本电邮(包括任何附件)可能含有机密资料并受法律保护。如您不
>> 是
>>>> 正确
>>>>>>> 的
>>>>>>>>> 收件人,
>>>>>>>>>> 请您立即删除本邮件。请不要将本电邮进行复制并用作任何其他
>> 用
>>>> 途、
>>>>>>>>> 或透露本邮
>>>>>>>>>> 件之内容。谢谢。
>>>>>>>> 
>>>>>>>> ________________________________
>>>>>>>> 
>>>>>>>> This email (including any attachments) is confidential and may be
>>>>>>>> legally
>>>>>>> privileged. If you received this email in error, please delete it
>>>>>>> immediately and do not copy it or use it for any purpose or
>>>>>>> disclose its contents to any other person. Thank you.
>>>>>>> 
>>>>>>>> 
>>>>>>>> 本电邮(包括任何附件)可能含有机密资料并受法律保护。如您不是
>> 正
>>>> 确的
>>>>>>> 收件人,请您立即删除本邮件。请不要将本电邮进行复制并用作任
>> 何
>>>> 其他
>>>>>>> 用途、或透
>>>>>>>> 露本邮件之内容。谢谢。
>>>>>>>> 
>>>>>> 
>>>>>> ________________________________
>>>>>> 
>>>>>> This email (including any attachments) is confidential and may be
>>>>>> legally
>>>> privileged. If you received this email in error, please delete it
>>>> immediately and do not copy it or use it for any purpose or disclose
>>>> its contents to any other person. Thank you.
>>>>>> 
>>>>>> 本电邮(包括任何附件)可能含有机密资料并受法律保护。如您不是正
>> 确
>>>> 的收件人,请您立即删除本邮件。请不要将本电邮进行复制并用作任何
>> 其
>>>> 他用途、或
>>>>>> 透露本邮件之内容。谢谢。
>>>>>> 
>>> 
>>> 
>>> ________________________________
>>> 
>>> This email (including any attachments) is confidential and may be legally
>> privileged. If you received this email in error, please delete it 
>> immediately and
>> do not copy it or use it for any purpose or disclose its contents to any 
>> other
>> person. Thank you.
>> 
>>> 
>>> 本电邮(包括任何附件)可能含有机密资料并受法律保护。如您不是正确的
>> 收件人,请您立即删除本邮件。请不要将本电邮进行复制并用作任何其他
>> 用途、或透
>>> 露本邮件之内容。谢谢。
> 
> 
> ________________________________
> 
> This email (including any attachments) is confidential and may be legally 
> privileged. If you received this email in error, please delete it immediately 
> and do not copy it or use it for any purpose or disclose its contents to any 
> other person. Thank you.
> 
> 本电邮(包括任何附件)可能含有机密资料并受法律保护。如您不是正确的收件人,请您立即删除本邮件。请不要将本电邮进行复制并用作任何其他用途、或透露本邮件之内容。谢谢。

Reply via email to