Найти тему
Linux&Python

Linux: ускоряем систему 2

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

-2

Отлично. Теперь нужно добавить настройки для загрузчика. В простейшем случае можно воспользоваться утилитой grub-customizer. Установим его командой:
sudo apt install grub-customizer

Теперь запустим его и перейдём на вкладку "Основные настройки". Там в правом нижнем углу нажмём кнопку "Расширенные настройки". Нас интересует параметр с именем GRUB_CMDLINE_LINUX_DEFAULT

-3

Дважды кликнем мышкой на значение параметра и через пробел добавим к имеющимся значениям следующее:

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).

Пример вывода htop
Пример вывода htop

И вот теперь можно поэкспериментировать с параметром swappiness. Для временного изменения параметра (старый будет восстановлен после перезагрузки) воспользуйтесь командой:

sudo sysctl vm.swappiness=<ваше новое значение>

Применение команды установки параметра swappiness и проверка результата
Применение команды установки параметра swappiness и проверка результата

Когда Вы закончите эксперименты, Вам нужно будет сделать полученное значение постоянным (устанавливающимся после перезагрузки системы). Для этого откройте файл своим любимым текстовым редактором с правами администратора (команда sudo) и замените значение vm.swappiness= на собственное. Если в файле нет такого параметра - просто допишите строку в конец файла. Как я уже говорил ранее, мне нравится файловый менеджер Midnight Commander. Вот пример команды открытия файла конфигурации используя текстовый редактор, встроенный в Midnight Commander:

sudo mcedit /etc/sysctl.conf

Но Вы можете предпочесть что-то вроде этого:

gksudo gedit /etc/sysctl.conf

Ну что, файл отредактирован, значение vm.swappiness установлено, ZSWAP активирован, перегружаем систему и наслаждаемся её новыми возможностями.

На этом хочу закончить статью. В следующих материалах рассмотрим другие эффективные технологии мира открытого ПО. Пишите вопросы, отзывы и предложения в комментариях.

Спасибо за внимание.

Следующая статья на тему ускорения дисковых операций ЗДЕСЬ