ZRAM/ZSWAP

Материал из ALT Linux Wiki
Версия от 04:32, 11 октября 2022; Дым (обсуждение | вклад) (Новая страница: «Заготовка заметки. == =ZSWAP= Для работы этой технологии необходим подмонтированный своп-раздел: именно в него zswap скидывает сжатые страницы памяти. =ZRAM= Для этой технологии своп-рездел не обязателен, но если таковой наличествует, то по заполнению сжатого с...»)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)

Заготовка заметки. ==

ZSWAP

Для работы этой технологии необходим подмонтированный своп-раздел: именно в него zswap скидывает сжатые страницы памяти.

ZRAM

Для этой технологии своп-рездел не обязателен, но если таковой наличествует, то по заполнению сжатого свопа в памяти всё остальное начнёт свопиться уже на накопитель.

В дистрибутиве уже есть пакет по фамилии alterator-zram-swap для работы этого типа оптимизации памяти, но он:

  • задействует два разных скрипта для запуска и останова сжатого свопа в памяти, когда достаточно одного на всё про всё;
  • не учитывает возможно уже задействованной и несовместимой с ним технологии zswap (см. п. выше).

Пакет, в общем-то, и не нужен: достаточно всего пары файлов — скрипта и юнита.

Юнит '/lib/systemd/system/zram-swap.service':

[Unit]
Description = Enable and configure zram-swap module
DefaultDependencies = no
After = multi-user.target

[Service]
ExecStop = /usr/bin/zram-swap stop
ExecStart = /usr/bin/zram-swap start
ExecReload = /usr/bin/zram-swap restart
RemainAfterExit = yes

[Install]
WantedBy = swap.target

Скрипт /usr/bin/zram-swap:

#!/bin/sh

COEFF=512
#COEFF=1024
COMPRESS=lz4

DEV=zram0
ZSWAP=/sys/module/zswap/parameters/enabled

start(){
    SYSDIR=/sys/block/$DEV
    ALGO=$SYSDIR/comp_algorithm

    echo N >$ZSWAP
    modprobe -q zram
    grep -q $COMPRESS $ALGO && echo $COMPRESS >$ALGO
    echo $[COEFF*`awk '/MemTotal/{print $2}' /proc/meminfo`] >$SYSDIR/disksize
    mkswap /dev/$DEV -L $DEV &>/dev/null
    swapon -p 100 /dev/$DEV
}

stop(){
#   DEVZRAM=`awk '/^\/dev\/zram/{print $1}' /proc/swaps`
    DEVZRAM=`awk '/zram/{print $1}' /proc/swaps`
    [ -z "$DEVZRAM" ] || {
        for i in $DEVZRAM; do
            swapoff "$i"
        done
        rmmod zram
    }
    echo Y >$ZSWAP
}

restart(){
    stop
    start
}

status(){
    swapon
}

case $1 in
    start|stop|restart|status) $1;;
    *) restart
esac

Переменные из шапки скрипта про долю отжираемой под своп оперативки COEFF и алгоритм сжатия COMPRESS можно вынести в отдельный конфиг /etc/sysconfig/zram-swap и рулить ими оттуда.