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. > > 本电邮(包括任何附件)可能含有机密资料并受法律保护。如您不是正确的收件人,请您立即删除本邮件。请不要将本电邮进行复制并用作任何其他用途、或透露本邮件之内容。谢谢。