Pull to refresh

Comments 28

ZRAM — модуль ядра Linux, ранее известный как compcache. До версии ядра 3.14 находился в экспериментальной ветке, с 3.14 перемещён в основную. Суть его в том, что в оперативной памяти создаётся сжатый раздел подкачки (swap).
...
Можно считать ZSWAP продвинутым вариантом ZRAM

Какая-то ересь написана. ZRAM - это блочное устройство, диск в памяти, со сжатием данных.
ZSWAP - это действительно сжатый кэш для файла подкачки.
Ну, то есть, это совершенно разные вещи.

Да и нет
В том смысле, что zram-generator в составе systemd(по дефолту не ставится, systemd же модульный) имеет из коробки конфиг такой, что он создает блочное устройство в половину рама и размещает там дополнительный своп

╰─❯ swapon -s
Filename				Type		Size		Used		Priority
/dev/zram0                              partition	8163324		0		100
╰─❯ free -m
               total        used        free      shared  buff/cache   available
Mem:           15945        4072        7538         175        4848       11873
Swap:           7971           0        7971

Вот примерно так это выглядит на системе

А уже самому можно в конфиге добавить другие блочные устройства в которые что-то еще отправить(у меня на одном из домашних компов например там /var/lib/apt и /var/cache/apt на двух разных, для ускорения работы апта(а то он меня своей тормознутостью раздражает)

Ну то есть конечно в статье у человека ошибка, но при этом он не сам виноват, он просто не вдавался в подробности

Согласен, последний абзац лишний, следовало сократить цитату. Пока сам изучил вопрос, про цитату-то и забыл. При этом ссылка на статью, откуда я это процитировал весьма полезна. Настолько коротко и по делу, что в случае необходимости установки новой виртуальной машины с Linux, для настройки zram в качестве шпаргалки и чеклиста обращаюсь именно к этой статье.

Но удалить уже не смогу, аккаунт корпоративный;)

Оно практически потеряло смысл сейчас. Сжатие имеет смысл только если ваш процессор по какой-то причине может упаковать данные быстрее, чем их может писать диск. В случае даже довольно старых процессоров и SSD/NVME дисков это уже практически невозможная ситуация. При этом нужно учитывать, что к времени сжатия нужно ещё суммировать время записи 2/3 изначального объёма, то есть времена суммируется. Если диск пишет хотя бы 300..500 мб/с, то уже всё очень сомнительно. Если 800 мб/с, то затея вообще смысла не имеет.

Только если HDD, вот там zswap при правильных настройках даёт заметный эффект.

только если ваш процессор по какой-то причине может упаковать данные быстрее, чем их может писать диск

Легко, lz4.

У вас современный процессор, который умеет паковать со скоростью в несколько сотен мегабайт в секунду, и при этом нет SSD и не хватает ОЗУ? Это максимально странная конфигурация, как так получилось? А если у вас старый процессор, то он жмёт медленнее дешёвого SSD, нужно SSD ставить.

Это дискуссия напрашивает отсылку к маководам на М1 у которых священный swap делает из 8ГБ памяти 16. SSD при этом не страдает.

И вы все таки посмотрите на lz4. У меня zswap так вообще на zstd. Раз область памяти измещается, то скорость упаковки не важна, как распаковки. Но это касается и записи на диск, потому что дальше вопрос: ядро этим занимается асинхронно при упаковке или блокирует всегда. В прочем мне zswap не нравится, так как после очень долгих прочтений я понял, что на уже диск данные ложатся не сжатыми. И с ZRAM тоже проблемы были.

Возвращаясь к вопросу: какой-нибудь фоновый процесс, лучше пусть файлы в кэше будут, чем кусок спящего процесса.

Всевозможные одноплатники с emmc памятью - максимально подходящий для этого вариант. Там и ОЗУ маловато, и диск медленный, и ресурс у него не особо большой. И даже неторопливое сжатие процессором легко окажется выгоднее записи на emmc.

Оно практически потеряло смысл сейчас.

Автор статьи специально оговаривает условия

Для ноутбуков среднего и нижнего ценовых сегментов

А там это уже может иметь смысл, особенно если оперативной памяти действительно сильно не хватает.
Ещё один класс применений это бездисковые станции, или виртуалки, у которых скорость, может быть ещё в порядке, а вот время доступа часто гораздо хуже - а его тоже надо учитывать.

Вот пример, программа выделяет себе кусок памяти с блокировкой страниц (не lazy).

Для какого-нибудь буфера, кэша или вообще просто так (деградация и ожирение софта никуда не делись).
И вот системе стало не хватать памяти, и она хочет выгрузить в подкачку эти "пустые" страницы. Допустим 100 мегабайт:) Без ZSWAP она физически запишет все данные на диск, а если когда понадобятся - то все 100 будет вычитывать.
В случае ZSWAP нолики прекрасно и быстро сожмутся, и в виде десятков байт останутся в памяти, а когда понадобятся - то мгновенно распакуются.

Знаете, я сейчас скажу вещь за которую меня проклянут местные любители некромантии в области железа. Если нетбук или ноутбук не может работать в текущих условиях, то его место на помойке

У меня есть ASUS K53SJ, купленный в 2011 году и он прекрасно может работать(а еще под этот корпус за копейки продают материнки других моделей, а еще можно поставить i7 вместо i3 который я тогда взял). Я вот буквально завтра заберу с почты ему новый радиатор заказанный на Али(у старого где-то нарушилась гермитичность за эти годы и трубки стали хуже отводить тепло). На нем стоит Ubuntu 24.04(да, релиза еще не было, но я много-много лет обновляюсь на ноуте в феврале четного года на грядущий LTS и помогают баг-репортами подготовить релиз, в этот раз смог один баг подтвердить, сейчас его уже исправили)

