hmm... thanks - in order to do as you suggest, I guess the "flowindent" has to be removed ? ( dtrace script at end of email... )
thanks wr -----Original Message----- From: Brian Utterback [mailto:[EMAIL PROTECTED] Sent: Wednesday, September 24, 2008 9:57 AM To: William Reich Cc: [email protected] Subject: Re: [dtrace-discuss] showing concurrency with Dtrace Dtrace does buffer the output. The trick is to use print the timestamp variable on each output line and then sort numerically by the timestamp. This will put the lines back into their original chronological order. William Reich wrote: > HI all... > > We have a Streams application that has several streams in our > configuration. > > We are trying to show that the multiple streams are actually executing > concurrently. > > Will Dtrace show us the concurrency ? > ( or is there somekind of buffering of output occurring that will hide > any concurrency ? ) > > wr > ++++++++++++++++++++++++++++++++++++++++ #!/usr/sbin/dtrace -s #pragma D option flowindent #pragma D option dynvarsize=4m BEGIN { self->times = 0; self->depth = 0; } :mom:momURSrv:entry { self->times = timestamp; } :mom:momUWPut:entry { self->times = timestamp; } :mom:momLWSrv:entry { self->times = timestamp; } :mom:momLRPut:entry { self->times = timestamp; } :ulom:lom_uwput:entry { self->times = timestamp; } :ulom:lom_rsrv:entry { self->times = timestamp; } :ulom:lom_lrsrv:entry { self->times = timestamp; } :ulom:lom_lrput:entry { self->times = timestamp; } :ulom:lom_wsrv:entry { self->times = timestamp; } :c7l3rt:c7l3rt_wput:entry { self->times = timestamp; } :c7l3rt:c7l3rt_wsrv:entry { self->times = timestamp; } :c7l3rt:c7l3rt_rsrv:entry { self->times = timestamp; } :c7l3rt:c7l3rt_rput:entry { self->times = timestamp; } :pcimb3:pcimb3_wsrv:entry { self->times = timestamp; } :pcimb3:pcimb3_rsrv:entry { self->times = timestamp; } :pcimb3:pcimb3_wput:entry { self->times = timestamp; } :mom:momURSrv:return /self->times/ { @[probemod, probefunc] = avg(timestamp - self->times); self->times = 0; } :mom:momUWPut:return /self->times/ { @[probemod, probefunc] = avg(timestamp - self->times); self->times = 0; } :mom:momLWSrv:return /self->times/ { @[probemod, probefunc] = avg(timestamp - self->times); self->times = 0; } :mom:momLRPut:return /self->times/ { @[probemod, probefunc] = avg(timestamp - self->times); self->times = 0; } :ulom:lom_uwput:return /self->times/ { @[probemod, probefunc] = avg(timestamp - self->times); self->times = 0; } :ulom:lom_rsrv:return /self->times/ { @[probemod, probefunc] = avg(timestamp - self->times); self->times = 0; } :ulom:lom_lrsrv:return /self->times/ { @[probemod, probefunc] = avg(timestamp - self->times); self->times = 0; } :ulom:lom_lrput:return /self->times/ { @[probemod, probefunc] = avg(timestamp - self->times); self->times = 0; } :ulom:lom_wsrv:return /self->times/ { @[probemod, probefunc] = avg(timestamp - self->times); self->times = 0; } :c7l3rt:c7l3rt_wput:return /self->times/ { @[probemod, probefunc] = avg(timestamp - self->times); self->times = 0; } :c7l3rt:c7l3rt_wsrv:return /self->times/ { @[probemod, probefunc] = avg(timestamp - self->times); self->times = 0; } :c7l3rt:c7l3rt_rsrv:return /self->times/ { @[probemod, probefunc] = avg(timestamp - self->times); self->times = 0; } :c7l3rt:c7l3rt_rput:return /self->times/ { @[probemod, probefunc] = avg(timestamp - self->times); self->times = 0; } :pcimb3:pcimb3_wsrv:return /self->times/ { @[probemod, probefunc] = avg(timestamp - self->times); self->times = 0; } :pcimb3:pcimb3_rsrv:return /self->times/ { @[probemod, probefunc] = avg(timestamp - self->times); self->times = 0; } :pcimb3:pcimb3_wput:return /self->times/ { @[probemod, probefunc] = avg(timestamp - self->times); self->times = 0; } /* solaris kernel streams related functions, entry points * as well as the ulticom module(s) */ fbt:mom:momUWPut:entry, fbt:mom:momURSrv:entry, fbt:mom:momLWSrv:entry, fbt:mom:momLRPut:entry, fbt:ulom:lom_uwput:entry, fbt:ulom:lom_rsrv:entry, fbt:ulom:lom_wsrv:entry, fbt:ulom:lom_lrsrv:entry, fbt:ulom:lom_lrput:entry, fbt:c7l3rt:c7l3rt_wput:entry, fbt:c7l3rt:c7l3rt_rsrv:entry, fbt:c7l3rt:c7l3rt_rput:entry, fbt:c7l3rt:c7l3rt_wsrv:entry, fbt:pcimb3:pcimb3_wsrv:entry, fbt:pcimb3:pcimb3_rsrv:entry, fbt:pcimb3:pcimb3_wput:entry, fbt:genunix:getq:entry, fbt:unix:putnext:entry, fbt:genunix:putq:entry /self->times/ { trace(timestamp); trace(self->depth); self->start[self->depth] = timestamp; self->depth++; } /* solaris kernel streams related functions, return points * as well as the ulticom module(s) */ fbt:mom:momUWPut:return, fbt:mom:momURSrv:return, fbt:mom:momLWSrv:return, fbt:mom:momLRPut:return, fbt:ulom:lom_uwput:return, fbt:ulom:lom_rsrv:return, fbt:ulom:lom_wsrv:return, fbt:ulom:lom_lrsrv:return, fbt:ulom:lom_lrput:return, fbt:c7l3rt:c7l3rt_wput:return, fbt:c7l3rt:c7l3rt_rsrv:return, fbt:c7l3rt:c7l3rt_rput:return, fbt:c7l3rt:c7l3rt_wsrv:return, fbt:pcimb3:pcimb3_wsrv:return, fbt:pcimb3:pcimb3_rsrv:return, fbt:pcimb3:pcimb3_wput:return, fbt:genunix:getq:return, fbt:unix:putnext:return, fbt:genunix:putq:return /self->times && self->start[self->depth - 1]/ { self->depth--; trace(timestamp); trace(self->depth); trace((timestamp - self->start[self->depth])); self->start[self->depth] = 0; } tick-1sec { exit(0); } _______________________________________________ dtrace-discuss mailing list [email protected]
