我有一台带有多个客户端的 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
也低了很多。