# 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`и вписываем столько строк, сколько у нас ядер:


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://wiki.ted.ge/zram-propishi-sebe-dop.-ozu.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
