Zram — это технология, которая позволяет создать блочное устройство в оперативной памяти, данные на котором при сохранении сжимаются одним из выбранных алгоритмов. Доступно их несколько, в зависимости от версии операционной системы. Например, в последней версии Proxmox — это lzo, lz4, lz4hc, deflate. По умолчанию используется lzo. Вероятно, т.к. он был добавлен в модуль ядра ранее и сохранён в качестве стандартной настройки в целях совместимости. Наиболее оптимальным на данный момент будет выбор в пользу lz4. Он обладает оптимальным соотношением скорости и коэффициента сжатия и очень быстр в распаковке. Кроме того, lz4 доступен практически во всех актуальных дистрибутивах linux. Для наглядности можно обратиться к таблице:
Чем может быть полезен swap в оперативной памяти:
- Если в системе стоят обычные диски (не ssd)? это существенно ускорит сброс памяти в раздел подкачки
- Для ssd дисков можно таким образом сократить объём записываемых данных на диск и продлить срок службы ssd
- Более эффективное использование памяти
Тут стоит отметить, нет смысла создавать раздел zram swap больше чем размер памяти умноженный на 2, т.к. ожидаемый коэффициент сжатия у нас 2:1. На практике, если система станет настолько сильно своппить, что займёт удвоенный размер памяти в zram, то, скорее всего, и работать на ней будет уже не возможно, т.к. процесс отправки и извлечения данных из swap станет непрерывным. Не стоит доводить до такого состояния, лучше добавить памяти. Поэтому, мы не рекомендуем создавать zram раздел больше, чем объём физической памяти. Также очень полезным может оказаться использование backing_dev — сброс несжимаемых данных на физическое устройство, но это тема отдельной статьи.
Далее рассмотрим настройку zram в качестве swap файла в Proxmox VE. Данным пример должен сработать также в свежих версиях Debian (9, 10) и Ubuntu (начиная с 18-й версии). В данном примере 32G нужно заменить на Ваш размер раздела zram.
modprobe zram
zramctl -s 32G -a lz4 /dev/zram0
mkswap /dev/zram0
swapon /dev/zram0 -p 10
# настройка автоматического создания zram swap при старте системы
echo "zram" > /etc/modules-load.d/zram.conf
echo 'KERNEL=="zram0", ATTR{disksize}="32G" RUN="/sbin/mkswap /dev/zram0", TAG+="systemd"' > /etc/udev/rules.d/99-zram.rules
echo "/dev/zram0 none swap defaults,pri=10 0 0" >> /etc/fstab
Посмотреть статистику использования раздела можно при помощи команды zramctl без параметров:
zramctl
NAME ALGORITHM DISKSIZE DATA COMPR TOTAL STREAMS MOUNTPOINT
/dev/zram0 lz4 32G 48.7M 20.1M 21.5M 16 [SWAP]