web-dev-qa-db-ja.com

ZFSで大規模な削除、コピー、移動を行うと、他のすべてのIOがブロックされるのはなぜですか?NAS

Solaris 11ZFSベースのNASデバイスと12x1TB7.2k rpmSATAドライブをミラー構成で使用しています。

同じプールから2つのサービスを提供します-小さなVMファーム用のNFSサーバーと、共有ファイルをホストする小さなチーム用のCIFSサーバーです。cifsZFSは停止しましたが、NFS ZFSファイルシステムが停止しました。圧縮はどこでもオフになっています。各ファイルシステムのスナップショットを毎日作成し、最後の14個のスナップショットを保持しています。

NASに直接SSH接続しているときに、大量のデータを移動、コピー、または削除しているときに、パフォーマンスの問題が発生しました。基本的に、プロセスは他のすべてのIO操作をブロックしているように見えますが、VMがディスクタイムアウトを受信するためにストールするまでです。

なぜそうなのかについていくつかの理論がありますが、次に何をするかについての洞察をいただければ幸いです。

どちらか:

1)ハードウェアが十分ではありません。私はこれについてあまり確信していません-システムは30GBのRAMを搭載したHPX1600(シングルXeon CPU)です。ドライブはわずか7.2kSATAですが、それぞれ最大80 IOPSをプッシュする必要があります。これにより、十分すぎるほどの効果が得られます。しかし、間違っていることが証明されてうれしいです。

2)設定を間違えました-おそらくそうです。どこでも重複排除をオフにする価値はありますか? RAM =重複排除に適しているため、RAMを適切に使用できるという前提で作業しています。

3)SolarisはIOのスケジューリングについて愚かです。ローカルのrmコマンドがIOをnfsdに完全にブロックする可能性はありますか?その場合、これを変更するにはどうすればよいですか?

2
growse

オプション#2が理由である可能性が最も高いです。重複排除テーブル(DDT)が完全にメモリに収まる場合、重複排除は最高のパフォーマンスを発揮します。そうでない場合は、ディスクに波及し、ディスクに移動する必要のあるDDTルックアップは非常に遅く、ブロッキング動作が発生します。

30GのRAMで十分だと思いますが、DDTのサイズは、重複排除されるデータの量と、データに対する重複排除の動作に直接依存します。重複排除プロパティは、データセットレベルですが、ルックアップはプール全体で行われるため、プール全体のDDTは1つだけです。

DDTサイズの計算については、 このzfs-discussスレッド を参照してください。基本的に、これはプール上の一意のブロックごとに1つのDDTエントリであるため、大量のデータがあるが重複排除率が低い場合は、一意のブロックが多くなり、DDTが大きくなります。システムはDDTをRAMに保持しようとしますが、アプリケーションにメモリが必要な場合は、一部が削除される可能性があります。 L2ARCキャッシュがあると、DDTがメインメモリ(ARC)からL2ARCに追い出されるため、DDTがメインプールディスクに移動するのを防ぐのに役立ちます。

3
eirescot

ZFSとスナップショットで覚えておくべきことの1つは、無料のものは何もないということです。大量のデータを削除すると、特にスナップショットの数が多い場合は、スナップショットがそのデータを維持し続けることが期待されます。削除、スナップショットは、ファイルシステムへの変更を反映するためにそれに応じて更新する必要があります。 6つのVDEV、基本的にはプール内に6つのミラーがあると想定しています。つまり、データは各VDEVに非常に均等に分散されているため、実際にはすべてのディスクに対してこれらの変更を実行する必要があります。重複排除をオンにすると、特に比率が良い場合は状況がはるかに複雑になり、比率が悪い場合は使用しないでください。本質的に、比率が良好または大きい場合は、多数の参照があります。これらはすべてもちろんメタデータであり、スナップショットおよびスナップショット関連のメタデータとともにすべて更新する必要があります。ファイルシステムのブロックサイズが小さい場合、参照の量が多いため、状況はさらに複雑になります。 4Kブロックサイズのデータ​​セットと128Kデータセットの方がはるかに大きくなります。

基本的に、実行できることはいくつかあります。1)キャッシュデバイスとして高性能SSDを追加し、メタデータのみにキャッシュデバイスを使用するようにファイルシステムを調整します。2)大規模な削除/破棄操作を減らします。3)再重複排除の使用を検討してください。ただし、プールまたはファイルシステムで重複排除を単純に無効にすることはできません。プール全体で有効になっている場合は、プールを再作成する必要があります。または、個々のファイルシステムに設定されている場合は、ファイルシステムを破棄して再作成すると問題が解決します。

Nexentaでは、重複排除をお客様に推奨する際に細心の注意を払っています。それが素晴らしい解決策である場合が多く、顧客はそれなしでは生きていけません。そしてそのような場合、96GB以上のRAM以上を使用して、より多くのメタデータとRAM内のDDTを維持する顧客がよくいます。DDTメタデータが回転するメディアにプッシュされるとすぐに、すべてが文字通り届きますこれがお役に立てば幸いです。

3
slashdot