zram (Русский)

From ArchWiki

Состояние перевода: На этой странице представлен перевод статьи zram. Дата последней синхронизации: 28 марта 2023. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

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