目的別のストレージアプリケーションに最適なARCおよびL2ARC設定

目的別のストレージアプリケーションに最適なARCおよびL2ARC設定

私は 3 つの ZFS プールを実行するサーバーを構成しています。そのうち 2 つは目的が特定されており、デフォルトの推奨事項は単純に最適化されていないように感じます。ネットワークはデュアル 10gbit アダプターによって実現されます。

プール 1 は大きなファイル ストレージで、めったに書き込みや読み取りが行われない生のビデオ データと、ときどきバックアップが格納されます。このプールから何かをキャッシュしてもまったく意味がありません。最初から最後まで 1 回のスキャンで読み取られる高帯域幅のデータであるため、このプールから何かをキャッシュするとメモリが完全に無駄になります。レイテンシはそれほど問題にならず、圧縮率の高いデータのため帯域幅は十分です。このプールは z2 モードの 8 台の HDD で構成され、使用可能な容量は 24 TB です。

プール 2 は圧縮されたビデオ フレームのストレージです。このコンテンツの一部は、ビデオ プロジェクトを合成するときに頻繁に読み取られます。頻繁に使用されるデータの部分は、通常、サーバーの RAM の合計量よりも多く、低レイテンシ要件がありますが、極端に低いわけではなく、帯域幅の方が重要です。プールは、z1 の 3 つの HDD (使用可能容量 8 TB) と、L2ARC 用の 1 TB NVME SSD で構成されています。

プール 3 は、ローカル ストレージではなく、そこからソフトウェアを起動して実行する複数のコンピュータ システムのストレージとして使用される一般的なストレージです。複数のマシンとプライマリ システム ストレージにサービスを提供する必要があるため、ここでのレイテンシと帯域幅の要件は最も高くなります。このプールは主に読み取り専用で、書き込みはクライアント システムで実行されるものに限定されます。プールは、z1 モードの 3 つの SATA SSD で構成され、使用可能な容量は 1 TB です。

最適化の目的は、最初の 2 つのプールの ARC サイズを最小化して、3 番目のプールの ARC サイズを最大化することです。

プール 1 にはキャッシュによるメリットがまったくないので、設定できる ARC の最小安全量はどれくらいでしょうか?

プール 2 は ARC の恩恵を受けることができますが、L2ARC は目的に十分な速度があり、ドライブの容量は 1 TB なので、ARC を使用する価値はあまりありません。理想的には、このボリュームに ARC を使用せずに、L2ARC のテラバイト全体を使用することができればよいのですが、L2ARC ヘッダー データには少なくともいくらかの ARC が必要なようです。

したがって、L2ARC 容量が 1 TB、プール レコード サイズが 64k であることを考慮すると、1tb / 64kb * 70b で約 0.995gb になります。これは、そのプールの ARC を 1GB で安全に制限できることを意味しますか? それとも、もっと必要ですか?

ARC には読み取りキャッシュと L2ARC を処理するための情報の両方が含まれているようです。そのため、RAM に実際のデータをキャッシュすることに煩わされるよりも、より大きな L2ARC の管理に重点を置くオプションが必要なようです。また、必要に応じて、キャッシュ削除ポリシーが通常のキャッシュ階層ポリシーに準拠していない場合に、ARC からのキャッシュ削除が L2ARC に移動されるようにする必要があります。

私が読んだ一般的な推奨事項では、ストレージ 1 TB あたり約 1 GB の RAM が推奨されていますが、私は 33 TB のストレージあたり 32 GB の RAM を計画しており、これはほぼ正確ですが、L2ARC と ARC の比率は 4 対 5 で、かなり足りません。目標は、プール 1 の ARC を可能な限り低く抑え、プール 2 の ARC を、L2ARC の 1 TB 全体を活用するために必要な量だけ削減して、プール 3 の ARC で使用できる RAM を最大化することです。

答え1

まず、プール n.2 と n.3 のレイアウトを再検討することを強くお勧めします。3 方向ミラーでは、低レイテンシも高帯域幅も得られません。L2ARC 用の高価な 1 TB NVMe ディスク (ちなみに、これは 32 GB ARC が小さいためアンバランスです) ではなく、RAID10 形式で 7200 RPM ディスクをさらに使用するか、さらに安価で信頼性の高い SSD (例: Samsung 850 Pro/Evo または Crucial MX500) を使用します。

少なくとも、すべてのディスクを単一の RAID10 プール (SSD L2ARC を使用) に配置し、複数のデータセットを使用して単一のプールをセグメント化することができます。

primarycacheただし、およびオプションを使用すると、データセットごとに ARC/L2ARC をどのように使用するかを指定できますsecondarycache

  • zfs set primarycache=none <dataset1> ; zfs set secondarycache=none <dataset1>無効になりますどれでもzfs set logbias=throughput <dataset1>データセットの ARC/L2ARC キャッシュ。書き込み操作中に、レイテンシではなくスループットを優先することもできます。
  • zfs set primarycache=metadata <dataset2>2 番目のデータセットのメタデータのみのキャッシュを有効にします。L2ARC は ARC によってフィードされることに注意してください。つまり、ARC がメタデータのみをキャッシュしている場合は、L2ARC でも同じことが当てはまります。
  • 3 番目のデータセットでは ARC/L2ARC のデフォルト オプションのままにします。

zfs_arc_max最後に、ZFSインスタンスがARC用にRAMの50%以上(デフォルト)を使用するように設定できます(モジュールのマニュアルページ

関連情報