Настройка Zram в Linux

Zram или compcache - экспериментальный модуль ядра Linux позволяющий сжимать содержимое оперативной памяти, и таким образом увеличивать ее объем в несколько раз. Работает это так: zram создает сжатое блочное устройство в ОЗУ которое чаще всего используется как swap или монтируется в tmp. При этом степень сжатия данных получается в среднем 3:1. Это означает что на 1 гигабайт подкачки будет использовано в 333 мегабайт физической памяти. Активация zram

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

Device Drivers ---> [*] Block devices ---> Compressed RAM block device support

Когда завершите с ядром нужно установить параметр загрузки ядра zram.num_devices который указывает максимальное количество сжатых устройств. Как добавить параметры ядра в Grub посмотрите в моей статье. Настройка сжатия памяти Zram

Нам необходимо загрузить модуль ядра, создать блочные устройства, и подключить их куда следует. Есть несколько способов сделать это. способ 1 с помощью скрипта

Для настройки и запуска модуля создадим скрипт zram.start и добавим его в автозагрузку. Например если мы хотим создать 4 сжатых устройства размером 1526 мегабайт и подключить их как swap скрипт будет выглядеть так:

!/bin/bash

modprobe zram num_devices=4

SIZE=1536 echo $(($SIZE*1024*1024)) > /sys/block/zram0/disksize echo $(($SIZE*1024*1024)) > /sys/block/zram1/disksize echo $(($SIZE*1024*1024)) > /sys/block/zram2/disksize echo $(($SIZE*1024*1024)) > /sys/block/zram3/disksize

mkswap /dev/zram0 mkswap /dev/zram1 mkswap /dev/zram2 mkswap /dev/zram3

swapon /dev/zram0 -p 10 swapon /dev/zram1 -p 10 swapon /dev/zram2 -p 10 swapon /dev/zram3 -p 10

И соответственно скрипт для отключения - zram.stop:

!/bin/bash

swapoff /dev/zram0 swapoff /dev/zram1 swapoff /dev/zram2 swapoff /dev/zram3

echo 1 > /sys/block/zram0/reset echo 1 > /sys/block/zram1/reset echo 1 > /sys/block/zram2/reset echo 1 > /sys/block/zram3/reset

modprobe -r zram

Автозагрузка скриптов отличается в каждой системе инициализации, в systemd можно написать юнит, в upstart - добавить в rc.local, а в openrc есть директория /etc/local.d/. Ну в общем вы знаете как это делается в вашей системе. Способ 2 без скриптов

В этом примере создадим три устройства, 2 из них подключим в swap, а одно смонтируем в tmp.

Загрузим модуль ядра используя /etc/modprobe.d/:

sudo nano /etc/modprobe.d/zram.conf

options zram num_devices=3

Создадим диски с помощью правил udev:

sudo nano /etc/udev/rules.d/10-zram.rules

KERNEL=="zram0", SUBSYSTEM=="block", DRIVER=="", ACTION=="add", ATTR{disksize}=="0", ATTR{disksize}="512M", RUN+="/sbin/mkswap $env{DEVNAME}" KERNEL=="zram1", SUBSYSTEM=="block", DRIVER=="", ACTION=="add", ATTR{disksize}=="0", ATTR{disksize}="512M", RUN+="/sbin/mkswap $env{DEVNAME}" KERNEL=="zram2", SUBSYSTEM=="block", DRIVER=="", ACTION=="add", ATTR{disksize}=="0", ATTR{disksize}="512M", RUN+="/sbin/mkfs.ext4 $env{DEVNAME}"

Если вы хотите использовать сжатие lz4 и ext4 без журналирования строчка будет выглядеть вот так:

KERNEL=="zram2", SUBSYSTEM=="block", DRIVER=="", ACTION=="add", ATTR{initstate}=="0", ATTR{comp_algorithm}="lz4", ATTR{disksize}="512M", RUN+="/sbin/mkfs.ext4 -O ^has_journal -L $name $env{DEVNAME}"

И наконец подключим их в /etc/fstab:

/dev/zram0 swap swap pri=16383 0 0 /dev/zram1 swap swap pri=16383 0 0 /dev/zram2 /tmp ext4 defaults 0 0

Отправка комментария

0 Комментарии