Подробный гайд: Настройка zram и zswap в Linux: убираем фризы при нехватке ОЗУ и бережём SSD

Гайд по настройке zram и zswap в Linux. Убираем фризы системы при нехватке оперативной памяти, настраиваем ядро и значительно экономим ресурс SSD.

2026.07.08                  


Подробный гайд: Настройка zram и zswap в Linux: убираем фризы при нехватке ОЗУ и бережём SSDПодробный гайд: Настройка zram и zswap в Linux: убираем фризы при нехватке ОЗУ и бережём SSD Проблема фризов системы при нехватке памяти называется трешингом (thrashing). Когда оперативная память (ОЗУ) заканчивается, ядро начинает активно сбрасывать страницы памяти на SSD. Поскольку SSD в разы медленнее ОЗУ, очередь ввода-вывода (I/O) переполняется, и система «замирает», ожидая ответа от диска. При этом SSD испытывает колоссальную нагрузку на запись, что снижает его ресурс.

Решение — использовать сжатие памяти в самой ОЗУ. Это работает молниеносно по сравнению с записью на диск и полностью (или почти полностью) убирает запись свопа на SSD.

Ниже представлен подробный гайд. Сначала разберёмся, что выбрать, а затем настроим систему.


Что выбрать: zram или zswap?

  1. zram — создает сжатый блочный device в самой ОЗУ. Он работает вместо классического свопа.

Плюсы:

Абсолютно нулевая запись на SSD. Идеально для современных десктопов.

Минусы:

Нельзя использовать для гибернации (спящего режима), так как при выключении питания ОЗУ очищается.


  1. 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 успешно кэширует данные в ОЗУ.


Важно:

  1. Если не используете гибернацию -> ставим zram + swappiness=100 + watermark_scale_factor=128.
  2. Если гибернация нужна -> ставим zswap + swappiness=60 + watermark_scale_factor=128.
  3. Настроенные "водяные знаки" (watermarks) заставят ядро заранее и незаметно для пользователя сжимать память, что полностью уберет эффект "задумывания" системы при запуске тяжелых приложений (браузер с кучей вкладок, игры, IDE).
  4. Ресурс SSD при такой настройке экономится колоссально, так как операции чтения/записи свопа происходят исключительно в кремнии оперативной памяти.

Мы делимся этой технической информацией, чтобы помочь вам в решении задач — используйте её с пониманием. Статья носит рекомендательный характер, поэтому, пожалуйста, применяйте описанные методы осмотрительно.


Статью подготовил: Денис Аверко @Nymexis г. Омск

Комментарии

Загрузка...
Если комментарии не загружаются, можете попробовать отключить блокировщик рекламы для этого сайта