なぜ私の ZFS プールは書き込み操作でターゲットの読み取りに 97% の時間を費やし、書き込みには約 3% しか費やさないのでしょうか?

なぜ私の ZFS プールは書き込み操作でターゲットの読み取りに 97% の時間を費やし、書き込みには約 3% しか費やさないのでしょうか?

これは私を困惑させ、ZFS が実際に何をしているのかを詳しく調べる方法がわかりません。

私は、高速 ZFS プール (高速 7200 にインポートされたミラー) と単一の UFS SSD を備えた FreeNAS 11.1 のクリーン インストールをテスト用に使用しています。構成はほぼ「そのまま」の状態です。

SSD には、コンソールを使用してプールにコピーされた、サイズが 16 - 120 GB の 4 つのファイルが含まれています。プールは重複排除されており (価値あり: 4 倍の節約、ディスク上のサイズは 12 TB)、システムには十分な RAM (128 GB ECC) と高速 Xeon が搭載されています。メモリは十分です。zdbプールには合計 121M ブロック (ディスク上の各ブロックは 544 バイト、RAM 上の各ブロックは 175 バイト) があるため、DDT 全体は約 20.3 GB (データ 1 TB あたり約 1.7 GB) になります。

しかし、ファイルをプールにコピーすると、次のようになりますzpool iostat: ここに画像の説明を入力してください

1 分ほどの低レベルの読み取りと、短時間の書き込みの集中というサイクルを実行しています。読み取り部分は画像に示されています。タスクの全体的な書き込み速度もそれほど速くありません。プールは 45%/10TB が空で、ネイティブでは約 300 - 500 MB/秒で書き込むことができます。

確認方法がわからないため、低レベルの読み取りは DDT やその他のメタデータの読み取りによるものであると推測します。これは、それらが ARC にプリロードされていない (または、書き込まれるファイル データによって ARC から継続的にプッシュされている) ためです。おそらく。

おそらく重複排除ヒットを見つけているので書き込みはあまり行われませんが、これらのファイルの重複バージョンは覚えていません。また、私が覚えている限りでは、/dev/random からも同じことが行われています (これを確認してすぐに更新します)。 多分。 本当のところはわかりません。

最適化を目的として、何が起こっているかをより正確に調べるにはどうすればよいでしょうか?

RAM と重複排除の更新:

最初のコメントに従って、DDT のサイズを示すように Q を更新しました。重複排除 RAM は 5GB/TB x 4 とよく言われますが、これは重複排除にはあまり適さない例に基づいています。ブロック数とエントリあたりのバイト数を掛けて計算する必要があります。よく言われる「x 4」は、単に「ソフト」なデフォルト制限にすぎません (デフォルトでは、ZFS はメタデータを ARC の 25% に制限します。それ以上使用するように指示されない限り、このシステムは重複排除用に指定されており、64GB を追加しました。全てメタデータのキャッシュを高速化するために使用できます。

したがって、このプールでは、zdbDDT 全体で TB あたり 5 GB (合計 20G) ではなく TB あたり 1.7 GB のみが必要であることが確認され、メタデータに ARC の 25% (123G のうち 80G) ではなく 70% を割り当てることができます。

そのサイズなら排出する必要はない何でもARC からの「デッド」ファイル コンテンツ以外。そこで、ZFS を実際に調査して、何が起こっているのかを調べ、変更の効果を確認したいと考えています。ZFS の「低レベル読み取り」量が非常に多いことに非常に驚いているため、ZFS が実際に行っていると考えていることを調査して確認する方法を探しています。

関連情報