> For the complete documentation index, see [llms.txt](https://wiki.ted.ge/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://wiki.ted.ge/zram-propishi-sebe-dop.-ozu.md).

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

## Для чего это?

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

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

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

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

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

```bash
su
```

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

{% code title="nano /etc/modules-load.d/zram.conf" %}

```bash
zram
```

{% endcode %}

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

{% code title="nano /etc/modprobe.d/zram.conf" %}

```bash
options zram num_devices=8
```

{% endcode %}

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

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

{% code title="nano /etc/udev/rules.d/99-zram.rules" %}

```bash
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"
```

{% endcode %}

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

{% code title="nano /etc/fstab" %}

```bash
/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
```

{% endcode %}

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

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

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

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

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

```bash
su
```

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

{% code title="vim /etc/modules-load.d/zram.conf" %}

```bash
zram
```

{% endcode %}

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

{% hint style="warning" %}
`Вместо 'X' вписываем количество ядер которое у нас есть.`
{% endhint %}

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

{% code title="vim /etc/modprobe.d/zram.conf" %}

```bash
options zram num_devices=4
```

{% endcode %}

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

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

{% code title="99-zram.rules" %}

```bash
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"
```

{% endcode %}

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

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

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

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

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

1. 2048 / 2 = 1024
2. 1024 / 4 = 256 МБ

{% hint style="info" %}
Т.е на каждое ядро будет приходится 256мб, что в сумме даёт нам **1Гб места под Swap**
{% endhint %}

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

{% code title="nano /etc/udev/rules.d/99-zram.rules" %}

```bash
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"
```

{% endcode %}

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

{% tabs %}
{% tab title="2 GB 2 CRS" %}
Данный конфиг подойдёт для систем с 2 ГБ RAM и 2 ядрами

{% code title="nano /etc/udev/rules.d/99-zram.rules" %}

```bash
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"
```

{% endcode %}
{% endtab %}

{% tab title="2 GB 4 CRS" %}
Данный конфиг подойдёт для систем с 2 ГБ RAM и 4 ядрами

{% code title="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"
```

{% endcode %}
{% endtab %}

{% tab title="4 GB 2 CRS" %}
Данный конфиг подойдёт для систем с 4 ГБ RAM и 2 ядрами

{% code title="nano /etc/udev/rules.d/99-zram.rules" %}

```
KERNEL=="zram0", ATTR{disksize}="1024Mb" RUN="/usr/bin/mkswap /dev/zram0", TAG+="systemd"
KERNEL=="zram1", ATTR{disksize}="1024Mb" RUN="/usr/bin/mkswap /dev/zram1", TAG+="systemd"
```

{% endcode %}
{% endtab %}

{% tab title="4 GB 4 CRS" %}
Данный конфиг подойдёт для систем с 4 ГБ RAM и 4 ядрами

{% code title="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"
```

{% endcode %}
{% endtab %}

{% tab title="8 GB 2 CRS" %}
Данный конфиг подойдёт для систем с 8 ГБ RAM и 2 ядрами

{% code title="nano /etc/udev/rules.d/99-zram.rules" %}

```
KERNEL=="zram0", ATTR{disksize}="2048Mb" RUN="/usr/bin/mkswap /dev/zram0", TAG+="systemd"
KERNEL=="zram1", ATTR{disksize}="2048Mb" RUN="/usr/bin/mkswap /dev/zram1", TAG+="systemd"
```

{% endcode %}
{% endtab %}

{% tab title="8 GB 4 CRS" %}
Данный конфиг подойдёт для систем с 8 ГБ RAM и 4 ядрами

{% code title="nano /etc/udev/rules.d/99-zram.rules" %}

```
KERNEL=="zram0", ATTR{disksize}="1024Mb" RUN="/usr/bin/mkswap /dev/zram0", TAG+="systemd"
KERNEL=="zram1", ATTR{disksize}="1024Mb" RUN="/usr/bin/mkswap /dev/zram1", TAG+="systemd"
KERNEL=="zram2", ATTR{disksize}="1024Mb" RUN="/usr/bin/mkswap /dev/zram2", TAG+="systemd"
KERNEL=="zram3", ATTR{disksize}="1024Mb" RUN="/usr/bin/mkswap /dev/zram3", TAG+="systemd"
```

{% endcode %}
{% endtab %}

{% tab title="8 GB 8 CRS" %}
Данный конфиг подойдёт для систем с 8 ГБ RAM и 8 ядрами

{% code title="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"
```

{% endcode %}
{% endtab %}
{% endtabs %}

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