テストのために、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 のみが残ります。