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

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

Активация zram

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

Device Drivers --->
[*] Block devices --->
<M> 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

Creative Commons License
Статья Настройка Zram в Linux распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна.
Ваше имя тоже может быть здесь. Начните писать статьи для Losst. Это просто! Смотрите подробнее как начать писать статьи - Пишите для нас

Оцените статью:

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (3 оценок, среднее: 2,00 из 5)
Загрузка...

7 комментариев

  1. prostolinux Август 3, 2015 Ответить
    • admin Август 3, 2015 Ответить
    • Vix Ноябрь 13, 2016 Ответить
  2. Ridbowt Май 23, 2016 Ответить
  3. Vix Ноябрь 13, 2016 Ответить
  4. stonemct Январь 24, 2018 Ответить

Ответить

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: