Как использовать Zswap и Zram в Linux
В этой статье разбираем продвинутые техники управления swap в Linux с упором на механизмы сжатого swap: zswap и zram.
Эти технологии сжимают данные, которые попадают в swap, уменьшая количество операций ввода-вывода. В результате система может работать отзывчивее (особенно если у вас немного оперативной памяти или используется медленное хранилище).
Механизмы сжатого swap: краткий обзор
Что такое Zswap?
Zswap - это возможность ядра, которая реализует сжатый write-back кэш для swap-страниц. Когда он включён, страницы, которые обычно выгружались бы на диск, сначала сжимаются и сохраняются в оперативной памяти. Это снижает количество операций ввода-вывода и в ряде случаев даёт прирост производительности.
Что такое Zram?
Zram (раньше назывался compcache) создаёт сжатое блочное устройство прямо в RAM. Его можно использовать как swap-раздел или как обычный RAM-диск. За счёт сжатия данных система может держать больше страниц в памяти - фактически увеличивая доступный объём ОЗУ.
Зачем вообще использовать Zswap или Zram?
- Меньше дискового I/O
Сжатие swap-данных снижает количество обращений к диску. На системах с медленным хранилищем это может ощутимо ускорить работу.
- Лучшая отзывчивость
Из-за меньшей задержки при работе со swap приложения могут работать быстрее и «плавнее».
- Меньше износа SSD
Чем меньше записей на SSD, тем дольше он прослужит.
- Более эффективное использование памяти
Сжатый swap позволяет уместить больше данных в RAM. Для систем с небольшим объёмом оперативной памяти это особенно полезно.
Настройка Zswap
Проверяем, поддерживает ли ядро Zswap
Чтобы убедиться, что ваше ядро собрано с поддержкой zswap, выполните:
grep -i zswap /boot/config-$(uname -r)
В выводе должна быть строка:
CONFIG_ZSWAP=y
Включаем Zswap при загрузке
Чтобы активировать zswap на этапе загрузки, добавьте параметр ядра zswap.enabled=1.
Если используете GRUB2, откройте /etc/default/grub и отредактируйте строку GRUB_CMDLINE_LINUX_DEFAULT:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash zswap.enabled=1"
После этого обновите конфигурацию GRUB:
sudo update-grub
Дополнительные параметры Zswap (по желанию)
При необходимости можно настроить дополнительные параметры:
zswap.max_pool_percent- максимальный процент RAM, который может использовать zswap.zswap.compressor- алгоритм сжатия (например,lz4,zstd).zswap.zpool- аллокатор памяти (например,zbud,z3fold).
Чтобы задать их, добавьте параметры в строку команд ядра:
zswap.enabled=1 zswap.max_pool_percent=20 zswap.compressor=lz4 zswap.zpool=z3fold
Перезагрузка и проверка
Перезагрузите систему:
sudo reboot
После загрузки проверьте, что zswap инициализировался:
sudo dmesg | grep -i zswap
В выводе должна появиться строка, указывающая на успешную инициализацию zswap.
Настройка Zram
Установка zram-tools
В системах на базе Debian установите пакет zram-tools:
sudo apt install zram-tools
Настройка Zram
Откройте конфигурационный файл:
sudo nano /etc/default/zramswap
Там можно изменить основные параметры:
ALGO- алгоритм сжатия (например,lz4,zstd)PERCENTAGE- процент RAM, который будет выделен под zramPRIORITY- приоритет swap
Пример конфигурации:
ALGO=lz4 PERCENTAGE=50 PRIORITY=100
Запуск Zram swap
Чтобы включить и запустить zram:
sudo systemctl enable zramswap.service sudo systemctl start zramswap.service
Проверяем, что Zram работает
Посмотреть активные swap-устройства можно так:
sudo swapon --show
В списке должен появиться /dev/zram0.
Комбинирование Zswap и Zram
Zswap и zram могут работать по отдельности, но их одновременное использование требует аккуратной настройки. Включать оба механизма для swap обычно не рекомендуется: конфигурация усложняется, а поведение системы может стать менее предсказуемым с точки зрения производительности.
Если всё же решите использовать их вместе, настройте zswap так, чтобы он сначала пытался сжимать страницы в RAM, и только затем задействовался zram или дисковый swap.
Пара эксплуатационных моментов
Что выбрать: Zswap или Zram
- Zswap лучше подходит для систем с медленным хранилищем или когда важно снизить количество операций записи на диск.
- Zram - хороший вариант для машин с небольшим объёмом RAM или вообще без выделенного swap-устройства.
Алгоритмы сжатия
Разные алгоритмы дают разный баланс между скоростью и степенью сжатия:
- lz4 - самый быстрый, но с более низким коэффициентом сжатия
- zstd - компромисс между скоростью и эффективностью
- lzma или gzip - более высокий коэффициент сжатия, но заметно медленнее
Выбор зависит от требований к производительности конкретной системы.
Мониторинг использования сжатого swap
Для zswap:
sudo cat /sys/kernel/debug/zswap/sta
Для zram:
sudo zramctl
Параметр swappiness
Настройка vm.swappiness влияет на то, насколько активно система использует swap.
В случае со сжатым swap более высокое значение swappiness может быть оправданным.
Возможные минусы
- Рост нагрузки на CPU
Сжатие и распаковка данных требуют процессорного времени. На системах с ограниченными ресурсами CPU это может повлиять на общую производительность.
- Сложность настройки
Появляются дополнительные параметры, которые нужно аккуратно подбирать и мониторить. Без тюнинга эффект может отличаться от ожидаемого.
- Малый эффект на системах с большим объёмом RAM
Если оперативной памяти и так достаточно, выигрыш от сжатого swap может быть минимальным или вовсе незаметным.