Привет, выходные пролетают со скоростью света и так по кругу. Порой задумываешься — а что дальше? А дальше поговорим про особенность ядра linux как zram.



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



При включении 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 раздел. По крайней мере так написано в мануале. Но это не точно.



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



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



tags: #linux



💩 @bashdays