The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



"ZFS и MemAvailable"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Открытые системы на сервере (Файловые системы, диски / Linux)
Изначальное сообщение [ Отслеживать ]

"ZFS и MemAvailable"  +/
Сообщение от Аноним (0), 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 -- некоторые приложения читают это значение и не стесняясь забирают все. Проблему считаю критичной, и я удивлен, что никто ее особо не упоминает.

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения [Сортировка по времени | RSS]


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

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

Ответить | Правка | Наверх | Cообщить модератору

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

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

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

Ответить | Правка | Наверх | Cообщить модератору

4. "ZFS и MemAvailable"  +/
Сообщение от Аноним (0), 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.

Ответить | Правка | Наверх | Cообщить модератору

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

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

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

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

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

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

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

так arc же

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

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

Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру