После перехода из Btrfs в ZFS на десктопе обнаружил вещь, о которой никто не распространялся и не предупреждал: ZFS использует RAM для своих кэшов как обычное приложение, и линукс не заносит эту память в графу MemAvailable в /proc/meminfo. На самом деле ZFS с готовностью освободит память, если линукс попросит его об этом, однако по каким-то техническим/историческим причинам такая память не попадает в MemAvailable. А должна бы. Отсюда следует, что все остальные приложения (браузеры, OOM-киллеры и т. д.) получают некорректную статистику по тому, сколько памяти доступно в системе -- она существенно занижена. А значит браузеры будут слишком рано разгружать вкладки, OOM-киллеры будут рано пытаться убивать процессы, и т. д.Есть вариант сделать так, чтобы ARC не жрал много памяти (видимо zfs_arc_max). Но тогда получается, что ZFS не будет использовать оперативку по полной программе в те моменты, когда ее никто не использует.
Есть вариант выставить следующие опции вместо zfs_arc_max (https://github.com/openzfs/zfs/issues/10255):
options spl spl_kmem_cache_slab_limit=1048576 # default is 16384
options zfs zfs_abd_scatter_enabled=0 # default is 1Тогда используемая ARC-ом память попадает в MemAvailable, но там пишут, что при такой конфигурации чем дольше работает система, тем неэффективнее будет организована память в оперативке.
Как вы решили такую проблему для себя? Сдается мне, ZFS хреновато интегрирован с линуксом в этом отношении. Мне очень важно иметь правильный MemAvailable, потому что я периодически дохожу до потолка даже с моими 64 GB -- некоторые приложения читают это значение и не стесняясь забирают все. Проблему считаю критичной, и я удивлен, что никто ее особо не упоминает.