Zram swap alt linux

ZSWAP

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

Включить её можно, конечно, параметром ядра, но вовсе не обязательно — достаточно отправить правильную букву в нужный файл:

# echo Y >/sys/module/zswap/parameters/enabled
[Unit] Description = Enable and configure zswap DefaultDependencies = no After = multi-user.target [Service] ExecStart = /usr/bin/zswap on ExecStop = /usr/bin/zswap off RemainAfterExit = yes [Install] WantedBy = swap.target 

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

#!/bin/sh LANG=en_US.UTF-8 MODUL=/sys/module/zswap DEBUG=/sys/kernel/debug/zswap SWTCH=$MODUL/parameters/enabled SWAPS=`swapon | grep -cv zram` ZRAMS=`swapon | grep -c zram` Protect() echo "$1" exit 1 > Show() printf "========\n$1\n========\n" grep -R . $2 2>&1 | sed '/uevent/d;/\/enabled/d;s|_percent|, %|;s|.*/||;s|:|: |;s|_| |g' > case $1 in # switch zswap on/off 1|Y|y|on) [ $ZRAMS -gt 0 ] && Protect "can't start: zram-swap is already in use" [ $SWAPS -lt 2 ] && Protect "swap partition not found" echo Y >$SWTCH;; 0|N|n|off) echo N >$SWTCH esac case `cat $SWTCH` in # is zswap in use? N) echo zswap disabled ;; Y) Show Settings $MODUL Show Stats $DEBUG PAGE=`cat $DEBUG/stored_pages` POOL=`cat $DEBUG/pool_total_size` [ $POOL -gt 0 ] && printf "compression ratio: %s\n" `echo "scale=2;4096*$PAGE/$POOL" | bc` || printf "\nzswap is not in use\n" esac 
# zswap ======== Settings ======== same filled pages enabled: Y enabled: Y max pool, %: 20 compressor: zstd zpool: zbud accept threshold, %: 90 ======== Stats ======== same filled pages: 1247 stored pages: 14351 pool total size: 26836992 duplicate entry: 0 written back pages: 0 reject compress poor: 0 reject kmemcache fail: 0 reject alloc fail: 0 reject reclaim fail: 0 pool limit hit: 0 compression ratio: 2.19

Примечание: скрипт позволяет включать/выключать zswap, если тому не препятствует запущенный zram-swap или отсутствие задействованного своп-раздела.

ZRAM

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

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

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

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

