Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 13 Apr 2013 14:41:50 +0200
From:      Paul van der Zwan <paulz@vanderzwan.org>
To:        freebsd-fs@freebsd.org
Subject:   Re: FreeBSD 9.1 NFSv4 client attribute cache not caching ?
Message-ID:  <495AEA10-9B8F-4A03-B706-79BF43539482@vanderzwan.org>
In-Reply-To: <15B91473-99F4-4B48-BC18-D47B3037E8DF@vanderzwan.org>
References:  <15B91473-99F4-4B48-BC18-D47B3037E8DF@vanderzwan.org>

next in thread | previous in thread | raw e-mail | index | archive | help

On 12 Apr 2013, at 16:28 , Paul van der Zwan <paulz@vanderzwan.org> =
wrote:

>=20
> I am running a few VirtualBox VMs with 9.1 on my OpenIndiana server =
and I noticed that make buildworld seem to take much longer=20
> when the clients mount /usr/src and /usr/obj over NFS V4 than when =
they use V3.
> Unfortunately I have to use V4 as a buildworld on V3 hangs the server =
completely...
> I noticed the number of PUTFH/GETATTR/GETFH calls in in the order of a =
few thousand per second
> and if I snoop the traffic I see the same filenames appear over and =
over again.
> It looks like the client is not caching anything at all and using a =
server request everytime.
> I use the default mount options:
> 192.168.178.24:/data/ports on /usr/ports (nfs, nfsv4acls)
> 192.168.178.24:/data/src on /usr/src (nfs, nfsv4acls)
> 192.168.178.24:/data/obj on /usr/obj (nfs, nfsv4acls)
>=20
>=20

I had a look with dtrace=20
$ sudo dtrace -n '::getattr:start { @[stack()]=3Dcount();}'
and  it seems the vast majority of the calls to getattr are from open() =
and close() system calls.:
              kernel`newnfs_request+0x631
              kernel`nfscl_request+0x75
              kernel`nfsrpc_getattr+0xbe
              kernel`nfs_getattr+0x280
              kernel`VOP_GETATTR_APV+0x74
              kernel`nfs_lookup+0x3cc
              kernel`VOP_LOOKUP_APV+0x74
              kernel`lookup+0x69e
              kernel`namei+0x6df
              kernel`kern_execve+0x47a
              kernel`sys_execve+0x43
              kernel`amd64_syscall+0x3bf
              kernel`0xffffffff80784947
               26

              kernel`newnfs_request+0x631
              kernel`nfscl_request+0x75
              kernel`nfsrpc_getattr+0xbe
              kernel`nfs_close+0x3e9
              kernel`VOP_CLOSE_APV+0x74
              kernel`kern_execve+0x15c5
              kernel`sys_execve+0x43
              kernel`amd64_syscall+0x3bf
              kernel`0xffffffff80784947
               26

              kernel`newnfs_request+0x631
              kernel`nfscl_request+0x75
              kernel`nfsrpc_getattr+0xbe
              kernel`nfs_getattr+0x280
              kernel`VOP_GETATTR_APV+0x74
              kernel`nfs_lookup+0x3cc
              kernel`VOP_LOOKUP_APV+0x74
              kernel`lookup+0x69e
              kernel`namei+0x6df
              kernel`vn_open_cred+0x330
              kernel`vn_open+0x1c
              kernel`kern_openat+0x207
              kernel`kern_open+0x19
              kernel`sys_open+0x18
              kernel`amd64_syscall+0x3bf
              kernel`0xffffffff80784947
             2512

              kernel`newnfs_request+0x631
              kernel`nfscl_request+0x75
              kernel`nfsrpc_getattr+0xbe
              kernel`nfs_close+0x3e9
              kernel`VOP_CLOSE_APV+0x74
              kernel`vn_close+0xee
              kernel`vn_closefile+0xff
              kernel`_fdrop+0x3a
              kernel`closef+0x332
              kernel`kern_close+0x183
              kernel`sys_close+0xb
              kernel`amd64_syscall+0x3bf
              kernel`0xffffffff80784947
             2530

I had a look at the source of nfs_close and could not find a call to =
nfsrpc_getattr, and I am wondering why close would be calling getattr =
anyway.
If the file is closed what do we care about it's attributes....


	Paul




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?495AEA10-9B8F-4A03-B706-79BF43539482>