Как работает zswap и zram: сжатие памяти в Linux в действии

Современные операционные системы всё чаще используют методы сжатия данных в оперативной памяти, чтобы повысить производительность и снизить нагрузку на хранилища. В Linux такие технологии реализованы через подсистемы zswap и zram. Обе системы направлены на оптимизацию использования оперативной памяти, но делают это по-разному и применяются в различных сценариях. Давайте подробнее рассмотрим, как именно работает сжатие памяти в Linux, и в чём разница между этими двумя подходами.

Что такое сжатие памяти и зачем оно нужно?

Сжатие памяти — это метод, при котором данные, помещаемые в оперативную память (RAM), сначала проходят через алгоритмы сжатия. Это позволяет хранить больше информации в ограниченном объёме памяти. В результате система может откладывать или даже избегать обращения к медленному swap-разделу на диске. Это особенно актуально для устройств с малым объёмом RAM — например, встраиваемых систем, серверов с высокой плотностью виртуализации, а также дешёвых ноутбуков и смартфонов на Linux.

Когда объём оперативной памяти начинает исчерпываться, Linux использует механизм подкачки (swap), перемещая менее активные страницы памяти на диск. Однако обращение к диску, особенно к медленным HDD, резко снижает производительность. Чтобы избежать этого, была разработана технология сжатия данных в памяти: вместо записи на диск страницы сжимаются и хранятся в RAM — быстро, эффективно и без лишних обращений к хранилищу.

Zswap: компрессия страниц перед выгрузкой на диск

Zswap — это сжимающий кеш перед swap-устройствами. Он включается на уровне ядра и действует как перехватчик между виртуальной памятью и реальным swap-разделом. Когда ядро решает выгрузить часть данных в swap, zswap сначала пытается сжать страницу и сохранить её в специальной сжатой области памяти. Только если этой области не хватает, данные в обычном (несжатом) виде записываются на диск.

Zswap использует алгоритмы сжатия, такие как LZO, LZ4 и ZSTD, которые обеспечивают компромисс между скоростью сжатия и степенью сжатия. Алгоритм выбирается при загрузке системы или через параметры ядра. При этом важную роль играет компрессор — модуль ядра, который физически выполняет операцию сжатия/распаковки.

Zswap особенно полезен на системах, где swap размещён на медленных устройствах: например, на жёстких дисках или eMMC в мобильных устройствах. Благодаря zswap, данные дольше остаются в памяти, и обращения к swap происходят реже. Таким образом, увеличивается скорость отклика системы и снижается износ SSD или других устройств хранения.

Кроме того, zswap имеет адаптивную стратегию: если область для сжатых страниц заполняется, он постепенно освобождает её, выгружая менее используемые страницы на диск. Таким образом достигается баланс между экономией памяти и стабильной работой системы.

Zram: виртуальный сжатый блок-устройство в RAM

Zram, в отличие от zswap, реализует немного другой подход. Он создаёт сжатый блочный swap-устройство, которое полностью располагается в оперативной памяти. Это устройство можно подключить как обычный swap-раздел, но все данные, отправленные в него, будут сжаты и останутся в RAM, не касаясь диска вовсе.

Zram используется чаще всего в устройствах, где диск отсутствует вовсе или крайне медленный — например, в роутерах, Android-смартфонах, встраиваемых системах и некоторых ноутбуках. Он активно используется и в дистрибутивах для слабых ПК, таких как Ubuntu MATE или Raspberry Pi OS.

Главное преимущество zram — возможность эффективной работы даже при низком объёме памяти. Благодаря высокой скорости доступа к RAM и возможности хранить сжатые данные, он позволяет существенно расширить доступный объём памяти без затрат на swap-диск.

При этом zram не зависит от наличия или конфигурации swap-раздела. Он гибко настраивается: можно указать его размер, количество потоков, используемый алгоритм сжатия (например, ZSTD для лучшего сжатия, или LZ4 для более высокой скорости). Современные дистрибутивы, такие как Ubuntu и Fedora, уже включают поддержку zram по умолчанию, что значительно повышает отзывчивость системы в условиях нехватки RAM.

Различия между zswap и zram

Хотя обе технологии работают с сжатием в памяти, подходы у них разные. Zswap — это кеш на пути от оперативной памяти к дисковому swap. Он требует наличие swap-раздела или файла, и лишь временно удерживает данные, прежде чем они будут выгружены на диск. Его цель — уменьшить количество обращений к swap-устройству.

Zram, наоборот, полностью заменяет или дополняет swap, предлагая сжатое хранилище прямо в оперативной памяти. Он не зависит от физического swap и может использоваться даже там, где дисковый swap недоступен.

Таким образом, zswap отлично подходит для систем с медленным диском, а zram — для систем с ограниченными ресурсами, где важно избежать любых обращений к хранилищу. Их можно использовать совместно, хотя в большинстве сценариев достаточно одного из них.

Практическое применение и настройка

Настройка zswap и zram требует минимального вмешательства. В большинстве дистрибутивов Linux zswap можно включить, передав параметр zswap.enabled=1 в загрузчик ядра (например, через GRUB). Также стоит выбрать алгоритм сжатия и лимит используемой памяти — по умолчанию zswap использует до 20% от RAM.

Для настройки zram требуется создание блочного устройства и активация его как swap. Примерная последовательность:

bash
modprobe zram
echo lz4 > /sys/block/zram0/comp_algorithm
echo 1024M > /sys/block/zram0/disksize
mkswap /dev/zram0
swapon /dev/zram0

Современные системы используют systemd-скрипты или менеджеры, такие как zram-generator, которые упрощают конфигурацию и позволяют включить zram в пару строк.

Заключение

Zswap и zram — мощные инструменты управления оперативной памятью в Linux. Они позволяют системе работать стабильнее, быстрее и эффективнее даже в условиях нехватки ресурсов. В условиях высокой нагрузки, когда каждая мегабайта памяти на счету, эти технологии играют ключевую роль, обеспечивая плавную работу приложений и сокращая обращения к swap-диску.

Понимание различий и возможностей zswap и zram позволяет администраторам и пользователям Linux строить более производительные и устойчивые системы, особенно на оборудовании с ограниченными ресурсами.

Comments are closed.