Подробный гайд: Понимание разницы между Swap, zswap и zram

Swap пишет на диск, zram сжимает данные прямо в RAM, а zswap кэширует сжатые страницы перед сбросом на диск. Разбираем, что выбрать для ускорения Linux.

2026.07.15                  


Подробный гайд: Понимание разницы между Swap, zswap и zramПодробный гайд: Понимание разницы между Swap, zswap и zram Тема управления памятью в Linux (и не только) может быть запутанной, особенно когда речь заходит о современных механизмах сжатия. Чтобы понять разницу между Swap, zram и zswap, нужно сначала разобраться, зачем они вообще нужны.

Когда физической оперативной памяти (RAM) не хватает, ядро ОС должно освободить место для активных процессов. Оно берёт «неактивные» страницы памяти и перемещает их (выгружает). То, куда и как оно их перемещает, и определяет разницу между этими тремя технологиями.

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


1. Традиционный Swap (Классическая подкачка)

Это классический механизм, который существует в ОС десятилетиями.

Как это работает:

Когда RAM переполняется, ядро берет неактивные страницы памяти и записывает их на медленный накопитель (HDD или SSD) в специально отведенное место (раздел swap или swap-файл).


Плюсы:

  • Огромный объем: Вы можете выделить гигабайты или даже терабайты места на диске.
  • Полное освобождение RAM: Выгруженные страницы физически покидают оперативную память, освобождая её для других задач.
  • Обязателен для гибернации: Только традиционный swap позволяет сохранить состояние системы на диск при уходе в спящий режим (Suspend-to-Disk).

Минусы:

  • Крайне низкая скорость: Даже самые быстрые NVMe SSD в разы медленнее оперативной памяти. Когда система начинает активно использовать swap (swapping/thrashing), всё сильно тормозит.
  • Износ накопителя: Постоянная перезапись страниц памяти быстро изнашивает ячейки SSD.
  • Блокировки I/O: Процессы могут зависать в ожидании чтения/записи на диск.

2. zram (Сжатие памяти в RAM)

zram (ранее compcache) — это модуль ядра, который создает виртуальный блочное устройство прямо в оперативной памяти.

Как это работает:

Вместо того чтобы сбрасывать неактивные страницы на медленный диск, ядро сжимает их (используя алгоритмы вроде LZ4 или ZSTD) и помещает в это виртуальное устройство zram, которое находится в RAM. Когда сжатые данные нужны снова, они мгновенно распаковываются процессором.


Плюсы:

  • Молниеносная скорость: Распаковка из RAM процессором происходит в сотни раз быстрее, чем чтение с SSD.
  • Нулевой износ диска: Данные вообще не касаются накопителя.
  • Эффективное увеличение RAM: Сжатие позволяет «упаковать» больше данных в тот же объем физической памяти (коэффициент сжатия обычно от 2x до 3x).

Минусы:

  • Нагрузка на CPU: Сжатие и распаковка требуют процессорного времени. На слабых процессорах это может вызвать задержки.
  • Не освобождает RAM полностью: Сжатые данные всё равно занимают место в физической RAM (просто меньше, чем оригинал).
  • Риск OOM (Out of Memory): Если zram заполнится до предела, а диск для классического swap не настроен, система убьет процессы (OOM Killer), так как ей больше некуда девать данные.

Где используется:

По умолчанию используется в Android, ChromeOS, а также в современных дистрибутивах Linux (например, Fedora) для устройств с небольшим объемом RAM.


3. zswap (Кэширующий сжатый swap)

zswap — это «золотая середина» и гибрид. Это легковесный кэш для сжатых страниц, который работает перед традиционным swap. Технически это реализация механизма frontswap.


Как это работает:

1. Когда ядру нужно выгрузить страницу, оно не пишет её сразу на диск.
2. Сначала оно сжимает страницу и кладет её в динамический пул памяти **zswap** (в RAM).
3. Если пул zswap переполняется, он вытесняет (evict) *самые старые* сжатые страницы из RAM и сбрасывает их в **традиционный swap на диске**.

Плюсы:

  • Резкое снижение I/O: Большинство страниц, которые выгружаются и быстро возвращаются, вообще не касаются диска. Это продлевает жизнь SSD.
  • Высокая скорость: Частые обращения к недавно выгруженным страницам происходят со скоростью RAM (как в zram).
  • Безопасность: Так как zswap всегда работает в связке с традиционным swap на диске, риск внезапного OOM из-за нехватки места сводится к нулю.

Минусы:

  • Требует настройки: Для работы zswap обязательно нужно, чтобы был настроен классический swap (файл или раздел) на диске.
  • Двойная нагрузка: Тратится CPU на сжатие, плюс всё равно происходит фоновая запись на диск (хотя и в разы реже).

Сводная таблица для быстрого сравнения

Характеристика Традиционный Swap zram zswap
Куда пишутся данные На диск (SSD/HDD) В сжатую RAM (виртуальное устройство) Сначала в сжатую RAM, потом на диск
Скорость доступа Очень низкая Очень высокая Высокая (для кэша), низкая (для диска)
Нагрузка на CPU Отсутствует Высокая (сжатие/распаковка) Средняя/Высокая
Износ SSD Высокий Отсутствует Низкий (только фоновая запись)
Требует ли места на диске? Да (обязательно) Нет (но желательно для подстраховки) Да (обязательно, как бэкенд)
Поддержка гибернации Да Нет Нет (только через бэкенд на диске)

Практические рекомендации: что выбрать?

Выбор зависит от вашего «железа» и сценариев использования:

Сценарий 1: Слабый ПК / Ноутбук / Raspberry Pi (4 ГБ RAM и меньше)

Выбор:

zram (опционально с небольшим классическим swap на диске для подстраховки).

Почему:

На таких устройствах классический swap на SSD будет вызывать жуткие тормоза. zram позволит системе работать плавно, используя процессор для сжатия. В Android именно так и сделано.


Сценарий 2: Современный десктоп / Ноутбук (8 ГБ - 32 ГБ RAM + хороший SSD)

Выбор:

zswap + классический swap-файл.

Почему:

Это идеальный баланс. zswap будет кэшировать выгружаемые страницы в RAM, обеспечивая мгновенный отклик и спасая ваш SSD от деградации. А классический swap-файл на диске послужит «подушкой безопасности» на случай экстремальных нагрузок и позволит использовать гибернацию.

Как включить:

В современных ядрах Linux zswap включается параметром ядра zswap.enabled=1.


Сценарий 3: Сервер / Базы данных / Рабочая станция для рендеринга

Выбор:

zswap + классический swap (или только классический swap, если RAM очень много).

Почему:

На серверах важна предсказуемость. zswap отлично снижает пиковую нагрузку на дисковую подсистему (I/O), которая часто является «узким горлышком» в серверах.


Сценарий 4: Вам нужна гибернация (Suspend-to-Disk)

Выбор:

Обязательно наличие классического Swap (размером не менее объема RAM).

Примечание:

Ни zram, ни zswap сами по себе не могут сохранить систему на диск при гибернации. zswap может только кэшировать данные перед записью в классический swap.


Важный технический нюанс (Алгоритмы сжатия)

И для zram, и для zswap критически важен выбор алгоритма сжатия:

  • LZ4: Очень быстрый, но сжимает слабее. Идеально, если у вас слабый CPU, но много RAM.
  • ZSTD (Zstandard): Отличный баланс. Сжимает лучше, чем LZ4, и работает достаточно быстро. Рекомендуется по умолчанию в большинстве современных сценариев.
  • LZO: Устаревший, используется по инерции, лучше переходить на LZ4 или ZSTD.

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


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

Комментарии

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