Zram - Пропиши себе доп. ОЗУ

Гайд для тех у кого мало оперативки, и тех кто хочет просто оптимизировать её потребление

Для чего это?

zRam - экспериментальный модуль ядра Linux позволяющий сжимать содержимое оперативной памяти, и таким образом увеличивать ее объем в несколько раз.

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

На практике он позволил мне, не используя раздел подкачки и не получая видимого замедления работы компьютера, увеличить размер оперативной памяти в 2.5-3 раза

Короткая версия

Переходим в режим суперпользователя:

su

Вписываем "zram" в /etc/modules-load.d/zram.conf:

nano /etc/modules-load.d/zram.conf
zram

Вписываем в файл /etc/modprobe.d/zram.conf следующее, где число 8 заменяем на кол-во всех ядер:

nano /etc/modprobe.d/zram.conf
options zram num_devices=8

По формуле - общее кол-во оперативной памяти делим на 2, а затем делим на кол-во ядер - запоминаем число.

Редактируем и дописываем в файл etc/udev/rules.d/99-zram.rules следующее, меняя 512mb во всех строках на ваше значение, полученное выше:

nano /etc/udev/rules.d/99-zram.rules
KERNEL=="zram0", ATTR{disksize}="512Mb" RUN="/usr/bin/mkswap /dev/zram0", TAG+="systemd"
KERNEL=="zram1", ATTR{disksize}="512Mb" RUN="/usr/bin/mkswap /dev/zram1", TAG+="systemd"
KERNEL=="zram2", ATTR{disksize}="512Mb" RUN="/usr/bin/mkswap /dev/zram2", TAG+="systemd"
KERNEL=="zram3", ATTR{disksize}="512Mb" RUN="/usr/bin/mkswap /dev/zram3", TAG+="systemd"
KERNEL=="zram4", ATTR{disksize}="512Mb" RUN="/usr/bin/mkswap /dev/zram4", TAG+="systemd"
KERNEL=="zram5", ATTR{disksize}="512Mb" RUN="/usr/bin/mkswap /dev/zram5", TAG+="systemd"
KERNEL=="zram6", ATTR{disksize}="512Mb" RUN="/usr/bin/mkswap /dev/zram6", TAG+="systemd"
KERNEL=="zram7", ATTR{disksize}="512Mb" RUN="/usr/bin/mkswap /dev/zram7", TAG+="systemd"

И вставляем в файл /etc/fstab следующие строки в зависимости от кол-ва ядер:

nano /etc/fstab
/dev/zram0 none swap defaults 0 0
/dev/zram1 none swap defaults 0 0
/dev/zram2 none swap defaults 0 0
/dev/zram3 none swap defaults 0 0
/dev/zram4 none swap defaults 0 0
/dev/zram5 none swap defaults 0 0
/dev/zram6 none swap defaults 0 0
/dev/zram7 none swap defaults 0 0

И последняя команда:

echo "vm.swappiness=20" > /etc/sysctl.d/swap.conf

Данная инструкция подходит к системам с 8 гб RAM и 8 ядрами. Подстраивайте под свои нужды.

Полноценная версия

Все следующие команды требуется выполнять из режима администратора, войти в который можно командой:

su

Создаём конфиг файл под названием zram.confв директории /etc/modules-load.d/ (таким образом путь то файла будет /etc/modules-load.d/zram.conf) и вписываем туда слово zram:

vim /etc/modules-load.d/zram.conf
zram

Дальше создаём конфиг файл под названием zram.conf в директории /etc/modprobe.d/ и вписываем тудаoptions zram num_devices=X

Вместо 'X' вписываем количество ядер которое у нас есть.

К примеру если у вас 4 ядра, вы вписываете:

vim /etc/modprobe.d/zram.conf
options zram num_devices=4

Перед тем, как перейти к редактированию следующего конфига, ниже вы увидите шпаргалку. Сейчас я объясню как ее использовать и менять под свою систему.

И так, у нас есть следующая шпаргалка конфига 99-zram.rules

99-zram.rules
KERNEL=="zram0", ATTR{disksize}="xMb" RUN="/usr/bin/mkswap /dev/zram0", TAG+="systemd"
KERNEL=="zram1", ATTR{disksize}="xMb" RUN="/usr/bin/mkswap /dev/zram1", TAG+="systemd"
KERNEL=="zram2", ATTR{disksize}="xMb" RUN="/usr/bin/mkswap /dev/zram2", TAG+="systemd"
KERNEL=="zram3", ATTR{disksize}="xMb" RUN="/usr/bin/mkswap /dev/zram3", TAG+="systemd"
KERNEL=="zram4", ATTR{disksize}="xMb" RUN="/usr/bin/mkswap /dev/zram4", TAG+="systemd"
KERNEL=="zram5", ATTR{disksize}="xMb" RUN="/usr/bin/mkswap /dev/zram5", TAG+="systemd"
KERNEL=="zram6", ATTR{disksize}="xMb" RUN="/usr/bin/mkswap /dev/zram6", TAG+="systemd"
KERNEL=="zram7", ATTR{disksize}="xMb" RUN="/usr/bin/mkswap /dev/zram7", TAG+="systemd"

Стоит упомянуть, что тут нужно вставлять своё количество строк, и то, как вы можете его определить, зависит от количества ваших ядер.

То есть если у вас 2 ядра то вы копируете 2 строки, которые начинаются с KERNEL=="zram0" и KERNEL=="zram1". Если ядер больше, то, соответственно, копируем соответствующее количество количество строк.

Так же очень важная часть - это распределение места диска для каждого виртуального диска. Выделяемое место необходимо вписывать в строку после ATTR{disksize}=, заменив x в "xMb" на число МБ на ядро. Это посчитать довольно легко:

  1. Делим общее количество озу на 2

  2. Получившееся число делим на количество ядер

К примеру у нас есть компьютер с 4 ядрами и 2ГБ RAM (2048 МБ), получится следующее:

  1. 2048 / 2 = 1024

  2. 1024 / 4 = 256 МБ

Т.е на каждое ядро будет приходится 256мб, что в сумме даёт нам 1Гб места под Swap

Конфиг с 4 ядрами и 2гб озу будет выглядеть так:

nano /etc/udev/rules.d/99-zram.rules
KERNEL=="zram0", ATTR{disksize}="256Mb" RUN="/usr/bin/mkswap /dev/zram0", TAG+="systemd"
KERNEL=="zram1", ATTR{disksize}="256Mb" RUN="/usr/bin/mkswap /dev/zram1", TAG+="systemd"
KERNEL=="zram2", ATTR{disksize}="256Mb" RUN="/usr/bin/mkswap /dev/zram2", TAG+="systemd"
KERNEL=="zram3", ATTR{disksize}="256Mb" RUN="/usr/bin/mkswap /dev/zram3", TAG+="systemd"

После того как мы разобрались зачем стоит менять значения в строках, создаём его в директории /etc/udev/rules.d/ И вписываем нужное количество строк и места на виртуальных дисках по этому же принципу:

Данный конфиг подойдёт для систем с 2 ГБ RAM и 2 ядрами

nano /etc/udev/rules.d/99-zram.rules
KERNEL=="zram0", ATTR{disksize}="512Mb" RUN="/usr/bin/mkswap /dev/zram0", TAG+="systemd"
KERNEL=="zram1", ATTR{disksize}="512Mb" RUN="/usr/bin/mkswap /dev/zram1", TAG+="systemd"

Дальше редактируем/etc/fstabи вписываем столько строк, сколько у нас ядер:

Last updated