Пару недель назад или чуть больше попалась тут статья про то, как вернуть к работе старый компьютер.
Но то ли стиль изложения народу не понравился, то ли еще что — в общем, статью сняли с публикации, а автор явно обиделся. Я думал, он доработает и напишет еще — но что-то не написал.
А зря: были предложены вполне годные вещи, которые я попробовал, и увидел, что это хорошо весьма. Что ж, напишу сам, вдруг кому тоже пригодится.
Почему меня эта тема вообще заинтересовала: у меня, как уже писал раньше, сейчас такой весьма спартанский рабочий компьютер: перепрошитый под 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/zram1mkswap /dev/zram1swapon /dev/zram1swapoff /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=60sysctl vm.page-cluster=2
(не путать с systemctl!)
Чтобы сохранялось при перезагрузках — выбранный вариант прописать в /etc/sysctl.conf
Вот, как-то так. А теперь о результатах:
После применения этих инструментов на своем компьютере — могу сказать, что стало лучше.
Не так быстро забивается память, можно понаоткрывать несколько прожорливых сайтов сразу, и снова, как раньше, в браузере висит куча незакрытых табов.
Да, вредная привычка, есть такое.
Так что автору той статьи могу сказать спасибо за идею, ну и меньше обращать внимания, кому что не нравится.
ссылка на оригинал статьи https://habr.com/ru/articles/1038808/