Настройка 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
  • Добавить комментарий

    Оставить комментарий