URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 98073
[ Назад ]

Исходное сообщение
"ZFS и MemAvailable"

Отправлено Аноним , 30-Авг-25 06:13 
После перехода из 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 -- некоторые приложения читают это значение и не стесняясь забирают все. Проблему считаю критичной, и я удивлен, что никто ее особо не упоминает.


Содержание

Сообщения в этом обсуждении
"ZFS и MemAvailable"
Отправлено Аноним , 31-Авг-25 13:22 
> Проблему считаю критичной, и я удивлен, что никто ее особо
> не упоминает.

Потому что её нет, так как мало кто накручивает на пустом месте, все просто пользуются.


"ZFS и MemAvailable"
Отправлено Аноним , 31-Авг-25 13:42 
Обычный сценарий: закидываешь 30 GB данных из не-ZFS в ZFS -- и свободная оперативка резко уменьшилась на эти самые 30 GB, потому что они попали в кэш ZFS. А это значит, что остальные приложения будут считать, что памяти стало меньше, и начать затягивать пояса. Приложения не знают, что чтобы правильно рассчитать свободную память, нужно к MemAvailable плюсануть нестандартную ARC-овскую статистику.

"ZFS и MemAvailable"
Отправлено Аноним , 31-Авг-25 16:19 
> А это значит, что остальные приложения будут считать, что памяти стало меньше, и начать затягивать пояса

можно список таких умных приложений? А то большинству плевать, что на лимиты в cgroups, что на параметры техники, на которой они работают. Особенно если мы про десктоп


"ZFS и MemAvailable"
Отправлено Аноним , 31-Авг-25 18:11 
1. OOM-киллеры же. В issue упоминалось, что какому-то OOM-киллеру добавили специальную осведомленность о существовании ZFS. То есть да, есть как минимум один OOM-киллер, который вручную прибавляет ARC-статистику к MemAvailable. Другие киллеры этим не занимаются и вряд ли это будут делать.

2. Браузеры. Видя, что MemAvailable опасно приближается к нулю, браузеры начинают разгружать вкладки. Хотя на самом деле ZFS освободит память по первому же требованию. А проблема в том, что браузерам ничего не известно о такой щедрости ZFS. С их точки зрения кто-то удерживает память и отдавать ее не собирается.

3. Нейронки. Питоновская часть может иметь условие по тому, как кэшировать модели: либо сохранять их в RAM, либо каждый раз читать с диска. Это как раз тот случай, когда можно запросто уйти с 64 GB свободной памяти в ноль. Из-за заниженного MemAvailable приложение будет считать, что безопаснее ничего не кэшировать и каждый раз теребить SSD.

Ну и удобство. Индикатор свободной памяти на панели DE всегда показывает, будто памяти больше нет. MemAvailable -- это общепринятый интерфейс линукса, и ZFS его нарушает, не маркируя свой кэш как reclaimable.


"ZFS и MemAvailable"
Отправлено Аноним , 31-Авг-25 19:09 
> есть как минимум один OOM-киллер, который вручную прибавляет ARC-статистику к MemAvailable.

Тут еще вопрос насколько правильно этот OOM-киллер определяет какую часть памяти zfs сможет отдать в нужный промежуток времени

> 2. Браузеры. Видя, что MemAvailable опасно приближается к нулю, браузеры начинают разгружать вкладки.

браузеры выгружают вкладки по таймеру засекая период неактивности

> 3. Нейронки.

зачем вы так с собой

> что безопаснее ничего не кэшировать и каждый раз теребить SSD.

так arc же

> MemAvailable -- это общепринятый интерфейс линукса, и ZFS его нарушает, не маркируя свой кэш как reclaimable.

А ZFS это файловая система, сделанная под солярис и изолентой примотанная к линуксу.
Её кэш — это её кэш и понятию кэша в линуксе он не соответствует.