7.4. NFS でのキャッシュの使用

明示的に指示されない限り、NFS はキャッシュを使用しません。ここでは、FS-Cache を使用して NFS マウントを設定する方法を説明します。

前提条件

  • cachefilesd パッケージがインストールされ、実行している。これを実行していることを確認するには、次のコマンドを使用します。

    # systemctl start cachefilesd
    # systemctl status cachefilesd

    ステータスは active (running) である必要があります。

  • 以下のオプションで NFS 共有をマウントします。

    # mount nfs-share:/ /mount/point -o fsc

    ファイルがダイレクト I/O や書き込みのために開いていない限り、/mount/point の下にあるファイルへのアクセスはすべてキャッシュを経由します。詳細は「NFS でのキャッシュの制限」を参照してください。NFS インデックスは NFS ファイルハンドルを使用してコンテンツをキャッシュします。ファイル名ではなく、ハードリンクされたファイルはキャッシュを正しく共有します。

NFS バージョン 3、4.0、4.1、および 4.2 はキャッシュに対応します。ただし、各バージョンはキャッシュに異なるブランチを使用します。

7.4.1. NFS キャッシュ共有の設定

NFS キャッシュの共有には潜在的な問題がいくつかあります。キャッシュは永続的であるため、キャッシュ内のデータブロックは 4 つのキーのシーケンスでインデックス化されます。

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

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

以下は、異なるオプションでキャッシュ共有を設定する方法の例になります。

手順

  1. 次のコマンドで NFS 共有をマウントします。

    mount home0:/disk0/fred /home/fred -o fsc
    mount home0:/disk0/jim /home/jim -o fsc

    /home/fred および /home/jim には同じオプションがあるため、スーパーブロックを共有する可能性が高くなります。特に NFS サーバー上の同じボリュームやパーティションから作成されている場合は共有する可能性が高くなります (home0)。

  2. スーパーブロックを共有しないようにするには、mount コマンドに以下のオプションを付けて実行します。

    mount home0:/disk0/fred /home/fred -o fsc,rsize=8192
    mount home0:/disk0/jim /home/jim -o fsc,rsize=65536

    この場合、/home/fred/home/jim は、レベル 2 キーの異なるネットワークアクセスパラメーターを持つため、スーパーブロックを共有しません。

  3. 2 つのサブツリー (/home/fred1/home/fred2) のコンテンツを 2 回 キャッシュしてスーパーブロックを共有しないようにするには、次のコマンドを使用します。

    mount home0:/disk0/fred /home/fred1 -o fsc,rsize=8192
    mount home0:/disk0/fred /home/fred2 -o fsc,rsize=65536
  4. スーパーブロックの共有を回避するもう 1 つの方法は、nosharecache パラメーターで明示的に共有を回避することです。同じ例を使用します。

    mount home0:/disk0/fred /home/fred -o nosharecache,fsc
    mount home0:/disk0/jim /home/jim -o nosharecache,fsc

    ただし、この場合は、レベル 2 キーの home0:/disk0/fred および home0:/disk0/jim を区別することができないため、使用できるスーパーブロックは 1 つだけとなります。

  5. スーパーブロックにアドレスを指定するには、少なくとも 1 つのマウントに unique identifier に追加します。つまり、fsc=unique-identifier となります。

    mount home0:/disk0/fred /home/fred -o nosharecache,fsc
    mount home0:/disk0/jim /home/jim -o nosharecache,fsc=jim

    /home/jim のキャッシュで使用されるレベル 2 キーに固有識別子の jim が追加されます。

重要

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

7.4.2. NFS でのキャッシュの制限

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

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

このページには機械翻訳が使用されている場合があります (詳細はこちら)。