Zstd для swap: настройка zswap и zram в Linux
Zstandard (zstd) — современный алгоритм сжатия, который можно использовать для оптимизации swap в Linux через zswap и zram. Узнайте, как настроить сжатие страниц перед записью на диск или создать сжатый swap в оперативной памяти, чтобы снизить нагрузку на диск и ускорить доступ к данным.
Zstd для swap: где и как применять сжатие
Zstandard (zstd) — современный алгоритм сжатия, который используют не только для архивов, но и в ядре Linux. В Linux он поддерживается через механизмы zswap и zram, где zstd обеспечивает баланс между скоростью обработки и эффективностью сжатия. Для swap это означает возможность снизить нагрузку на диск или расширить доступную память без увеличения объёма RAM.
Zstd в zswap: сжатие страниц перед записью на диск
Zswap — это модуль ядра, который сжимает страницы памяти перед их записью в дисковый swap. Это ускоряет доступ к данным и снижает нагрузку на диск, особенно на медленных носителях. Zstd работает здесь как алгоритм сжатия по умолчанию, но его можно заменить на lzo, lz4, 842 или deflate, если приоритетом становится либо максимальная скорость, либо глубина сжатия.
Настройка начинается с проверки поддержки zswap в ядре. Если модуль включён, можно сразу задать используемый алгоритм:
echo zstd > /sys/module/zswap/parameters/compressor
Размер сжатого пула ограничивается параметром max_pool_percent — обычно достаточно 20% от общего объёма оперативной памяти:
echo 20 > /sys/module/zswap/parameters/max_pool_percent
Для постоянной настройки эти параметры добавляют в строку загрузки ядра через GRUB:
zswap.enabled=1 zswap.compressor=zstd zswap.max_pool_percent=20 zswap.zpool=zsmalloc
Здесь zpool определяет, как будет распределяться память для сжатых страниц. Доступные варианты: zsmalloc, z3fold или zbud.
Zstd в zram: сжатый swap в оперативной памяти
Zram создаёт сжатое блочное устройство в RAM, которое может полностью заменить дисковый swap или использоваться вместе с ним. Zstd входит в число рекомендуемых алгоритмов, особенно когда важнее скорость обработки, а не максимальная степень сжатия.
На Debian и Ubuntu zram настраивают через пакет zram-tools. В конфигурационном файле /etc/default/zramswap указывают алгоритм и размер пула в процентах от RAM:
ALGO=zstd
PERCENT=50
После перезапуска службы zram становится доступным как блочное устройство:
sudo systemctl restart zramswap
zramctl --output-all
Коэффициент сжатия зависит от содержимого данных — обычно это соотношение 1:2–1:4. Например, 1 ГБ zram может вместить 2–4 ГБ несжатых данных.
Когда выбирать zstd, а когда — другие алгоритмы
Zstd демонстрирует высокую скорость сжатия при сохранении хорошей степени уплотнения. Для сравнения:
| Алгоритм | Скорость сжатия | Степень сжатия |
|---|---|---|
| zstd | Очень высокая | Очень высокая |
| lz4 | Очень высокая | Средняя |
| lzo | Высокая | Низкая |
| deflate | Средняя | Средняя |
- Для zswap zstd подходит, если нужен баланс между скоростью и эффективностью. Если система испытывает высокую нагрузку на CPU, можно использовать lz4 для снижения нагрузки.
- Для zram zstd тоже оптимален, но в сценариях, где CPU — узкое место, lz4 может быть предпочтительнее.
Диагностика и мониторинг
Эффективность сжатия проверяют через системные интерфейсы.
Для zswap:
grep -r . /sys/kernel/debug/zswap/
В выводе отображаются:
stored_pages— количество сжатых страниц;pool_total_size— размер пула в байтах;written_back_pages— страницы, сброшенные на диск после сжатия.
Для zram:
zramctl --output-all
Отображаются:
NAME— имя устройства;ALGORITHM— используемый алгоритм;DISKSIZE— размер zram;DATAиCOMPR— объём данных до и после сжатия;TOTAL— общий объём памяти, занятой устройством.
Ограничения и нюансы
Zswap не работает без дискового swap — он лишь сжимает страницы перед записью на диск. Если на системе нет swap-файла или раздела, zswap не даст эффекта.
Для zram важно помнить, что он использует часть RAM и CPU для сжатия. На системах с большим объёмом памяти (4 ГБ и более) выгода от сжатия может быть минимальной.
Коэффициент сжатия зависит от содержимого данных. Например, уже сжатые файлы или образы дисков не дадут значительного выигрыша в объёме. В таких случаях zram может занимать почти столько же места, сколько и несжатые данные.
Практические сценарии применения
Zswap полезен на системах с медленными дисками — HDD или SSD с высокими задержками. Он снижает нагрузку на накопитель, продлевая срок его службы, и ускоряет доступ к swap.
Zram оптимален для виртуальных машин и контейнеров с малым объёмом RAM (1–2 ГБ). Он позволяет временно расширить доступную память без покупки дополнительных модулей RAM и без нагрузки на диск.
Правильная настройка zstd для swap требует учёта архитектуры системы, типа нагрузки и доступных ресурсов. В большинстве случаев zstd обеспечивает наилучший компромисс между производительностью и эффективностью.