Используйте Zswap для улучшения производительности на Linux ПК с небольшим объемом оперативной памяти

Давайте посмотрим правде в глаза, некоторые из нас не обновляют свой компьютер так часто. Или, по крайней мере, как пользователи Linux, мы любим переоснащать наши старые ноутбуки/компьютеры. Многие дистрибутивы работают вполне комфортно на системах с небольшим объемом оперативной памяти (ОЗУ). Однако браузеры не так снисходительны, требуя все больше и больше памяти по мере развития Интернета.
Хотя система с рабочей средой LXDE может потреблять всего 150 МБ оперативной памяти после загрузки, Chromium, Chrome или Firefox быстро поглощают сотни мегабайт, а иногда и несколько гигабайт ОЗУ, когда мы открываем несколько вкладок.
Вот тут и начинается! Жесткий диск начинает издавать тот самый звук. Музыка начинает прерываться. Когда мы переключаемся на другое приложение, оно появляется на экране только через несколько десятков секунд. Даже курсор мыши может начать задерживаться. Это эффект перегрузки диска.
Что такое перегрузка диска?
Сначала нам нужно понять своп. Когда у нас заканчивается свободная ОЗУ, данные приложений, к которым операционная система не обращалась долгое время, перемещаются в область свопа. Обычно это происходит на физическом носителе. Таким образом, операционная система может освободить часть памяти, которая в данный момент нужна программе. Таким образом, вкладка в нашем браузере, к которой мы не обращались за последний час, может быть перемещена на жесткий диск. Теперь графический редактор GIMP может работать. Когда мы закрываем его и возвращаемся к старой вкладке, операционная система возвращает ее в память (считывает с диска и копирует обратно в оперативную память).

Этот механизм работает хорошо, когда свопится небольшое количество данных. Но когда, скажем, доступно всего 2 ГБ ОЗУ, а все открытые программы требуют 4 ГБ, операционная система вынуждена постоянно обмениваться данными. Перемещение данных из памяти на диск, с диска в память и обратно постоянно — это очень медленно, особенно с жесткими дисками. В такой ситуации устройство хранения не может выполнить запросы достаточно быстро. Короче говоря, когда происходит перегрузка диска, все становится очень медленно.
SSD-диски отлично подходят для свопа
Существует миф, который по-прежнему циркулирует в Интернете: «Никогда не настраивайте своп на SSD. Это убьет ваше устройство!» Это было правдой несколько лет назад, но теперь это не так. На самом деле, настройка свопа на SSD-диске приводит к отличным результатам. Если компьютер оснащен устройством SSD с хорошей производительностью случайного чтения/записи (как минимум 300 МБ), настройте раздел свопа на нем и проигнорируйте остальную часть этой статьи. Когда операционной системе нужно обменять 1 ГБ данных, это займет менее пяти секунд, в то время как на жестком диске это займет более минуты.
Как значительно снизить перегрузку диска на Linux

