我正在处理几个使用NFS文件pipe理器的服务器。
在关键时刻,单个服务器每秒向文件pipe理器发送大约2k次读取和2k次写入。 根据nfsiostat在这些时间读写RTTs从通常5-10ms增加到50-100ms两个r / w。 根据nfsiostat的平均执行时间虽然读写有很大的不同:读取ca 200ms,写入100-200sec之间。
现在从我了解的平均执行时间在nfsiostat本质上是RTT +内核时间(RPC排队等)。 谈论RPC – 我在RH5.8(紧缩时的RPC backlog ca 5k)和RH6.3(RPC backlog 0在任何时候)看到完全相同的行为。
所以 – 问题:NFS读/写执行时间差异大的原因是什么?
(NFS调用是由私有应用程序制作的,我没有太多的可见性,同样适用于文件pipe理器(NetApp – 外包),内核跟踪也许不会成为一种select)
非常感谢你提前。
编辑 :澄清,因为我得到了一些处理NFS性能一般的答案 – 真正感兴趣的我唯一的部分是:根据nfsiostat doco RTT是“…从客户端的内核发送RPC请求的时间,直到它收到答复的时间“。 Avg.exe是“从NFS客户端执行RPC请求到其内核直到RPC请求完成的时间,包括上面的RTT时间”。 ( http://man7.org/linux/man-pages/man8/nfsiostat.8.html )。
我的(也许是天真的)理解是在RTT之后服务器完成了,而不是等式。 那么,当RTT是相同的时,NFS客户端做什么使得Avg Exe对于读/写有很大的不同?
根据所描述的情况,可能有多个促成因素。 sync和async选项可以对性能产生重大影响,挂载NFS时可以使用nolock选项。
性能还可能受到与文件ACL有关的文件所有权和权限问题以及/或者在安装时使用root_squash和no_root_squash选项的潜在影响。 虽然如果是这样的话,那么在某个地方可能会有证据certificate它的存在。
移动文件进出内存也可能存在问题。 根据操作的顺序和物理和虚拟内存的数量,可能会出现很多摔跤。
如果stream量正在进行,文件操作没有正确清理/挂起/花费过多时间来完成写入操作,则当前打开的文件数量可能会开始推动内核支持的限制,可以通过运行以下命令来检查:
cat /proc/sys/fs/file-max
如果NFS服务器或客户端上的值较低,则可能值得增加以查看性能是否提高。 取决于networking环境,实施某些QoS策略可能会对性能产生影响(尽pipe可能不太可能)。