zRam — модуль ядра Linux (ранее известный как compcache). Он увеличивает производительность путём предотвращения подкачки страниц на диск, используя сжатое блочное устройство в оперативной памяти, пока не появится необходимость использовать файл подкачки на жёстком диске. Скорость обмена с оперативной памятью быстрее, чем с жёстким диском, следовательно zRam позволяет Linux производить большее число операций подкачки, особенно на старых компьютерах с малым объёмом оперативной памяти.

zram (previously called compcache) can create RAM based block devices. It is a module of the mainline Linux kernel since 3.14. Starting with kernel version 3.15, zram supports multiple compression streams and the ability to change the compression algorithms used.

https://www.kernel.org/doc/Documentation/blockdev/zram.txt
https://habrahabr.ru/post/172137/

Далее все команды выполняются от рута.


[Нет смысла создавать zram, превышающий вдвое больший объем памяти, так как мы ожидаем степень сжатия 2:1. Обратите внимание, что zram использует около 0,1% размер диска [на самом деле пустому гигабайтному блочному устройству соответствует 4 мегабайта занятого RAM], когда он не используется, поэтому огромный zram является расточительным.] - на самом деле размер данных в блочном устройстве может превышать размер RAM более чем в два раза, поэтому оптимальным размером zram будет 2.5 объема RAM



[В num_devices задается количество сжатых блочных устройств, которое будет создано.
Для наиболее оптимального использования CPU стоит учесть: сжатие каждого устройства zram однопоточное. Потому я создаю их по количеству ядер.] - актуально для старых систем, в новых системах возможна многопоточность

# для работы zram значение vm.swappiness должно быть выше нуля (по умолчанию оно равно 60)
# добавляем в /etc/sysctl.conf сроку
vm.swappiness=100
# и применяем изменения командой
sudo sysctl -p

Получить информацию о модуле zram:
modinfo zram

В современных версиях дистрибутивов в состав пакета util-linux входит утилита zramctl, позваляющая управлять параметрами устройств zram (изменять размер, алгоритм сжатия и число потоков) и смотреть статистику устройств (размер, алгоритм, размер данных до сжатия, размер данных после сжатия) при запуске zramctl без аргументов. В старых версиях дистрибутивов управлять параметрами zram можно с помощью утилиты echo, перезаписывая значения, содержащиеся в файлах /sys/block/zram<id>/*.

Для активации zram нужно выполнить следующие команды или добавить их в автозапуск

# для Ubuntu 16.04
modprobe zram
echo 8 > /sys/block/zram0/max_comp_streams
echo lz4 > /sys/block/zram0/comp_algorithm
echo 8G > /sys/block/zram0/disksize
mkswap /dev/zram0
swapon /dev/zram0 -p 10

или короче

modprobe zram
zramctl --find --size 16G --streams 4 --algorithm lz4
mkswap /dev/zram0
swapon /dev/zram0 -p 10


# для Debian 9
# количество потоков для каждого создаваемого устройства равно числу ядер процессора, изменить это значение нельзя
modprobe zram
zramctl --find --size 16G --algorithm lz4
mkswap /dev/zram0
swapon /dev/zram0 -p 10

# для Debian 8 и Ubuntu 14.04
# утилита zramctl отсутствует, безальтернативно используется алгоритм lzo и 1 поток на каждое устройство
modprobe zram num_devices=4
echo 4G > /sys/block/zram0/disksize
echo 4G > /sys/block/zram1/disksize
echo 4G > /sys/block/zram2/disksize
echo 4G > /sys/block/zram3/disksize
mkswap /dev/zram0
mkswap /dev/zram1
mkswap /dev/zram2
mkswap /dev/zram3
swapon /dev/zram* -p 10

- можно добавить эти команды в автозапуск (например путем добавления в /etc/rc.local)

# введя эту команду в эмуляторе терминала можно мониторить события, связанные c zram
tail -f /var/log/syslog | grep zram

# проверить состояние свопа
swapon -s

# проверка состояния zram (на новых системах)

zramctl

# справка по команде zram
man zramctl
zramctl --help

# проверить загружен ли в ядро модуль zram
lsmod | grep zram

# сколько памяти свободно
free -hw

пример вывода zramctl:

NAME - название(устройство)
ALGORITHM - алгоритм сжатия
DISKSIZE - размер раздела подкачки в оперативной памяти
DATA - размер данных до сжатия
COMPR - размер данных после сжатия
TOTAL - а посмотрите zramctl --help
STREAMS - количество потоков сжатия
MOUNTPOINT - точка монтирования


# выключить zram
swapoff /dev/zram0
zramctl --reset /dev/zram0