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