Пару недель назад или чуть больше попалась тут статья про то, как вернуть к работе старый компьютер.
Но то ли стиль изложения народу не понравился, то ли еще что - в общем, статью сняли с публикации, а автор явно обиделся. Я думал, он доработает и напишет еще - но что-то не написал.
А зря: были предложены вполне годные вещи, которые я попробовал, и увидел, что это хорошо весьма. Что ж, напишу сам, вдруг кому тоже пригодится.
Почему меня эта тема вообще заинтересовала: у меня, как уже писал раньше, сейчас такой весьма спартанский рабочий компьютер: перепрошитый под 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
Вот, как-то так. А теперь о результатах:
После применения этих инструментов на своем компьютере - могу сказать, что стало лучше.
Не так быстро забивается память, можно понаоткрывать несколько прожорливых сайтов сразу, и снова, как раньше, в браузере висит куча незакрытых табов.
Да, вредная привычка, есть такое.
Так что автору той статьи могу сказать спасибо за идею, ну и меньше обращать внимания, кому что не нравится.




