К счастью, большинство данных, хранящихся в ОЗУ, очень хорошо сжимаются. Это означает, что если мы возьмем 200 МБ данных, хранящихся в памяти, и сожмем их, мы сможем уменьшить размер до 100 МБ. Соответственно, это означает, что системе придется записывать гораздо меньше данных на диск при обмене.
Представьте, что вместо того, чтобы ждать тридцать секунд, чтобы переключиться на программу, вам придется ждать пятнадцать. Это ощутимое улучшение. Но, на самом деле, ускорение гораздо значительно (возможно, придется ждать менее десяти секунд), потому что инструмент, который мы будем использовать, более мудрый, чем это. Он интеллектуально отправляет на диск только те фрагменты, которые нельзя сжать, сохраняя остальное в резервированной части памяти. Если вы хотите узнать больше о его внутренностях, зайдите на официальную страницу ядра Linux о zswap.
Простая версия преимуществ, которые мы получаем, используя zswap, в том, что вместо ужасных замедлений, когда у нас заканчивается память, мы получаем терпимые, легкие замедления, которые длятся секунды вместо десятков секунд или даже минут.
Как включить zswap на дистрибутивах на базе Debian (Ubuntu, Linux Mint и т. д.)
Откройте терминальное приложение и выполните эту команду, чтобы отредактировать файл конфигурации шаблона загрузчика Grub:
sudoedit /etc/default/grub
С помощью клавиш курсора перейдите к строке, которая начинается с «GRUB_CMDLINE_LINUX_DEFAULT». Внутри кавычек добавьте следующий текст:
zswap.enabled=1
Например, строка, которая была GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" станет GRUB_CMDLINE_LINUX_DEFAULT="quiet splash zswap.enabled=1".
Чтобы сохранить файл, нажмите Ctrl + X, затем «y» и потом Enter.
Сгенерируйте новые файлы конфигурации Grub в соответствии с шаблоном, который мы редактировали ранее:
sudo update-grub
Перезагрузите компьютер, и модуль zswap будет включен автоматически.
Как включить zswap на Fedora и OpenSUSE
Процедура здесь похожа на ту, что в предыдущем разделе, но с небольшими изменениями. Отредактируйте файл конфигурации шаблона Grub.
sudoedit /etc/default/grubДобавьте zswap.enabled=1 внутри кавычек в строке, начинающейся с GRUB_CMDLINE_LINUX.

Нажмите Ctrl + X, затем «y» и Enter, чтобы сохранить файл.
В зависимости от того, загружается ли ваш компьютер из системы BIOS или UEFI, файл конфигурации Grub генерируется в разном пути. Чтобы узнать, где он в настоящее время находится, введите следующую команду:
sudofind/boot/-name grub.cfg
Используйте путь, который выводится здесь, в следующей команде. Например, в нашем случае найденный путь был «/boot/grub2/grub.cfg», поэтому мы добавим его в конце следующей команды после «-o»:
sudo grub2-mkconfig -o/boot/grub2/grub.cfgПерезагрузите компьютер. После перезагрузки проверьте, активен ли модуль:
cat/sys/module/zswap/parameters/enabledЕсли вывод «Y», значит, модуль работает правильно.
Как включить zswap на Arch Linux
Установите пакет systemd-swap:
sudo pacman -Sy systemd-swap
Заставьте этот пакет делать свое дело во время загрузки:
sudo systemctl enable systemd-swapЗапустите его сейчас, без перезагрузки:
sudo systemctl start systemd-swapЧтобы проверить, сработало ли все как ожидалось, подтвердите, что модуль zswap включен:
cat/sys/module/zswap/parameters/enabled
Если вывод «Y», это означает, что модуль активен.
Как включить zswap на разных дистрибутивах
В общем, включить zswap при загрузке так же просто, как добавить zswap.enabled=1 к параметрам вашего ядра. Большинство дистрибутивов по умолчанию используют Grub2 в качестве загрузчика. Если вы используете другой загрузчик, найдите файл конфигурации, в котором хранятся параметры ядра для передачи во время загрузки, и добавьте zswap.enabled=1 в качестве дополнительного параметра.
Другой параметр, с которым вы можете поэкспериментировать, чтобы узнать, улучшает ли это производительность в вашем конкретном случае, — это zswap.max_pool_percent=20. Вы можете отрегулировать его, изменив число в конце: например, zswap.max_pool_percent=50.
Добавьте его к тем же параметрам ядра, где вы добавляете zswap.enabled=1. Рекомендуется не превышать 50%, так как большее значение может негативно повлиять на системы с небольшим объемом ОЗУ.
Заключение
Если вы часто сталкивались с нехваткой ОЗУ на вашей старой системе и испытывали раздражающие эффекты перегрузки диска, вы сразу заметите и оцените разницу с этого момента. Вместо ужасных замедлений вы будете испытывать легкую, временную задержку, которая длится всего несколько секунд (вместо минут), когда операционной системе приходится обменивать большое количество данных на диск. Вы сможете продолжать работу в ситуациях, когда ранее не могли использовать компьютер в течение времени, необходимого для обмена.