Still nothing:
# snoop rpc nfs | grep READDIR
  12.0.0.158 -> 12.0.0.156   NFS C READDIRPLUS3 FH=038D Cookie=0 for 8192/8192
  12.0.0.158 -> 12.0.0.156   NFS C READDIRPLUS3 FH=F1B9 Cookie=0 for 8192/8192
  12.0.0.158 -> 12.0.0.156   NFS C READDIRPLUS3 FH=9736 Cookie=0 for 8192/8192
  12.0.0.158 -> 12.0.0.156   NFS C READDIR3 FH=1C2A Cookie=0 for 8192
  12.0.0.158 -> 12.0.0.156   NFS C READDIRPLUS3 FH=1144 Cookie=0 for 8192/8192
  12.0.0.158 -> 12.0.0.156   NFS C READDIRPLUS3 FH=A4A7 Cookie=0 for 8192/8192
^C
# ./matty.d
dtrace: script './matty.d' matched 1 probe
^C

# ./matty.d
dtrace: script './matty.d' matched 1 probe
^C

# cat matty.d
#!/usr/sbin/dtrace -s

fbt:nfs:nfs3_readdir:entry
{
      @count[execname,probefunc] = count();
}

Thanks,
-- Leon


On 2/25/07, Matty <matty91 at gmail.com> wrote:
> What do you get with the following (leave it running until you see a
> few READDIR operations with snoop, and then hit ^C)?:
>
> fbt:nfs:nfs3_readdir:entry
> {
>        @count[execname,probefunc] = count();
> }
>
> On 2/25/07, Leon Koll <leon.is.here at gmail.com> wrote:
> > I removed the "execname== nfsd" line and got nothing again:
> >
> > # ./readdir.d
> > dtrace: script './readdir.d' matched 21739 probes
> > ^C
> > CPU     ID                    FUNCTION:NAME
> >   0      2                             :END
> > ==============time=====================
> > ==============count====================
> > ========total time in func=============
> > ======average time in func=============
> >
> >
> > # more readdir.d
> > #!/usr/sbin/dtrace -s
> >
> > #pragma D option dynvarsize=64m
> >
> > fbt::nfs3readdirplus:entry,
> > fbt::nfs3readdir:entry
> > {
> >         @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);
> > }
> >
> > Thanks,
> > -- Leon
> >
> > On 2/25/07, Matty <matty91 at gmail.com> wrote:
> > > I think execname is set to the name of the executable that performs
> > > the readdir*(), not nfsd. What happens when you remove the "execname
> > > == nfsd" line from the entry probes?:
> > >
> > > fbt::nfs3readdirplus:entry,
> > > fbt::nfs3readdir:entry
> > > {
> > >         @count[execname,probefunc] = count();
> > >         self->x[probefunc, stackdepth] = timestamp
> > > }
> > >
> > > Thanks,
> > > - Ryan
> > > --
> > > UNIX Administrator
> > > http://prefetch.net
> > >
> > > On 2/25/07, Leon Koll <leon.is.here at gmail.com> wrote:
> > > > 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
> > > > _______________________________________________
> > > > nfs-discuss mailing list
> > > > nfs-discuss at opensolaris.org
> > > >
> > > _______________________________________________
> > > nfs-discuss mailing list
> > > nfs-discuss at opensolaris.org
> > >
> >
>
>
> --
> UNIX Administrator
> http://prefetch.net
> _______________________________________________
> nfs-discuss mailing list
> nfs-discuss at opensolaris.org
>

Reply via email to