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