4.11. NFS コンテンツのクライアント側キャッシュの有効化


FS-Cache は、クライアント上の永続的なローカルキャッシュです。ファイルシステムがネットワーク経由で取得したデータを取得してローカルディスクにキャッシュするために使用できます。これにより、ネットワークトラフィックを最小限に抑えることができます。

4.11.1. NFS キャッシュの仕組み

以下の図は、FS-Cache の仕組みの概要を示しています。

FS-Cache の概要

FS-Cache は、システムのユーザーおよび管理者が可能な限り透過的になるように設計されています。FS-Cache を使用すると、オーバーマウントされたファイルシステムを作成することなく、サーバー上のファイルシステムがクライアントのローカルキャッシュと直接対話できるようになります。NFS では、マウントオプションにより、FS-cache が有効になっている NFS 共有をマウントするようにクライアントに指示します。マウントポイントにより、fscachecachefiles の 2 つのカーネルモジュールの自動アップロードが実行します。cachefilesd デーモンは、カーネルモジュールと通信してキャッシュを実装します。

FS-Cache は、ネットワーク上で動作するファイルシステムの基本操作を変更しません。単に、そのファイルシステムに、データをキャッシュできる永続的な場所を提供するだけです。たとえば、クライアントは FS-Cache が有効になっているかどうかに関わらず、NFS 共有をマウントできます。さらに、キャッシュされた NFS は、ファイルが部分的にキャッシュされ、事前完全に読み込む必要がないため、ファイル (個別または一括) に収まらないファイルを処理できます。また、FS-Cache は、クライアントファイルシステムドライバーからキャッシュで発生するすべての I/O エラーも非表示にします。

キャッシュサービスを提供するには、FS-Cache にキャッシュバックエンド、つまり cachefiles サービスが必要です。FS-Cache には、ブロックマッピング (bmap) と拡張属性をキャッシュバックエンドとしてサポートするマウントされたブロックベースのファイルシステムが必要です。

  • XFS
  • ext3
  • ext4

FS-Cache は、ネットワークを介するかどうかに関係なく、あらゆるファイルシステムを任意にキャッシュすることはできません。FS-Cache の操作、データの保存または取得、およびメタデータの設定と検証を実行できるよう、共有ファイルシステムのドライバーが変更されている必要があります。FS-Cache では、永続性に対応するためにキャッシュされたファイルシステムの インデックスキー一貫性データ が必要になります。インデックスキーはファイルシステムオブジェクトをキャッシュオブジェクトに一致させ、一貫性データを使用してキャッシュオブジェクトが有効のままかどうかを判断します。

FS-Cache を使用する際には、さまざまな要素の妥協点を探すことになります。FS-Cache を使用して NFS トラフィックをキャッシュすると、クライアントの速度が低下する可能性があります。一方で、ネットワーク帯域幅を消費せずに読み取り要求をローカルで満たせるため、ネットワークとサーバーの負荷を大幅に軽減できます。

4.11.2. cachefilesd サービスのインストールと設定

Red Hat Enterprise Linux は、cachefiles キャッシュバックエンドのみを提供します。cachefilesd サービスは、cachefiles を起動および管理します。/etc/cachefilesd.conf ファイルは、cachefiles によるキャッシュサービスの提供方法を制御します。

前提条件

  • /var/cache/fscache/ ディレクトリーの下にマウントされるファイルシステムは、ext3ext4、または xfs です。
  • /var/cache/fscache/ の下にマウントされたファイルシステムは、拡張属性を使用します。これは、RHEL 8 以降でファイルシステムを作成した場合のデフォルトです。

手順

  1. cachefilesd パッケージをインストールします。

    # dnf install cachefilesd
  2. cachefilesd サービスを有効にして起動します。

    # systemctl enable --now cachefilesd

検証

  1. fsc オプションを使用して NFS 共有をマウントし、キャッシュを使用します。

    1. 共有を一時的にマウントするには、次のように入力します。

      # mount -o fsc server.example.com:/nfs/projects/ /mnt/
    2. 共有を永続的にマウントするには、/etc/fstab ファイルのエントリーに fsc オプションを追加します。

      <nfs_server_ip_or_hostname>:/<exported_share>     <mount point>    nfs fsc 0 0
  2. FS キャッシュの統計情報を表示します。

    # cat /proc/fs/fscache/stats

関連情報

  • /usr/share/doc/cachefilesd/README ファイル
  • kernel-doc パッケージにより提供されている /usr/share/doc/kernel-doc-<kernel_version>/Documentation/filesystems/caching/fscache.rst

4.11.3. NFS キャッシュの共有

