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, оставляя лишь несколько МБ, связанных с базовыми метаданными пула.

Связанный контент