On 2/21/07, Calum Mackay <Calum.Mackay at sun.com> wrote:
> hi Leon,
>
> That does indeed look odd. The kstat is incremented *before* we send the
> request, so it's hard to see how you can see it in a snoop, and not in
> the nfsstat output.
>
> What version of Solaris is the client running?
>
> A dtrace script would indeed do it, too, of course. An FBT trace on e.g.
>
>         fbt::nfs3readdirplus:entry
>
>         fbt::nfs3readdir:entry
>
> will catch the two types of READDIR.

Hi Calum,
I used this one (please correct if something is wrong in it) :

#!/usr/sbin/dtrace -s
#pragma D option dynvarsize=64m

fbt::nfs3readdirplus:entry,
fbt::nfs3readdir:entry
/ execname == "nfsd" /
{
        @count[probefunc] = count();
        self->x[probefunc, stackdepth] = timestamp
}
fbt:::return
/ self->x[probefunc, stackdepth] /
{
        this->diff = timestamp - self->x[probefunc, stackdepth];
        @time[probefunc] = quantize(this->diff);
        @total[probefunc] = sum(this->diff);
        @avg[probefunc] = avg(this->diff);
        self->x[probefunc, stackdepth] = 0
}
END {
        printf("==============time=====================");
        printa(@time);
        printf("==============count====================");
        printa(@count);
        printf("========total time in func=============");
        printa(@total);
        printf("======average time in func=============");
        printa(@avg);
}

and got nothing:
# ./readdir.d
dtrace: script './readdir.d' matched 22067 probes
^C
CPU     ID                    FUNCTION:NAME
  1      2                             :END
==============time=====================
==============count====================
========total time in func=============
======average time in func=============

At the same time, snoop shows a lot of ACCESS3, GETATTR3, READDIRPLUS3 ops.
Where's the catch?

Thanks,
-- Leon

Reply via email to