Пару недель назад или чуть больше попалась тут статья про то, как вернуть к работе старый компьютер.
Но то ли стиль изложения народу не понравился, то ли еще что - в общем, статью сняли с публикации, а автор явно обиделся. Я думал, он доработает и напишет еще - но что-то не написал.
А зря: были предложены вполне годные вещи, которые я попробовал, и увидел, что это хорошо весьма. Что ж, напишу сам, вдруг кому тоже пригодится.
Почему меня эта тема вообще заинтересовала: у меня, как уже писал раньше, сейчас такой весьма спартанский рабочий компьютер: перепрошитый под Debian TV-box, процессор ARM, питание всего 5 вольт от USB-зарядки.
Начиналось как прикольный эксперимент - а потом понравилось: не гудит, не шумит, электричества не жрёт, места почти не занимает, вопреки ожиданиям работает вполне неплохо.
Единственный минус - памяти всего 4 гигабайта, и увеличить ее физически нельзя.
Причем, для работы-то вполне достаточно, а вот браузер, зараза такая, любит покушать, точнее пожрать.
Не сам браузер - а некоторые сайты, чуть более чем полностью набитые всякими свистелками и анимацией (лучи радости создателям модных современных сайтов с многопоточными скриптами и HD-иконками, типа "img1920х1025.jpg style='width:100px'").
Соответственно, если запущены рабочие программы, и тут повезет открыть такой сайт - начинаются тормозааа, главное успеть его закрыть, пока всю память не выжрал.
Как уже говорилось, память физически нерасширяема. Можно добавить своп-файл - но жалко места, которое будет занято всегда, хотя использовано будет только изредка.
И тут - сразу два решения, которые могут помочь с этой проблемой!
Ну, для начала - что такое своп-файл?
На пальцах - место в памяти выдается программам, но не всё оно постоянно используется, какие-то участки могут быть просто заняты и ждать обращения к ним - так вот ОС умеет страницы памяти с неактивными данными сохранять на диск.
Когда-то наличие "свопа" было просто обязательным, потом память подешевела и ее стало много (гигабайт, или даже два!) - от свопа начали отказываться, потому что запись и чтение диска тормозило работу, потом спохватились программисты и забили лишнюю память, и своп снова понадобился, вот как в моем случае.
Но этот файл как правило занимает место на диске, или иногда целый раздел.
А когда место ограничено - его становится жалко (да и запись, хоть и стала быстрее - но всё равно лишнее торможение не нужно).
Так вот, первое решение - можно разместить своп-файл в самой памяти.
Смысл в том, чтобы писать в него данные в сжатом виде: получается достаточно быстро, поскольку это всё в памяти, и в то же время память экономится, поскольку неактивные страницы сжимаются, и сжимаются неплохо (какой-нибудь огромный буфер под данные, забитый 0x00,0x00,...). Скинули в своп 100 мегабайт - заняли 50-40-10, остальное - свободно.
Называется это zram, и устанавливается примерно так:
apt install zram-tools
Настройки хранятся в /etc/default/zramswap:
ALGO - алгоритм сжатия, PERCENT или SIZE - сколько выделяем под своп, и PRIORITY - чтобы в первую очередь использовать именно этот своп, раньше, чем своп на диск.
Потом запускаем:
zramswap start
И вот оно: появился своп и место в памяти.
Если прописать это куда-нибудь в /etc/rc.local - будет запускаться при перезагрузке.
Можно запускать вручную - будет выглядеть примерно так:
zramctl -f --size 1024M -a lz4 /dev/zram1 mkswap /dev/zram1 swapon /dev/zram1 swapoff /dev/zram1
Разумеется, это не панацея, в конце концов сам своп тоже место занимает, и рано или поздно всё хорошее заканчивается, и памяти снова нет...
Но есть второй инструмент: динамический своп swapspace.
В чем тут смысл?
Процесс отслеживает свободную память, если ее достаточно много - своп-файл на диске не нужен. Ничего никуда не пишется, и место зря не пропадает.
Но если свободной памяти стало как-то маловато - автоматически создается и подключается своп-файл, есть куда выгружать страницы.
Опять заканчивается - создается еще один файл, и так далее.
Прожорливая программа завершилась, память освободилась - ненужный своп-файл удаляется, ничего больше не тормозит работу.
Установка:
apt install swapspace
Настройки - в /etc/swapspace.conf
Там указывается рабочий каталог, пороги срабатывания для создания и удаления файлов.
Запуск:
/etc/init.d/swapspace start
Я не использую systemd по ряду причин, поэтому вот так.
Можно просто вызвать команду из /etc/rc.local, можно создать скрипты:
update-rc.d swapspace defaults
Эта команда создает симлинки в каталогах /etc/rcX.d для автоматического запуска - всё, как и работало до systemd.
Ну и немного тюнинга:
Есть такие параметры ядра, vm.swappiness и vm.page-cluster.
Первый отвечает за то, насколько "злее" ОС будет пытаться сбросить страницы в своп: чем больше - тем злее, от 0 до 200.
С одной стороны, его надо бы поставить поменьше, чтобы реже лазить в медленный HDD, или реже портить записью SSD, с другой стороны - можно поставить побольше, чтобы активнее использовать компрессию zram.
Второй говорит о том, сколько страниц за раз (2^X) читать потом обратно из свопа.
С одной стороны - "оптом дешевле", т.е. быстрее, и можно поставить побольше, с другой стороны - зачем забивать дефицитную память лишним?
В общем, надо пробовать и смотреть что получается.
Пробуется это так:
sysctl vm.swappiness=60 sysctl vm.page-cluster=2
(не путать с systemctl!)
Чтобы сохранялось при перезагрузках - выбранный вариант прописать в /etc/sysctl.conf
Вот, как-то так. А теперь о результатах:
После применения этих инструментов на своем компьютере - могу сказать, что стало лучше.
Не так быстро забивается память, можно понаоткрывать несколько прожорливых сайтов сразу, и снова, как раньше, в браузере висит куча незакрытых табов.
Да, вредная привычка, есть такое.
Так что автору той статьи могу сказать спасибо за идею, ну и меньше обращать внимания, кому что не нравится.
Комментарии (19)

