Привет, выходные пролетают со скоростью света и так по кругу. Порой задумываешься — а что дальше? А дальше поговорим про особенность ядра linux как zram. ZRAM эта такая штуковина, которая позволяет сжимать оперативную память на лету и таким образом увеличить ее объём. Нет, это реально работает. А то бывают такие приколы - скачай 1гиг памяти бесплатно. Встречал в гуголплее такую хреновину для андроидов.

Роман Шубин
Роман Шубин
CEO & CTO, Главред в «Цифровой улей»
Задать вопрос
При включении zram, сжатие переносит часть нагрузки на процессор, но использование zram действительно может улучшить производительность.

Особенно на серваках/пекарнях с малым объемом оперативки.

Также есть zswap, которая сжимает данные в разделе подкачки. И которая по умолчанию включена почти во всех официальных ядрах.

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

CONFIG_ZSWAP_DEFAULT_ON=N

Но чтобы применить эту опцию, нужно пересобрать ядро. А оно нам нафиг не всралось. Поэтому пойдем легким путем и задизейблим zswap через загрузчик grub.

Редактируем файл /etc/default/grub

GRUB_CMDLINE_LINUX_DEFAULT="zswap.enabled=0 loglevel=3 quiet"

Не забываем перегенирировать конфиг grub:

grub-mkconfig -o /boot/grub/grub.cfg

Перезагружаем машину и проверяем отключение zswap:

cat /sys/module/zswap/parameters/enabled

Если вывелась буква N значит ты все сделал правильно. Кстати можешь изначально проверить, возможно zswap у тебя по умолчанию выключен. У меня в Selectel сразу выводит букву N, возможно по причине, что у меня вообще swap отсутствует. Ну и наконец включаем zram. Для этого пишем bash скрипт и кидаем его в автозагрузку:

#!/bin/bash

modprobe zram
mkdir /sys/block/zram0
echo lz4 > /sys/block/zram0/comp_algorithm
echo 1G > /sys/block/zram0/disksize
echo 2 > /sys/block/zram0/max_comp_streams
mkswap --label zram0 /dev/zram0
swapon --priority 100 /dev/zram0
  1. Загружаем модуль zram
  2. Выбираем алгоритм сжатия lz4 (либо zstd)
  3. Объем zram, у меня 1гиг физической оперативки
  4. 2 это количество потоков сжатия (потоки процессора)
  5. Создаем блочное устройство и включаем его

Запускаем скрипт и проверяем включение командой: zramctl. Если на экран что-то вывелось, значит всё ок и сжатие начало работать.

Если заморачиваться с bash скриптами не хочется, ставим утилиту которая будет работать через systemd.

apt install systemd-zram-generator

Правим конфиг /etc/systemd/zram-generator.conf

[zram0]
zram-size = ram
compression-algorithm = lz4

Активируем и запускаем:

systemctl daemon-reload
systemctl start /dev/zram0

Всё! Теперь оно само будет запускаться без лишних движений.

Ну и не забываем про минус использования zram. При включении ты теряешь возможность использовать нативный swap раздел. По крайней мере так написано в мануале. Но это не точно.

Надо будет ради интереса бенчмарки снять. Хотя тут наверное проще гуглануть, всяко кто-то уже снимал.

Ладно пойду дальше кубернейтсы шатать. Увидимся!