А еще у меня был нетбук от Асера на Атоме, в котором нельзя было хотя бы до 4 гигов память увеличить и я осознав, что им только гвозди забивать отправил его в утиль. Снял аккум, там не смотря на большой возраст все банки в идеальном состоянии, пойдут во что-нибудь, а сам нетбук на Атоме отправил в утиль, потому что он не может выполнять своих функций

Если ноут не может работать, то не его труп мучать надо, а выкинуть его и купить что-то более работоспособное

С одной стороны вы правы, а с другой - есть множество кейсов, когда человек не хочет (чтобы не поддерживать запланированное устаревание железа и раздувание софта) или не может (разнообразные беженцы и низкооплачиваемые работники) покупать новое железо.
Я бы не стал говорить условному учителю информатики в условной Уганде, что ему нужно компьютеры из класса, подаренного белыми господами волонтёрами 10 лет назад, выкинуть на помойку, потому что в сайты в интернете слишком разжирели для ПК с 4Гб памяти.

Ну если человек верить в запланированное устаревание, то это не ко мне, это к психиатру, как и со всеми теориями заговора

Все же я рассуждаю с точки зрение человека условного здорового

я старые ноутбуки использую как небольшие домашние сервера (с разбитыми экранами, даже). На одном спокойно крутятся docker контейнеры и живут пару сайтов. Другой под хоумасистанс использую, третий под файловое хранилище... Иногда можно давать старому железу второй шанс :)

Я пробовал давать шанс. Но гораздо проще купить копеечную OrangePi которая и пыль собирать не будет, и жрать будет в разы меньше

При этом я же написал, что не против юзать и умеренно старое железо, если оно способно работать, старый ноут как был приличным, так и остается, еще хочу попробовать ему поставить 16 гигов, потому что с ним все странно, по докам 8 максимум, а по форумам кто-то пишет что не вышло, а кто-то что вышло, при чем конкретно про модель которая у меня, а не модели с другими буквами-цифрами. Если 16 взлетит, так он еще и 10 лет прослужит печатной машинкой без проблем

На Атоме да, согласен, 2 Гб - совсем уж тяжко. И тем не менее, с zram 2*1,5 - это уже 3, c XFCE это уже не совсем катастрофа, а для пожилого родственника, для Скайпа и кино в интернете - ещё года 2-3 отпашет без вопросов!

Не получится там десятков байт. Оно жмёт что-то вроде не более чем в три-четыре раза. И распаковка не мгновенная. А упаковка и вовсе. Если посмотреть скорость упаковки на слабых процессорах, то будет весьма неприятный сюрприз. Для бездимковых станций может и имеет смысл, но таки себе, м же т процессов слабый обычно. Оно то на то и выйдет. Я эту шляпу уже 15 лет на всяких сценариях использую, и с этого года от zswap отказался, если не HDD - нет сценария, при котором был бы хоть какой-то выигрыш. В реальности оно позволяло дать +15% памяти, если там есть какие-то редкоиспользуемые процессы. Как раз за счёт сжатия пустых страниц. Лучше всего работало на серверах, которые по какой-то причине были на HDD - там и процессор есть и долгоживущие фоновые задачи, которые выгрузить можно. Но сейчас этот нонсенс. На практике если latency посчитать... Работать с этим просто невозможно даже на "старых ноутбуках". Проще SSD минимальный поставить и на него своп+bcache, либо ОЗУ доставить.

Три-четыре раза - это для нормальных данных. Для совершенно пустого буфера сжатие будет значительно сильнее.

Тем было ограничение на сжатие на уровне zswap. Что-то вроде не более четырех блоков памяти на место одного. Оно же все равно блоками жмёт. Но это очень жарко было, могли что-то и изменить уже.

С разделом такая выборочная фрагментация средствами контроллера уже невозможна

Контроллер ничего не знает про файловую систему, точно так же, как и файловая система ничего не знает о контроллере.

В добавок объясняю: контроллер расфасовывает под логическим уровнем (блоки LBA) как ему удобно, вне зависимости от того куда и как они были записаны. Это как виртуальная память в современных процессорах.

В свою очередь, ZSwap фиксированного объёма не имеет и представляет собой просто динамический кэш дисковой подкачки

grep -R . /sys/module/zswap/parameters
/sys/module/zswap/parameters/max_pool_percent:20
По умолчанию размер пула составляет 20% от всей оперативной памяти.
На системах с маленьким количеством оперативной памяти до 2гб - желателен размер пула 5-15%.
/sys/module/zswap/parameters/accept_threshold_percent:90
(пороговое значение, при котором zswap снова начнет принимать страницы после того, как заполнится)
Рекомендую почитать:
https://docs.kernel.org/admin-guide/mm/zswap.html
https://docs.kernel.org/admin-guide/blockdev/zram.html
https://wiki.archlinux.org/title/Zswap_(Русский)
https://wiki.archlinux.org/title/Zram_(Русский)

grep -R . /sys/module/zswap/parameters

/sys/module/zswap/parameters/max_pool_percent:20

То-то и оно, что max_pool_percent. Скинет данные на диск - и похудеет. Возможно, я не очень точно выразился - zswap не имеет постоянного объёма, хотя верхнее значение - да, зафиксировано.

С интересом прочитал статью. Как раз на днях хотел впервые попробовать настроить zram и zswap. Вот этот момент мне только непонятен: "колонка Priority на скриншоте, число меньше — приоритет выше".

Но на скриншоте у /dev/sda2 он -2, а у /dev/zram он 5. Разве 5 < -2 ?

Да, поторопился. Надо будет поправить

Т.е. (судя по скриншоту) сначала для подкачки задействуется раздел с наибольшим число Priority и далее в порядке убывания? Я правильно понимаю?

Sign up to leave a comment.