Подробный гайд: Настройка zram и zswap в Linux: убираем фризы при нехватке ОЗУ и бережём SSD
Проблема фризов системы при нехватке памяти называется трешингом (thrashing). Когда оперативная память (ОЗУ) заканчивается, ядро начинает активно сбрасывать страницы памяти на SSD. Поскольку SSD в разы медленнее ОЗУ, очередь ввода-вывода (I/O) переполняется, и система «замирает», ожидая ответа от диска. При этом SSD испытывает колоссальную нагрузку на запись, что снижает его ресурс.
Решение — использовать сжатие памяти в самой ОЗУ. Это работает молниеносно по сравнению с записью на диск и полностью (или почти полностью) убирает запись свопа на SSD.
Ниже представлен подробный гайд. Сначала разберёмся, что выбрать, а затем настроим систему.
Что выбрать: zram или zswap?
- zram — создает сжатый блочный device в самой ОЗУ. Он работает вместо классического свопа.
Плюсы:
Абсолютно нулевая запись на SSD. Идеально для современных десктопов.
Минусы:
Нельзя использовать для гибернации (спящего режима), так как при выключении питания ОЗУ очищается.
- zswap — это сжатый кэш, который работает перед классическим свопом (файлом или разделом). Он сжимает страницы в ОЗУ, и только когда этот кэш переполняется, самые старые данные сбрасываются на SSD.
Плюсы:
Поддерживает гибернацию. Отлично подходит, если у вас уже есть большой swap-файл и вы не хотите его удалять.
Минусы:
При экстремальных нагрузках все же пишет на SSD (хотя и в 5-10 раз меньше).
Рекомендация:
Если вы не используете гибернацию (hibernate) — настраивайте zram. Это современный стандарт. Если гибернация нужна — настраивайте zswap.
Вариант 1. Настройка zram (Рекомендуется)
Мы создадим swap-раздел в памяти, который будет сжимать данные алгоритмом zstd (оптимальный баланс скорости и степени сжатия).
Шаг 1. Установка
Для Debian / Ubuntu / Linux Mint:
sudo apt update
sudo apt install zram-tools
Для Arch Linux / Manjaro:
sudo pacman -S zram-generator
(В Arch после установки нужно выполнить sudo systemctl enable --now systemd-zram-setup@zram0.service)
Шаг 2. Конфигурация zram-tools (для Debian/Ubuntu)
Откройте файл конфигурации:
sudo nano /etc/default/zramswap
Приведите его к следующему виду (раскомментируйте и измените строки):
# Алгоритм сжатия. zstd - лучший выбор на сегодня.
ALGO=zstd
# Размер zram в процентах от общей ОЗУ.
# 50% обычно достаточно, так как данные сжимаются.
# Можно ставить 100, если ОЗУ мало (8 ГБ и меньше).
PERCENT=50
# Приоритет. Делаем выше, чем у обычного свопа на диске.
PRIORITY=100
Шаг 3. Применение и проверка
Перезагрузите службу (или перезагрузите ПК):
sudo systemctl restart zramswap.service
Проверьте, что zram работает:
zramctl
Вы должны увидеть устройство /dev/zram0 с указанным алгоритмом и размером.
Вариант 2. Настройка zswap (Если нужна гибернация)
Для этого у вас уже должен быть настроен классический swap (файл подкачки или раздел).
Шаг 1. Включение в параметрах ядра
Откройте конфигурацию GRUB:
sudo nano /etc/default/grub
Найдите строку GRUB_CMDLINE_LINUX_DEFAULT и добавьте в её кавычки следующие параметры через пробел:
zswap.enabled=1 zswap.compressor=zstd
(Пример: GRUB_CMDLINE_LINUX_DEFAULT="quiet splash zswap.enabled=1 zswap.compressor=zstd")
Обновите GRUB:
- Debian/Ubuntu:
sudo update-grub - Arch/Fedora:
sudo grub-mkconfig -o /boot/grub/grub.cfg
Шаг 2. Настройка размера пула zswap
По умолчанию zswap может занять до 20% ОЗУ. Увеличим это значение, чтобы реже писать на SSD.
Создайте файл sysctl:
sudo nano /etc/sysctl.d/99-zswap.conf
Добавьте:
# Разрешаем zswap занимать до 30% оперативной памяти
vm.zswap_max_pool_percent=30
Шаг 3. Применение
Перезагрузите компьютер, чтобы ядро загрузилось с новыми параметрами.
Тонкая настройка ядра (Чтобы система НЕ фризила)
Само по себе включение сжатия не гарантирует отсутствие фризов. Нужно сказать ядру, как и когда начинать сбрасывать память.
Создайте файл для тонкой настройки:
sudo nano /etc/sysctl.d/99-memory-tuning.conf
Вставьте туда следующие параметры:
# 1. Swappiness (Только для zram!)
# Если вы используете zram, своппинг в сжатую ОЗУ почти бесплатен для CPU.
# Значение 100 заставляет ядро агрессивно сжимать неиспользуемую память,
# освобождая место для кэша файлов (система работает быстрее).
# Если используете zswap, оставьте 60 или поставьте 30.
vm.swappiness=100
# 2. Watermark scale factor (КРИТИЧЕСКИ ВАЖНО)
# По умолчанию (10) ядро начинает свопить, когда свободной ОЗУ остается совсем мало.
# Из-за этого в моменты пиковой нагрузки происходит микро-фриз.
# Увеличение до 128 заставляет ядро начинать плавно сбрасывать память в zram/zswap
# ЗАРАНЕЕ, когда свободной памяти еще много. Фризы исчезают полностью.
vm.watermark_scale_factor=128
# 3. Watermark boost factor
# Помогает ядру быстрее восстанавливать низкие водяные знаки после пиков нагрузки.
vm.watermark_boost_factor=15000
Примените настройки без перезагрузки:
sudo sysctl --system
Как проверить, что всё работает и экономит SSD?
Проверка zram:
Выполните cat /proc/swaps или free -h. Вы увидите /dev/zram0 в списке устройств подкачки.
Чтобы посмотреть статистику сжатия:
mm_stat /dev/zram0 # (если утилиты нет, можно посмотреть в /sys/block/zram0/mm_stat)
Вы увидите, сколько памяти.orig (до сжатия) и сколько памяти.compr (после сжатия) используется.
Проверка zswap:
Чтобы посмотреть, сколько страниц zswap сохранил в ОЗУ, а сколько был вынужден сбросить на SSD (pool_total_size vs stored pages), выполните:
cat /sys/kernel/debug/zswap/stored_pages
cat /sys/kernel/debug/zswap/pool_total_size
Если stored_pages растет, а запись на диск (можно посмотреть через iotop) не увеличивается — значит, zswap успешно кэширует данные в ОЗУ.
Важно:
- Если не используете гибернацию -> ставим zram +
swappiness=100+watermark_scale_factor=128. - Если гибернация нужна -> ставим zswap +
swappiness=60+watermark_scale_factor=128. - Настроенные "водяные знаки" (watermarks) заставят ядро заранее и незаметно для пользователя сжимать память, что полностью уберет эффект "задумывания" системы при запуске тяжелых приложений (браузер с кучей вкладок, игры, IDE).
- Ресурс SSD при такой настройке экономится колоссально, так как операции чтения/записи свопа происходят исключительно в кремнии оперативной памяти.
Мы делимся этой технической информацией, чтобы помочь вам в решении задач — используйте её с пониманием. Статья носит рекомендательный характер, поэтому, пожалуйста, применяйте описанные методы осмотрительно.