Neo8
24.05.2026 22:59"Так вот, первое решение - можно разместить своп-файл в самой памяти " - то есть если памяти мало, мы туда ещё своп вобьём? А памяти не станет от такого ещё меньше - то есть эффект будет противоположный ожидаемому?

JBFW Автор
24.05.2026 22:59Вот как раз об этом писал: конечно, он занимает место в памяти - но как правило память не работает все 100%, там висит куча страниц, которые программы запросили, получили, но в данный момент не используют - и вот они-то пакуются компактно в уголок. Страницы памяти, если что, блоки.
А когда уже и там места нет - тогда на диск, хорошо но медленно...

serp2002
24.05.2026 22:59zram интересный инструмент, возможно где и пригодится, а вот swapspace я бы не стал ставить т.к. сложно спрогнозировать как оно будет работать.
Во первых зачем удалять своп файл? Что бы освободить место? Т.е. вы это место чем то другим займете? Но тогда автоматом свопфайл не получится создать.

JBFW Автор
24.05.2026 22:59Верно, тогда не получится.
Но тут вопрос в другом: дисковый своп вообще штука довольно тормозная, и если система начинает постоянно туда писать и читать - с одной стороны, она не помрет сразу, а с другой - вы это явно заметите, сделаете выводы и перестанете ее грузить - и место освободится.
Что-то типа колеса-докатки в машине: незаменимо в экстренных случаях, но не мешается в 99% времени. Как-то так.
А занимать место можно всякими временными файлами, кешем, распакованными архивами и прочим.

