複数のクライアントを持つNFS3サーバーがあります。各クライアントは異なる大きなファイルを順番に読み取っており、パフォーマンスは非常に低くなっています。
これは、ファイルが存在するディスクのサーバー上のiostat
で観察しているものです。
デバイス:rrqm/s wrqm/sr/sw/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でRedHat5.6を使用しています。これは 私は信じていますrsize
を32KBに制限します(これについて間違っていることが証明されれば幸いです)。
edit:これは、単一のファイルを読み取るクライアントが1つしかない場合の外観です。
デバイス:rrqm/s wrqm/sr/sw/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
もはるかに低くなっています。
より高速なディスク、ボックス内のより多くのメモリ。私はあなたの結論が正しいと思います-あなたは束縛を求めています。
NFSサーバーとワーキングセットのメモリ容量はどれくらいですか?ワーキングセットはキャッシュに収まりますか?
バックエンドストレージとは何ですか?スループットは約180〜360MB /秒だとおっしゃっていますが、ランダムI/Oではどのように機能しますか? fio のようなものを使用してアイデアを得ることをお勧めします。 seekwatcher I/Oを視覚化するのも楽しいです。しかし、ディスクにぶつかるのを避けることができれば、もっと良いでしょう。