I want to print a stack trace whenever thread 1 for the PID of interest spends more than 6 seconds in lwp_mutex_timedlock. So I wrote the following: #!/usr/sbin/dtrace -s syscall::lwp_mutex_timedlock:entry / pid == $1 && tid == 1 / { trace(probefunc); printf("%Y \n",walltimestamp); self->my_traceon=timestamp; } syscall::lwp_mutex_timedlock:return / self->my_traceon && self->my_traceon - timestamp > 6000000000/ { ustack(); } syscall::lwp_mutex_timedlock:return / self->my_traceon / { trace(probefunc); printf("%Y \n",walltimestamp); my_traceon=0; } fbt::: / self->my_traceon / { trace(probefunc); printf("%Y \n",walltimestamp); } I expect to get an entry from the syscall and entry from fbt ? a stack from those > 6 sec a return from the syscall. I get as output: The output is like this: 0 11028 lwp_mutex_timedlock:entry lwp_mutex_timedlock 2007 Jan 12 10:35:50 0 11029 lwp_mutex_timedlock:return lwp_mutex_timedlock 2007 Jan 12 10:35:50 0 11028 lwp_mutex_timedlock:entry lwp_mutex_timedlock 2007 Jan 12 10:35:50 0 11029 lwp_mutex_timedlock:return libc.so.1`___lwp_mutex_timedlock+0x8 libc.so.1`mutex_lock_internal+0x218 ... rest of stack 0 11029 lwp_mutex_timedlock:return lwp_mutex_timedlock 2007 Jan 12 10:35:50 So I got a stack, so the method took longer than 6 seconds, but the walltimestamps between entry and exit show less than a 1 second difference. How can that be ? Plus I get nothing from the fbt probe. rick -- Rickey C. Weisner Software Development and Performance Specialist Sun Microsystems, INC cell phone: 615-308-1147 email: rick.weisner at sun.com
> / self->my_traceon && self->my_traceon - timestamp > 6000000000/I think you want to do ''timestamp - self->my_traceon''. Otherwise you''ll get a big unsigned value. You''re also using the global my_traceon variable in addition to the thread- local version. Adam On Tue, Jan 16, 2007 at 02:45:38PM -0600, rickey c weisner wrote:> I want to print a stack trace whenever thread 1 for the PID of > interest spends more than 6 seconds in lwp_mutex_timedlock. > So I wrote the following: > #!/usr/sbin/dtrace -s > syscall::lwp_mutex_timedlock:entry > / pid == $1 && tid == 1 / > { > trace(probefunc); > printf("%Y \n",walltimestamp); > self->my_traceon=timestamp; > } > syscall::lwp_mutex_timedlock:return > / self->my_traceon && self->my_traceon - timestamp > 6000000000/ > { > ustack(); > } > syscall::lwp_mutex_timedlock:return > / self->my_traceon / > { > trace(probefunc); > printf("%Y \n",walltimestamp); > my_traceon=0; > } > fbt::: > / self->my_traceon / > { > trace(probefunc); > printf("%Y \n",walltimestamp); > } > I expect to get an entry from the syscall > and entry from fbt ? > a stack from those > 6 sec > a return from the syscall. > > I get as output: > The output is like this: > 0 11028 lwp_mutex_timedlock:entry lwp_mutex_timedlock > 2007 Jan 12 10:35:50 > > 0 11029 lwp_mutex_timedlock:return lwp_mutex_timedlock > 2007 Jan 12 10:35:50 > > 0 11028 lwp_mutex_timedlock:entry lwp_mutex_timedlock > 2007 Jan 12 10:35:50 > > 0 11029 lwp_mutex_timedlock:return > libc.so.1`___lwp_mutex_timedlock+0x8 > libc.so.1`mutex_lock_internal+0x218 > ... rest of stack > 0 11029 lwp_mutex_timedlock:return lwp_mutex_timedlock > 2007 Jan 12 10:35:50 > > So I got a stack, so the method took longer than 6 seconds, but the > walltimestamps between entry and exit show less than a 1 second difference. > How can that be ? > Plus I get nothing from the fbt probe. > > rick > -- > > Rickey C. Weisner > Software Development and Performance Specialist > Sun Microsystems, INC > cell phone: 615-308-1147 > email: rick.weisner at sun.com > _______________________________________________ > dtrace-discuss mailing list > dtrace-discuss at opensolaris.org-- Adam Leventhal, Solaris Kernel Development http://blogs.sun.com/ahl
Thanks, I am more than a little embarrassed. rick On Tue, Jan 16, 2007 at 02:50:19PM -0800, Adam Leventhal wrote:> Date: Tue, 16 Jan 2007 14:50:19 -0800 > From: Adam Leventhal <ahl at eng.sun.com> > Subject: Re: [dtrace-discuss] Re: timestamp and walltimestamp > In-reply-to: <20070116144538.A2161 at arwen.sfbay.sun.com> > To: rickey c weisner <Rick.Weisner at Sun.COM> > Cc: dtrace-discuss at opensolaris.org > User-Agent: Mutt/1.5.10i > Original-recipient: rfc822;rw8775 at bedge4-mail1.Central.Sun.COM > > > / self->my_traceon && self->my_traceon - timestamp > 6000000000/ > > I think you want to do ''timestamp - self->my_traceon''. Otherwise you''ll get > a big unsigned value. > > You''re also using the global my_traceon variable in addition to the thread- > local version. > > Adam > > On Tue, Jan 16, 2007 at 02:45:38PM -0600, rickey c weisner wrote: > > I want to print a stack trace whenever thread 1 for the PID of > > interest spends more than 6 seconds in lwp_mutex_timedlock. > > So I wrote the following: > > #!/usr/sbin/dtrace -s > > syscall::lwp_mutex_timedlock:entry > > / pid == $1 && tid == 1 / > > { > > trace(probefunc); > > printf("%Y \n",walltimestamp); > > self->my_traceon=timestamp; > > } > > syscall::lwp_mutex_timedlock:return > > / self->my_traceon && self->my_traceon - timestamp > 6000000000/ > > { > > ustack(); > > } > > syscall::lwp_mutex_timedlock:return > > / self->my_traceon / > > { > > trace(probefunc); > > printf("%Y \n",walltimestamp); > > my_traceon=0; > > } > > fbt::: > > / self->my_traceon / > > { > > trace(probefunc); > > printf("%Y \n",walltimestamp); > > } > > I expect to get an entry from the syscall > > and entry from fbt ? > > a stack from those > 6 sec > > a return from the syscall. > > > > I get as output: > > The output is like this: > > 0 11028 lwp_mutex_timedlock:entry lwp_mutex_timedlock > > 2007 Jan 12 10:35:50 > > > > 0 11029 lwp_mutex_timedlock:return lwp_mutex_timedlock > > 2007 Jan 12 10:35:50 > > > > 0 11028 lwp_mutex_timedlock:entry lwp_mutex_timedlock > > 2007 Jan 12 10:35:50 > > > > 0 11029 lwp_mutex_timedlock:return > > libc.so.1`___lwp_mutex_timedlock+0x8 > > libc.so.1`mutex_lock_internal+0x218 > > ... rest of stack > > 0 11029 lwp_mutex_timedlock:return lwp_mutex_timedlock > > 2007 Jan 12 10:35:50 > > > > So I got a stack, so the method took longer than 6 seconds, but the > > walltimestamps between entry and exit show less than a 1 second difference. > > How can that be ? > > Plus I get nothing from the fbt probe. > > > > rick > > -- > > > > Rickey C. Weisner > > Software Development and Performance Specialist > > Sun Microsystems, INC > > cell phone: 615-308-1147 > > email: rick.weisner at sun.com > > _______________________________________________ > > dtrace-discuss mailing list > > dtrace-discuss at opensolaris.org > > -- > Adam Leventhal, Solaris Kernel Development http://blogs.sun.com/ahl-- Rickey C. Weisner Software Development and Performance Specialist Sun Microsystems, INC cell phone: 615-308-1147 email: rick.weisner at sun.com