В предыдущей статье я рассмотрел вариант использования ZRAM устройств в качестве разделов подкачки. В этой статье речь пойдёт о родственной технологии ZSWAP, которая может быть эффективной заменой ZRAM. Трудно сказать, что лучше. Каждый пользователь должен сделать собственный выбор. Итак, начнем.
Давайте разберемся с отличиями ZRAM и ZSWAP. Первый - это виртуальный диск в оперативной памяти, который может использоваться в различных целях. В предыдущей статье был приведён пример использования в качестве раздела подкачки. ZSWAP не является устройством. Это целая отдельная технология, встроенная в ядро Linux. Её основной задачей является оптимизация работы со swap хранилищем. То есть, swap-раздел (или файл) должны быть подключены как обычно. Когда оперативная память заканчивается и система определяет страницы памяти, которые должны быть перемещены в swap-хранилище, ZSWAP производит перехват таких страниц и проверяет, поддаются ли они эффективному сжатию. Если это так, ZSWAP размещает такие страницы снова в оперативной памяти, но уже в сжатом виде. Если страница не поддаётся сжатию или оперативной памяти осталось совсем мало, только тогда страницы начинают попадать в swap-хранилище. То есть, простыми словами, основная задача ZSWAP состоит в том, что бы максимально отсрочить момент попадания страниц памяти в swap-хранилище.
За границу начала работы механизма SWAP в ОС Linux отвечает параметр swappiness. Значение по умолчанию = 60. Проверить ваше значение можно выполнив команду:
cat /proc/sys/vm/swappiness
Для чего нужен этот параметр? На самом деле довольно сложно объяснить это в двух словах. Желающие могут почитать статьи на эту тему в интернете, например вот эту статью на Хабре (статья не моя и это не реклама). В двух же словах очень приблизительно можно сказать так: параметр говорит о том, на сколько агрессивно ядро будет сбрасывать страницы памяти в swap при нехватке памяти. Значение 60 говорит о том, что swap начнёт работать если память используется более чем на 60%. Но повторю, это очень и очень упрощённо.
Вернёмся к механизму ZSWAP. Как было сказано ранее, он перехватывает страницы, которые система отправила в swap-хранилище и сжав их, опять размещает в оперативной памяти. Таким образом получается вполне логичным поэкспериментировать с уменьшением параметра swappiness.
Итак, с теорией покончено, переходим к практической части. Первым делом проверим состояние ZSWAP в вашей системе командой:
sudo dmesg | grep zswap
должны увидеть нечто подобное:
Отлично. Теперь нужно добавить настройки для загрузчика. В простейшем случае можно воспользоваться утилитой grub-customizer. Установим его командой:
sudo apt install grub-customizer
Теперь запустим его и перейдём на вкладку "Основные настройки". Там в правом нижнем углу нажмём кнопку "Расширенные настройки". Нас интересует параметр с именем GRUB_CMDLINE_LINUX_DEFAULT
Дважды кликнем мышкой на значение параметра и через пробел добавим к имеющимся значениям следующее:
zswap.enabled=1
На этом всё. Суть нашего действия свелась к тому, что мы добавили параметр загрузки ядра, который будет добавляться ко всем установленным ядрам автоматически. Нажимаем кнопку "Закрыть" и "Сохранить". Теперь нужно выполнить перезагрузку системы. Проверить состояние ZSWAP можно командой:
cat /sys/module/zswap/parameters/enabled
Если ZSWAP активирован, Вы увидите букву "Y". Также Вы можете просмотреть другие файлы, находящиеся в директории /sys/module/zswap/parameters/, например в файле compressor вы увидите применённый в данный момент алгоритм сжатия (по умолчанию lzo). Теперь можно приступить к экспериментам. Проверить состояние памяти и подкачки можно командой:
free -m
Также не лишним будет установить приложение htop (команда установки sudo apt install htop).
И вот теперь можно поэкспериментировать с параметром swappiness. Для временного изменения параметра (старый будет восстановлен после перезагрузки) воспользуйтесь командой:
sudo sysctl vm.swappiness=<ваше новое значение>
Когда Вы закончите эксперименты, Вам нужно будет сделать полученное значение постоянным (устанавливающимся после перезагрузки системы). Для этого откройте файл своим любимым текстовым редактором с правами администратора (команда sudo) и замените значение vm.swappiness= на собственное. Если в файле нет такого параметра - просто допишите строку в конец файла. Как я уже говорил ранее, мне нравится файловый менеджер Midnight Commander. Вот пример команды открытия файла конфигурации используя текстовый редактор, встроенный в Midnight Commander:
sudo mcedit /etc/sysctl.conf
Но Вы можете предпочесть что-то вроде этого:
gksudo gedit /etc/sysctl.conf
Ну что, файл отредактирован, значение vm.swappiness установлено, ZSWAP активирован, перегружаем систему и наслаждаемся её новыми возможностями.
На этом хочу закончить статью. В следующих материалах рассмотрим другие эффективные технологии мира открытого ПО. Пишите вопросы, отзывы и предложения в комментариях.
Спасибо за внимание.
Следующая статья на тему ускорения дисковых операций ЗДЕСЬ