web-dev-qa-db-ja.com

大きなファイルを順次読み取るときのNFSパフォーマンスの低下

複数のクライアントを持つ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/sr/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もはるかに低くなっています。

5
NPE

より高速なディスク、ボックス内のより多くのメモリ。私はあなたの結論が正しいと思います-あなたは束縛を求めています。

NFSサーバーとワーキングセットのメモリ容量はどれくらいですか?ワーキングセットはキャッシュに収まりますか?

バックエンドストレージとは何ですか?スループットは約180〜360MB /秒だとおっしゃっていますが、ランダムI/Oではどのように機能しますか? fio のようなものを使用してアイデアを得ることをお勧めします。 seekwatcher I/Oを視覚化するのも楽しいです。しかし、ディスクにぶつかるのを避けることができれば、もっと良いでしょう。

1
James