web-dev-qa-db-ja.com

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

3つのZFSプールを実行するサーバーを構成しています。そのうち2つは目的に固有であり、デフォルトの推奨事項はそれらに対して最適化されていないようです。ネットワーキングは、デュアル10ギガビットアダプターによって促進されます。

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

プール2は、圧縮されたビデオフレームストレージです。このコンテンツの一部は、ビデオプロジェクトの合成時に頻繁に読み取られます。頻繁に使用されるデータの割合は、通常、RAM=サーバーの合計量よりも高く、低遅延要件がありますが、超低ではありません。帯域幅がより重要です。プールは、 z1に3台のHDD、8 TBの使用可能な容量、およびL2ARC用に1 TBのNVME SSD。

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

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

プール1は、キャッシングによるメリットがまったくないので、それに設定できるARCの最小安全量はいくつですか?

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

したがって、L2ARCの容量が1 TBで、プールレコードサイズが64k、1TB/64KB * 70Bの場合、0.995GBになります。これは、そのプールのARCを1GBで安全に制限できることを意味しますか?または多分それはもっと必要ですか?

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

私が読んだ一般的な推奨事項では、1 GBのストレージRAM 1 TBのストレージあたり、32 GBのRAM 33あたりTB私がほとんど使い切っていないストレージですが、L2ARCとARCの場合は4または5対1ですが、これは私がかなり不足しているプール1のARCをできるだけ低くカットし、プール2をカットすることを目標としていますL2ARCの1TB全体を利用できるようにするために、ARCを必要なだけにし、RAMプール3のARCで使用可能).

3
dtech

最初に、プールn.2およびn.3のレイアウトを再検討することを強くお勧めします。3ウェイミラーでは、待ち時間が短くなったり、帯域幅が広くなったりすることはありません。高価な1 TB LMBのNVMeディスク(ちなみに、32 GBの小さなARCのためにバランスが取れていない)ではなく、RAID10方式で7200 RPMディスクを使用するか、安価で信頼性の高いSSD(例:Samsung 850 Pro/EvoまたはCrucial MX500)。

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

つまり、primarycacheおよびsecondarycacheオプションを使用して、データセットごとのベースでARC/L2ARCを使用する方法を指定できます。

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

最後に、ZFSインスタンスを設定して、ARCのRAMの50%以上(デフォルト))を使用することができます( module manページでzfs_arc_maxを探します

3
shodanshok