(net-fs/nfs-utils-1.2.3-r1、2.6.38.5-zen+ Gentoo)
谷歌搜索这似乎是一个完全的死胡同。男子 nfsstat关于这个主题什么也没说。我能得到的最接近的信息就是找出以前可能发生的事情”新信用”。
newcreds 必须刷新身份验证信息的次数。
我的问题是我思考我看到 OpenVPN 上的 NFS 性能低于标准,我能立即看到的唯一与所有 nfsstat Google 结果显着不同的是,我的“calls”字段完全等于“authrefrsh”,因此非常高。所有搜索结果输出的 authrefrsh 始终为 0 或非常低的数字。在继续调试其他一些方面之前,我可以先弄清楚这意味着什么。
监视操作正在出现一个基于 NFS 共享 portage 的包。 emerge 在运行过程中确实会遍历一棵大树,但以前的经验表明我看到的性能是不正常的。
$ 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%
我无法确切地弄清楚 authrefrsh 是什么(顺便说一句,这个拼写是故意的吗?)以及为什么在我的情况下它会像这样增加?
答案1
来自红帽文章在评论中解决方案说
这是预期的行为。
不是很有帮助,但它也指出了它发生的原因。
它引用了 sunrpc 包中的提交 a17c2153d2e271b0cbacae9bed83b0eaa41db7e1,该包移动到发生 nfs 身份验证的位置。我不会复制/粘贴整个提交,但它主要更改这些行。
-struct rpc_cred *cred = task->tk_msg.rpc_cred;
+struct rpc_cred *cred = task->tk_rqstp->rq_cred;
我有限的理解是,这条线移动到 call_refresh() 发生的地方(宜早不宜迟)。这反过来意味着大多数 nfs 请求都会导致 authrefrsh 增加,因为始终使用身份验证。
答案2
我看到同样的事情(不使用 VPN) - authrefrsh == 在客户端调用。在我看来,调用的数量增加,然后减慢,然后 authrefrsh 的数量赶上。
客户端 rpc 统计:
calls retrans authrefrsh
261697 0 261697
我也看到非常高的 iowait :
dd if=/dev/zero of=/mnt/omoikane/testfile bs=16k count=2048
(来自iostat:)
avg-cpu: %user %nice %system %iowait %steal %idle
4.04 0.00 4.04 91.92 0.00 0.00
我在wireshark 中看不到任何异常 - 我正在使用nfs3 和tcp。
答案3
据我从此链接了解, authrefresh = Calls 并不表明存在问题。