[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 
#!/bin/sh COEFF=512 # Использовать половину ОЗУ (за счёт сжатия получится меньше четверти). #COEFF=1024 # Использовать ОЗУ полностью (за счёт сжатия получится меньше половины). COMPRESS=lz4 PART=zram0 DEV=/dev/$PART SYSDIR=/sys/block/$PART ALGO=$SYSDIR/comp_algorithm ZSWAP=`cat /sys/module/zswap/parameters/enabled` start() [ "$ZSWAP" == "Y" ] && echo "can't start: zswap is already in use" ||  modprobe -q zram grep -q $COMPRESS $ALGO && echo $COMPRESS >$ALGO awk '/MemTotal/$COEFF'>' /proc/meminfo >$SYSDIR/disksize mkswap $DEV -L $PART &>/dev/null swapon -p 100 $DEV > > stop() ZRAM=`awk '/zram/' /proc/swaps` [ -z "$ZRAM" ] ||  for PART in $ZRAM; do swapoff "$PART" done && rmmod zram > > restart() stop start > status() swapon > case $1 in start|stop|restart|status) $1;; *) restart esac 

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

Источник

ZSWAP

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

Включить её можно, конечно, параметром ядра, но вовсе не обязательно — достаточно отправить правильную букву в нужный файл:

# echo Y >/sys/module/zswap/parameters/enabled
[Unit] Description = Enable and configure zswap DefaultDependencies = no After = multi-user.target [Service] ExecStart = /usr/bin/zswap on ExecStop = /usr/bin/zswap off RemainAfterExit = yes [Install] WantedBy = swap.target 

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

#!/bin/sh LANG=en_US.UTF-8 MODUL=/sys/module/zswap DEBUG=/sys/kernel/debug/zswap SWTCH=$MODUL/parameters/enabled SWAPS=`swapon | grep -cv zram` ZRAMS=`swapon | grep -c zram` Protect() echo "$1" exit 1 > Show() printf "========\n$1\n========\n" grep -R . $2 2>&1 | sed '/uevent/d;/\/enabled/d;s|_percent|, %|;s|.*/||;s|:|: |;s|_| |g' > case $1 in # switch zswap on/off 1|Y|y|on) [ $ZRAMS -gt 0 ] && Protect "can't start: zram-swap is already in use" [ $SWAPS -lt 2 ] && Protect "swap partition not found" echo Y >$SWTCH;; 0|N|n|off) echo N >$SWTCH esac case `cat $SWTCH` in # is zswap in use? N) echo zswap disabled ;; Y) Show Settings $MODUL Show Stats $DEBUG PAGE=`cat $DEBUG/stored_pages` POOL=`cat $DEBUG/pool_total_size` [ $POOL -gt 0 ] && printf "compression ratio: %s\n" `echo "scale=2;4096*$PAGE/$POOL" | bc` || printf "\nzswap is not in use\n" esac 
# zswap ======== Settings ======== same filled pages enabled: Y enabled: Y max pool, %: 20 compressor: zstd zpool: zbud accept threshold, %: 90 ======== Stats ======== same filled pages: 1247 stored pages: 14351 pool total size: 26836992 duplicate entry: 0 written back pages: 0 reject compress poor: 0 reject kmemcache fail: 0 reject alloc fail: 0 reject reclaim fail: 0 pool limit hit: 0 compression ratio: 2.19

Примечание: скрипт позволяет включать/выключать zswap, если тому не препятствует запущенный zram-swap или отсутствие задействованного своп-раздела.

ZRAM

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

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

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

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

[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 
#!/bin/sh COEFF=512 # Использовать половину ОЗУ (за счёт сжатия получится меньше четверти). #COEFF=1024 # Использовать ОЗУ полностью (за счёт сжатия получится меньше половины). COMPRESS=lz4 PART=zram0 DEV=/dev/$PART SYSDIR=/sys/block/$PART ALGO=$SYSDIR/comp_algorithm ZSWAP=`cat /sys/module/zswap/parameters/enabled` start() [ "$ZSWAP" == "Y" ] && echo "can't start: zswap is already in use" ||  modprobe -q zram grep -q $COMPRESS $ALGO && echo $COMPRESS >$ALGO awk '/MemTotal/$COEFF'>' /proc/meminfo >$SYSDIR/disksize mkswap $DEV -L $PART &>/dev/null swapon -p 100 $DEV > > stop() ZRAM=`awk '/zram/' /proc/swaps` [ -z "$ZRAM" ] ||  for PART in $ZRAM; do swapoff "$PART" done && rmmod zram > > restart() stop start > status() swapon > case $1 in start|stop|restart|status) $1;; *) restart esac 

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

Источник

Alterator-zram-swap

Модуль Настройка zram-swap позволяет инициировать и настроить устройства подкачки в /dev/zramX.

Запуск

Модуль Настройка zram-swap доступен в GUI: раздел Система ▷ Настройка zram-swap

Интерфейс модуля Настройка zram-swap

Использование модуля

Для того чтобы активировать диски zram следует отметить пункт «Включить модуль zram-swap» и нажать кнопку «Применить».

# swapon -s Имя файла Тип Размер Исп-но Приоритет /dev/sda1 partition 130044 0 -2 /dev/zram0 partition 249820 10748 100 /dev/zram1 partition 249820 6916 100
$ cat /sys/block/zram0/comp_algorithm lzo lzo-rle [lz4] lz4hc 842 zstd

Настройка модуля

На данный момент модуль Alterator не предоставляет графического инструмента для тонкой настройки модуля zram-swap, поэтому для тонкой настройки потребуется вручную отредактировать скрипты запуска соответствующего юнита systemd: /lib/systemd/system/zram-swap.service

Содержимое юнита по умолчанию:

[Unit] Description=Enable and configure zram-swap module DefaultDependencies=no After=multi-user.target [Service] Type=simple ExecStart=/usr/bin/zram-swap-start ExecStop=/usr/bin/zram-swap-stop RemainAfterExit=yes [Install] WantedBy=swap.target

Требуется изменить скрипт запуска (ExecStart) /usr/bin/zram-swap-start
Это обычный bash-скрипт.
Содержимое по умолчанию:

#!/bin/bash NPROC=$(grep -c ^processor /proc/cpuinfo) [ $NPROC != 0 ] || NPROC=1 modprobe -q zram num_devices=$NPROC MEMTOT=$(grep MemTotal /proc/meminfo | awk ' < print $2 * 1024 >') MEMSIZE=$(($MEMTOT / 2 / $NPROC)) for i in $(seq 0 $(($NPROC - 1))) do grep -q lz4 /sys/block/zram$i/comp_algorithm && echo lz4 > /sys/block/zram$i/comp_algorithm echo $MEMSIZE > /sys/block/zram$i/disksize mkswap /dev/zram$i -L zram$i &>/dev/null swapon -p 100 /dev/zram$i done

Из этого наиболее важны следующие переменные:
$NPROC — содержит количество ядер процессора.
$MEMTOT — содержит общий объем памяти в байтах.
$MEMSIZE определяется как половина общего объема памяти, разделенная на количество ядер процессора: $(($MEMTOT / 2 / $NPROC)).
Чтобы изменить количество устройств /dev/zramX, достаточно поменять параметры загрузки модуля в скрипте:

modprobe -q zram num_devices=$NPROC

Как можно видеть, количество устройств по умолчанию, действительно, равно количеству ядер процессора. Можно уменьшить количество устройств, уменьшив переменную $NPROC в несколько раз, например, в два раза:

modprobe -q zram num_devices=$(($NPROC/2))

Общий объем zram-swap определяется как суммарный объем всех устройств /dev/zramX. Объем одного устройства определяется переменной $MEMSIZE, поэтому, чтобы уменьшить объем одного устройства достаточно изменить формулу расчета, взяв в расчет не половину, а например, четверть от общего объема памяти:

Таким образом манипулируя вышеуказанными параметрами можно изменять как количество устройств zram-swap, так и общий объем подкачки.

Источник

Читайте также:  Checkpoint vpn linux install
Оцените статью
Adblock
detector