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>