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

Почему меня эта тема вообще заинтересовала: у меня, как уже писал раньше, сейчас такой весьма спартанский рабочий компьютер: перепрошитый под 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)


  1. kt97679
    24.05.2026 22:59

    Можно попросить вас уточнить какой дистрибутив линукса вы используете?


    1. JBFW Автор
      24.05.2026 22:59

      Debian, если точнее - отдельно ядро от Armbian (главное чтобы к железу подошло) и минимальный образ ОС, сделанный через debootstrap.

      Все остальное ставиллсь из пакетов вручную.

      То есть, это как бы не совсем дистрибутив.


      1. kt97679
        24.05.2026 22:59

        Как вам удалось выкорчевать из дебиана systemd?


        1. JBFW Автор
          24.05.2026 22:59

          Легко )

          Точных шагов не помню навскидку, но логика там такая:

          Есть пакет установки sysv-скриптов - при его инсталляции удаляется systemd.

          После этого на его установку в apt ставится блок. Если какой-то софт (многие) просит установить systemd - в абсолютном большинстве случаев запрос просто игнорируется, и все работает. Там могут идти в пакете юниты, им для работы нужен systemd, поэтому просит - но по факту он там не нужен.

          Попадалось что-то, что вот прямо требовало и без него само не поставилось - но это было что-то такое нужное, что я даже не помню как называлось.


          1. MrBotikkk
            24.05.2026 22:59

            Пакет 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 Project


            1. JBFW Автор
              24.05.2026 22:59

              Интересно, посмотрю

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

              Я так тоже запускал, там тормозить тогда просто негде...


  1. Neo8
    24.05.2026 22:59

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


    1. JBFW Автор
      24.05.2026 22:59

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

      А когда уже и там места нет - тогда на диск, хорошо но медленно...


  1. serp2002
    24.05.2026 22:59

    zram интересный инструмент, возможно где и пригодится, а вот swapspace я бы не стал ставить т.к. сложно спрогнозировать как оно будет работать.

    Во первых зачем удалять своп файл? Что бы освободить место? Т.е. вы это место чем то другим займете? Но тогда автоматом свопфайл не получится создать.


    1. JBFW Автор
      24.05.2026 22:59

      Верно, тогда не получится.

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

      Что-то типа колеса-докатки в машине: незаменимо в экстренных случаях, но не мешается в 99% времени. Как-то так.

      А занимать место можно всякими временными файлами, кешем, распакованными архивами и прочим.


    1. YMA
      24.05.2026 22:59

      zram интересный инструмент, возможно где и пригодится

      Самое забавное, если у вас смарт или планшет на андроиде, то вы с высокой вероятностью пользуетесь zram постоянно.

      Когда пришлось достать из сундука древний планшет с 4GB оперативки - я подумал о том, что надо бы активировать zram - а опаньки, он там уже используется. :)

      PS: и в iPhone то же самое - Почему iPhone хватает 4 ГБ ОЗУ ( https://habr.com/ru/companies/droider/articles/514158/ )


  1. MrBotikkk
    24.05.2026 22:59


  1. 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.d

    SYNOPSIS

    /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


    1. JBFW Автор
      24.05.2026 22:59

      А, ну вот ещё один камень в systemd )

      Идея то была хорошая, но вот то во что оно превратилось...


  1. pda0
    24.05.2026 22:59

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


    1. MrBotikkk
      24.05.2026 22:59

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

      Там EMCC или MicroSD с очень несвежим ядром armbian


      1. JBFW Автор
        24.05.2026 22:59

        Там именно что еммс, микросхема на 32 гигабайта.

        Поэтому мне жалко диска )

        Кстати, ядро там в общем-то 6.7.12, не такое уж доисторическое - но все равно писать на еммс своп без необходимости - такое себе...


    1. JBFW Автор
      24.05.2026 22:59

      32 гига на все. Остальное - по сети.

      Вы представляете своп по сети? )


    1. xotkot
      24.05.2026 22:59

      а zswap с 7.0 ядра даже сжатые страницы писать научился.

      эм, а поподробнее можно ?