连续读取大文件时 NFS 性能不佳

连续读取大文件时 NFS 性能不佳

我有一台带有多个客户端的 NFS3 服务器。每个客户端都在按顺序读取不同的大文件,性能非常差。

以下是我在iostat服务器上对文件所在磁盘的观察结果:

设备:rrqm/s wrqm/sr/sw/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util
标准差 24.33 0.00 712.67 0.00 18.41 0.00 52.91 11.95 16.91 1.40 100.00

如您所见,%util为 100%。同时,聚合 I/O 吞吐量(rMB/s+wMB/s)约为 18MB/s,比磁盘所能承受的速度慢 10-20 倍。

rMB/s由此,以及到的比率r/s,我得出结论:NFS 不是一次读取每个文件的大块,而是最终以较小的块读取文件,并且不同文件之间有大量的块交错。这反过来会导致大量的磁盘寻道,从而降低性能。

您认为该结论有证据支持吗?

您会推荐什么方法来解决这个问题?我可以更改阅读应用程序,并且可以调整服务器和客户端上的 NFS 设置。我使用的是 RedHat 5.6 和内核 2.6.18,它我相信限制rsize为 32KB(我很高兴证明这一点是错误的)。

编辑:当只有一个客户端读取单个文件时,情况是这样的:

设备:rrqm/s wrqm/sr/sw/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util
标准差 343.33 0.33 1803.33 0.67 105.78 0.00 120.09 0.91 0.50 0.31 56.47

如您所见,吞吐量好了很多,并且%util也低了很多。

答案1

磁盘越快,内存越大。我认为你的结论是正确的 - 你处于寻道受限状态。

您的 NFS 服务器拥有多少内存以及您的工作集?您的工作集是否适合缓存?

后端存储是什么?你说它的吞吐量约为 180-360MB/秒,但它的随机 I/O 性能如何?我建议使用类似菲奥来得到一个想法。寻觅观察者可视化 I/O 也很有趣。但如果你能避免碰到磁盘就更好了。

相关内容