キャッシュは永続的であるため、キャッシュ内のデータブロックは 4 つのキーのシーケンスでインデックス化されます。

  • レベル 1: サーバーの詳細
  • レベル 2: 一部のマウントオプション、セキュリティータイプ、FSID、識別子文字列
  • レベル 3: ファイルハンドル
  • レベル 4: ファイル内のページ番号

スーパーブロック間の整合性の管理に関する問題を回避するには、データのキャッシュを必要とする NFS のすべてのスーパーブロックに、固有のレベル 2 キーを設定します。通常、同じソースボリュームとオプションを持つ 2 つの NFS マウントは、スーパーブロックを共有しているため、そのボリューム内に異なるディレクトリーをマウントする場合でもキャッシュを共有することになります。

例4.1 NFS キャッシュ共有:

次の 2 つのマウントは、同じマウントオプションを持つため (特に NFS サーバー上の同じパーティションからのものであるため)、スーパーブロックを共有している可能性があります。

# mount -o fsc home0:/nfs/projects /projects
# mount -o fsc home0:/nfs/home /home/

マウントオプションが異なる場合、スーパーブロックは共有されません。

# mount -o fsc,rsize=8192 home0:/nfs/projects /projects
# mount -o fsc,rsize=65536 home0:/nfs/home /home/
注記

ユーザーは、異なる通信またはプロトコルパラメーターを持つスーパーブロック間でキャッシュを共有することはできません。たとえば、NFSv4.0 と NFSv3 の間、NFSv4.1 と NFSv4.2 の間でキャッシュを共有することはできません。これは、強制されるスーパーブロックが異なるためです。また、読み取りサイズ (rsize) などのパラメーターを設定した場合も、別のスーパーブロックが強制されるため、キャッシュの共有ができなくなります。

4.11.4. NFS キャッシュの制限

NFS にはキャッシュの制限がいくつかあります。

  • ダイレクト I/O で共有ファイルシステムからファイルを開くと、自動的にキャッシュが回避されます。これは、この種のアクセスがサーバーに直接行なわれる必要があるためです。
  • ダイレクト I/O または書き込みのいずれかで共有ファイルシステムからファイルを開くと、キャッシュされたファイルのコピーがフラッシュされます。ダイレクト I/O や書き込みのためにファイルが開かれなくなるまで、FS-Cache はファイルを再キャッシュしません。
  • さらに、FS-Cache の今回のリリースでは、通常の NFS ファイルのみをキャッシュします。FS-Cache は、ディレクトリー、シンボリックリンク、デバイスファイル、FIFO、ソケットをキャッシュしません。

4.11.5. キャッシュカリングの仕組み

cachefilesd サービスは、共有ファイルシステムからのリモートデータをキャッシュして、ローカルディスクの領域を解放することで機能します。これにより、使用可能な空き領域がすべて消費される可能性があり、ディスクにルートパーティションも含まれている場合は問題が発生する可能性があります。これを制御するために、cachefilesd は、最近のアクセスが少ないオブジェクトなどの古いオブジェクトをキャッシュから破棄して、一定量の空き領域を維持しようとします。この動作はキャッシュカリングと呼ばれます。

キャッシュカリングは、基盤となるファイルシステムで使用可能なブロックのパーセンテージとファイルのパーセンテージに基づいて行われます。/etc/cachefilesd.conf には、6 つの制限を制御する設定が存在します。

brun N% (ブロックのパーセンテージ)、frun N% (ファイルのパーセンテージ)
キャッシュの空き領域と利用可能なファイルの数がこれらの制限を上回ると、カリングはオフになります。
bcull N% (ブロックのパーセンテージ)、fcull N% (ファイルのパーセンテージ)
キャッシュの空き領域と利用可能なファイルの数がこれらの制限のいずれかを下回ると、カリング動作が開始します。
bstop N% (ブロックのパーセンテージ)、fstop N% (ファイルのパーセンテージ)
キャッシュ内の使用可能な領域または使用可能なファイルの数がこの制限のいずれかを下回ると、カリングによってこれらの制限を超える状態になるまで、ディスク領域またはファイルのそれ以上の割り当ては許可されません。

各設定の N のデフォルト値は以下の通りです。

  • brun/frun: 10%
  • bcull/fcull: 7%
  • bstop/fstop: 3%

この設定を行う場合は、以下の条件を満たす必要があります。

  • 0 ≤ bstop < bcull < brun < 100
  • 0 ≤ fstop < fcull < frun < 100

これは、空き領域と利用可能なファイルの割合であり、100 から、df プログラムで表示される割合を引いたものではありません。

重要

カリングは、bxxx と fxxx のペアを同時に依存します。ユーザーが個別に処理することはできません。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.