zfs: エクスポートせずにキャッシュをフラッシュする

zfs: エクスポートせずにキャッシュをフラッシュする

テストのために、zfs のキャッシュをコールドにする必要があります。

キャッシュ ディスクを削除し、プールをエクスポートおよびインポートすることで、プールからキャッシュをフラッシュできます。これで必要な効果が得られます。ただし、プールをエクスポートしたくはありません。

同じ効果を達成するための、より穏やかな方法はありますか?

私が探しているのは次のものと同等です:

echo 3 > /proc/sys/vm/drop_caches

これは ext4 で私が望むことを実行します。

背景

アルゴリズムをさまざまな方法で実行できます。最良のパフォーマンスは気にしません。する最悪の場合のパフォーマンスを気にします。最悪の場合とは、コールド データ (かなり前にアクセスされたため、ARC/L2ARC にはもう存在しないデータ) の場合です。

アルゴリズムを実行する最適な方法を選択するには、同じテスト セットで実行できる必要があります。また、このテスト セットはコールドである必要があります。これは、ZFS のキャッシュ戦略に完全に反しています。同じテスト セットで何度も実行すると、データが ARC に配置されます。これは通常の状況では完全に理にかなっていますが、この場合はそうではありません。

開発マシンではエクスポート/インポートできますが、本番環境ではできません。ただし、キャッシュをフラッシュすると、意思生産において許容される。

ARC が引き続き機能して、コールド データが読み取られた後にキャッシュされる (これも ext4 と同様) のが好ましいですが、テスト中は ARC を完全に無効にしても問題ありません。

答え1

echo 3 > /proc/sys/vm/drop_caches 使用済みZFS キャッシュをクリアする必要がありましたが、最近のコミットにより、部分的にのみクリアするように変更されました。

以前の動作に戻すには、zfs_arc_shrinker_limitモジュールパラメータを0ここ)。

したがって、プールをエクスポートせずに ARC を削除するには、次のようにします。

echo 0 > /sys/module/zfs/parameters/zfs_arc_shrinker_limit
echo 3 > /proc/sys/vm/drop_caches

上記はドロップされますほとんどすべて ZFS ARC で、基本的なプール メタデータに関連するわずか数 MB のみが残ります。

関連情報