NPE*_*NPE 5 linux performance redhat hard-drive 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 设置。我正在使用带有内核 2.6.18 的 RedHat 5.6,我相信它限制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也要低得多。
更快的磁盘,更多的内存。我认为你的结论是正确的——你正在寻求束缚。
您的 NFS 服务器与您的工作集相比有多少内存?您的工作集适合缓存吗?
什么是后端存储?你说它的吞吐量约为 180-360MB/秒,但它对于随机 I/O 的性能如何?我建议使用fio之类的东西来获得想法。eekwatcher也很有趣地将 I/O 可视化。但如果你能避免撞到磁盘那就更好了。