第 7 章 FS-CACHE の使用
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 つのマウントに一意の識別子一意の識別子を追 加します(つまり)。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、ソケットを
キャッシュしません キャッシュしません。
7.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 のペアを同時に依存します。ユーザーが個別に処理すること はできません。
7.6. FSCACHE カーネルモジュールからの統計情報の取得
FS-Cache は一般的な統計情報も追跡します。以下の手順では、この情報を取得する方法を説明しま
す。
手順 手順
1. FS-Cache の統計情報を表示するには、次のコマンドを使用します。
# cat /proc/fs/fscache/stats
FS-Cache の統計にはディシジョンポイントとオブジェクトカウンターに関する情報が含まれます。詳 細は、以下のカーネルドキュメントを参照してください。
/usr/share/doc/kernel-doc-4.18.0/Documentation/filesystems/caching/fscache.txt