Slow NFS, nfsstat -c: what is authrefrsh (aka newcreds?) field about in detail

gentoonfsopenvpn

(net-fs/nfs-utils-1.2.3-r1, 2.6.38.5-zen+ Gentoo)

Googling this seems to be a complete dead end. man nfsstat says a whole lot of nothing about the subject. The closest I could get was finding out about what was probably previously "newcreds".

newcreds
Number of times authentication information had to be refreshed.

My problem is that I think I'm seeing subpar NFS performance over OpenVPN and the only thing I can immediately see that is significantly different than all nfsstat Google results, is that my "calls" field equals exactly "authrefrsh" and is therefore very high. All the search result outputs always had authrefrsh as 0 or a very low number. Before I can move on to debugging some other aspects, I could use finding out what this means.

Watched operation is emerging a package over NFS-shared portage. emerge does traverse a big tree during it's operation but previous experience says the performance I'm seeing is abnormal.

$ watch -n 1 nfsstat -c

Every 1,0s: nfsstat -c                                Sat May 21 23:04:55 2011

Client rpc stats:
calls      retrans    authrefrsh
308565     2211       308565

Client nfs v3:
null         getattr      setattr      lookup       access       readlink
0         0% 172372   55% 17        0% 30485     9% 36057    11% 26831     8%
read         write        create       mkdir        symlink      mknod
25879     8% 107       0% 21        0% 0         0% 0         0% 0         0%
remove       rmdir        rename       link         readdir      readdirplus
16        0% 0         0% 11        0% 0         0% 0         0% 16668     5%
fsstat       fsinfo       pathconf     commit
3         0% 50        0% 25        0% 2         0%

I can't figure out exactly what authrefrsh is (and this spelling, is that intentional btw?) and why is it increasing like this in my case?

Best Answer

From the Red Hat article in the comments the solution says

This is expected behaviour.

Not very helpful but it also points out the reason it happens.

It references commit a17c2153d2e271b0cbacae9bed83b0eaa41db7e1 in the sunrpc package that moves where nfs authentication takes place. I won't copy/paste the entire commit but it mostly changes these lines.

-struct rpc_cred *cred = task->tk_msg.rpc_cred;
+struct rpc_cred *cred = task->tk_rqstp->rq_cred;

My limited understanding is that this line moves where the call_refresh() happens (sooner rather than later). This in turn means most all nfs requests will cause authrefrsh to increment as authentication is always used.

Related Question