zram (Русский)
zram, ранее известный как compcache, — это модуль ядра Linux, позволяющий создать сжатое блочное устройство в ОЗУ, то есть RAM-диск со сжатием на лету. Создаваемое этим модулем блочное устройство можно использовать в качестве подкачки или как обычный RAM-диск. Чаще всего zram используется для хранения временных файлов (/tmp
) и для подкачки. Изначально zram выполнял только последнюю функцию, отсюда и первоначальное название «compcache» («compressed cache»).
Использование в качестве подкачки
Отключение zswap
Так как zswap включен по умолчанию, перед включением zram его стоит отключить, чтобы он не работал как кэш подкачки перед zram. Включение их обоих также приводит к отображению некорректной статистики в zramctl(8), и zram остаётся в основном неиспользуемым, потому что zswap перехватывает и сжимает страницы памяти до того как они попадут в zram.
Автоматически
zram-generator предоставляет юнит systemd-zram-setup@.service
для автоматической инициализации устройства zram без необходимости включать/запускать шаблон или его экземпляры. Смотрите zram-generator(8) и zram-generator.conf(5).
Например, чтобы создать подкачку в zram, использующую сжатие zstd
и способную занимать всю доступную ОЗУ, установите пакет zram-generator и создайте такой файл:
/etc/systemd/zram-generator.conf
[zram0] zram-size = ram compression-algorithm = zstd
Затем перезагрузитесь и проверьте статус подкачки на настроенном вами устройстве /dev/zramN
, посмотрев статус экземпляра юнита systemd-zram-setup@zramN.service
или используя zramctl(8).
В качестве альтернативы можно использовать пакет zramswapAUR, который предоставляет автоматический скрипт для настройки подкачки с высоким приоритетом и размером по умолчанию 20% от размера ОЗУ вашей системы. Чтобы делать это автоматически при каждой загрузке, включите службу zramswap.service
. Также есть пакет zramdAUR, позволяющий автоматически настроить zram с использованием сжатия zstd по умолчанию, его конфигурацию можно изменить в /etc/default/zramd
. Его можно запустить при загрузке системы, включив службу zramd.service
.
Вручную
Пример: чтобы настроить одно устройство zram со сжатием lz4 с ёмкостью 32 ГиБ и приоритетом выше обычного (только для текущего сеанса):
# modprobe zram # echo lz4 > /sys/block/zram0/comp_algorithm # echo 32G > /sys/block/zram0/disksize # mkswap --label zram0 /dev/zram0 # swapon --priority 100 /dev/zram0
Для выключения можно перезагрузиться или выполнить
# swapoff /dev/zram0 # modprobe -r zram
Подробное объяснение всех шагов, опций и потенциальных проблем описано в официальной документации модуля zram.
Подкачка в zram с использованием правила udev
Пример ниже показывает, как настроить подкачку на zram автоматически при загрузке с помощью одного правила udev. Для этого не требуется дополнительных пакетов.
Сперва включите автоматическую загрузку модуля:
/etc/modules-load.d/zram.conf
zram
Настройте количество требуемых устройств /dev/zram
:
/etc/modprobe.d/zram.conf
options zram num_devices=2
Создайте правило udev:
/etc/udev/rules.d/99-zram.rules
ACTION=="add", KERNEL=="zram[0-1]", ATTR{comp_algorithm}="zstd", ATTR{disksize}="512M", RUN="/usr/bin/mkswap -U clear /dev/%k", TAG+="systemd"
Добавьте /dev/zram
в ваш fstab.
/etc/fstab
/dev/zram0 none swap defaults 0 0 /dev/zram1 none swap defaults 0 0