[dtrace-discuss] profile provider: is it me doing stupid things?
Chip Bennett
cbennett at laurustech.com
Thu Feb 15 08:04:00 PST 2007
Paul,
I haven't checked this by experiment, but you're clearing the
aggregation values at four times the default aggrate (1 second), which
is how often the dtrace command consumes the aggregation data. You
might try changing the aggrate to be the same as the tick.
Chip
Paul van den Bogaard wrote:
> Just showing someone how great DTrace is and then we spot something I do not understand.
> Of course it can be a major misunderstanding of myself. Would appreciate another (expert) look upon this.
>
> The goal we try to achieve is trying to get insight if there is a bursty nature in the time slot when system calls are done. Following DTrace snippet is tried:
>
> dtrace -q -p 3173 -n 'syscall::read:entry { @[probefunc] = count(); } profile:::tick-250ms { printa("%6s %@6d\n", @); printf("\n"); clear(@); }'
>
> This to chop up a one second interval into four different equal sized 250 millsec slots. Counting the number of read and write syscalls that fall in each slot.
> This one is run against a process that reads a single character and writes that character (stdin, stdout) continuously. Wrote it myself so I dare say it is functionally correct :-)
>
> The output I get is:
>
> read 15078
> read 0
> read 0
> read 0
>
> And this pattern continues till hell freezes over: first slot has all the values, others are always zero. Tried this with 200msec and 100msec intervals too. No difference.
>
> Mmmm I expect more of a uniform distribution. Lets try to sample in DTrace a little different. In the end it might be an unforeseen side effect of the application :)
>
> The following DTrace script was used:
>
> BEGIN
> {
> baseline = timestamp;
> }
>
> syscall::read:entry
> /pid == $target/
> {
> this->tmp = (timestamp - baseline) / (1000 * 1000 * 250);
> @[this->tmp] = count();
> }
>
> profile:::tick-1000ms
> {
> baseline = timestamp;
> printa("%3d %@u\n", @);
> clear(@);
> }
>
> END
> {
> }
>
> And this one does show a uniform distribution of the system calls as I expected:
> 3 10601
> 2 10610
> 1 10940
> 0 11534
>
> Question: why is the profile:::tick-xxxmsec behaving this way? What am I missing?
>
> Thanks
> Paul
>
>
> This message posted from opensolaris.org
> _______________________________________________
> dtrace-discuss mailing list
> dtrace-discuss at opensolaris.org
>
More information about the dtrace-discuss
mailing list