YMA
24.05.2026 22:59zram интересный инструмент, возможно где и пригодится
Самое забавное, если у вас смарт или планшет на андроиде, то вы с высокой вероятностью пользуетесь zram постоянно.
Когда пришлось достать из сундука древний планшет с 4GB оперативки - я подумал о том, что надо бы активировать zram - а опаньки, он там уже используется. :)
PS: и в iPhone то же самое - Почему iPhone хватает 4 ГБ ОЗУ ( https://habr.com/ru/companies/droider/articles/514158/ )

MrBotikkk
24.05.2026 22:59Обсуждалось неоднократно: https://www.google.com/search?q=zram+habr
https://wiki.archlinux.org/title/Zram_(Русский) en
Если в используемом вами ядре по умолчанию включен zswap, его стоит отключить, чтобы он не работал как кэш подкачки перед zram.https://wiki.gentoo.org/wiki/Zram Примеры под OpenRC и systemd

xotkot
24.05.2026 22:59Ну и немного тюнинга:
Есть такие параметры ядра, vm.swappiness и vm.page-cluster.Первый отвечает за то, насколько "злее" ОС будет пытаться сбросить страницы в своп: чем больше - тем злее, от 0 до 200.
С одной стороны, его надо бы поставить поменьше, чтобы реже лазить в медленный HDD, или реже портить записью SSD, с другой стороны - можно поставить побольше, чтобы активнее использовать компрессию zram.а не нужно использовать своп в памяти(
zram) и своп на диске(swap,zswap) одновременно и проблем не будет.По поводу того какое выбрать значения для параметра
vm.swappinessто на kernel.org есть информация от которой можно уже отталкиваться:For in-memory swap, like zram or zswap, as well as hybrid setups that have swap on faster devices than the filesystem, values beyond 100 can be considered. For example, if the random IO against the swap device is on average 2x faster than IO from the filesystem, swappiness should be 133 (x + 2x = 200, 2x = 133.33).
Кстати, недавно накатил armbian(Ubuntu 26.04) на старый девайс и там по умолчанию используется(на самом деле нет) значение 100, по крайней мере в файле
/etc/sysctl.confуказанно именно это значение, а по фактуsysctl vm.swappinessвыдавал дефолтные 60. Походу там не учли повальную "системдизацию" которая предписывает согласноman sysctl.confчто:This man page describes the configuration files for procps sysctl. If you are us‐ ing systemd-sysctl(8), refer to sysctl.d(5) and note that it won’t use the file /etc/sysctl.conf.
где отправляют смотреть
man sysctl.dSYNOPSIS
/etc/sysctl.d/*.conf
/run/sysctl.d/*.conf
/usr/local/lib/sysctl.d/*.conf
/usr/lib/sysctl.d/*.conf
...
DESCRIPTION
At boot, systemd-sysctl.service(8) reads configuration files from the above directories to config‐ ure sysctl(8) kernel parameters.
то есть, используя
systemdво все поля нужно помнить что файл/etc/sysctl.confтеперь не учитывается и нужно прописать параметры ядра, например в том же/etc/sysctl.d/*.confчто в принципе я и сделал:# cat /etc/sysctl.d/zram.conf vm.swappiness=100 # sysctl -p /etc/sysctl.d/zram.conf vm.swappiness = 100 # sysctl vm.swappiness vm.swappiness = 100
JBFW Автор
24.05.2026 22:59А, ну вот ещё один камень в systemd )
Идея то была хорошая, но вот то во что оно превратилось...

pda0
24.05.2026 22:59Статье место в 90х. У вас настолько мало диска, что вам жалко постоянный своп иметь? Но вы не боитесь, что в момент когда он понадобится свободного места не будет? Или не найдётся непрерывного участка? И да, там верно пишут, SRAM устарел, а zswap с 7.0 ядра даже сжатые страницы писать научился.

MrBotikkk
24.05.2026 22:59Почему меня эта тема вообще заинтересовала: у меня, как уже писал раньше, сейчас такой весьма спартанский рабочий компьютер: перепрошитый под Debian TV-box, процессор ARM, питание всего 5 вольт от USB-зарядки.
Там EMCC или MicroSD с очень несвежим ядром armbian

JBFW Автор
24.05.2026 22:59Там именно что еммс, микросхема на 32 гигабайта.
Поэтому мне жалко диска )
Кстати, ядро там в общем-то 6.7.12, не такое уж доисторическое - но все равно писать на еммс своп без необходимости - такое себе...

xotkot
24.05.2026 22:59а zswap с 7.0 ядра даже сжатые страницы писать научился.
эм, а поподробнее можно ?
kt97679
Можно попросить вас уточнить какой дистрибутив линукса вы используете?
JBFW Автор
Debian, если точнее - отдельно ядро от Armbian (главное чтобы к железу подошло) и минимальный образ ОС, сделанный через debootstrap.
Все остальное ставиллсь из пакетов вручную.
То есть, это как бы не совсем дистрибутив.
kt97679
Как вам удалось выкорчевать из дебиана systemd?
JBFW Автор
Легко )
Точных шагов не помню навскидку, но логика там такая:
Есть пакет установки sysv-скриптов - при его инсталляции удаляется systemd.
После этого на его установку в apt ставится блок. Если какой-то софт (многие) просит установить systemd - в абсолютном большинстве случаев запрос просто игнорируется, и все работает. Там могут идти в пакете юниты, им для работы нужен systemd, поэтому просит - но по факту он там не нужен.
Попадалось что-то, что вот прямо требовало и без него само не поставилось - но это было что-то такое нужное, что я даже не помню как называлось.
MrBotikkk
Пакет sysvinit-core. System-V - тормоз. Надо было ставить finit(Debian):
“Finit is a simple alternative to SysV init and systemd, reverse engineered from the EeePC fastinit. Focus is on small and embedded systems”Свежак - Finit v4.17(released this last month) HowTo: Finit on Debian GNU/Linux. Сайт Finit ProjectJBFW Автор
Интересно, посмотрю
А чем именно тот - тормоз? Строго говоря init может быть вообще скриптом на баш, который запускает по очереди все что положено, а потом ничего не делает.
Я так тоже запускал, там тормозить тогда просто негде...