我有一个带有多个客户端的NFS3服务器.每个客户端都按顺序读取不同的大文件,性能非常差.
以下是我在服务器上的iostat中观察文件所在磁盘的内容:
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util
sdX 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,其中I believe将rsize限制为32KB(我很高兴被证明是错误的).
编辑:当只有一个客户端读取单个文件时,这就是事物的样子:
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util
sdX 343.33 0.33 1803.33 0.67 105.78 0.00 120.09 0.91 0.50 0.31 56.47
如您所见,吞吐量要好得多,%util也要低得多.