zRAM


[ Пред. ] [ Содержание ] [ След. ]

zRAM


Создан Суббота 30 ноября 2019
http://linuxoidblog.blogspot.com/2015/12/zram-zswap.html
ZRAM - модуль ядра Linux, ранее известный как compcache. До версии ядра 3.14 находился в эксперементальной ветке, с 3.14 перемещён в основную. Суть его в том, что в оперативной памяти создаётся сжатый раздел подкачки (swap). Создавая swap в ОЗУ, мы тем самым хоть и уменьшаем объем доступной оперативной памяти, но тем не менее информация в оперативной памяти всегда хранится в несжатом виде, а при использовании ZRAM происходит следующее: как только системе начинает не хватать оперативной памяти, она начинает активно занимать swap, а так как swap у нас в оперативной-же памяти, то по факту система начинает просто сжимать информацию из оперативки и помещать ее в оперативку же. Скорость работы ОЗУ всегда существенно выше чем дисковой подсистемы, а алгоритмы сжатия lzo и lz4 настолько быстры, что в итоге мы получаем существенное "увеличение" оперативной памяти за счет небольших процессорных издержек на архивацию. Таким образом, ZRAM позволяет разместить в оперативной памяти в несколько раз больше информации за счёт сжатия. Эта технология активно используется в Android, ТВ-приставках, ChromeOS, SteamOS и много где ещё. При использовании ZRAM, swap-раздел на диске необязателен. Это особенно полезно для SSD-накопителей, так как частые записи для них вредны.

Установка.
sudo apt install zram-config
Всё. Этот скрипт определит количество оперативной памяти в вашей системе, а также количество ядер процессора и создаст swap-файла в памяти (блочные устройства /dev/zram) по количеству ядер. Это нужно потому что сжатие данных однопоточное (один поток==одно ядро). По умолчанию размер такого swap-файла равен 1/2 от общего количества оперативки. После перезагрузки, выполните в терминале команду swapon -s и вы увидите помимо реального swap-раздела, несколько разделов /dev/zram. Далее. Если вы изменяли значение vm.swappiness (для уменьшения порога включения подкачки), например выставили значение vm.swappiness = 10, то измените его на 40, дабы уже при исчерпании 60% оперативки, включался ZRAM. Если вы ничего не трогали, то можете либо оставить значение по умолчанию (60, то есть при исчерпании 40% оперативки), либо:
sudo nano /etc/sysctl.conf
Дописываем в конец строку:
vm.swappiness = 40
сохраняем и выполняем:
sudo sysctl -p
либо перезагружаемся. Вот и всё. Для Debian всё немного сложнее. Но совсем чуть чуть :) Открываем терминал, вводим:
sudo nano /etc/init.d/zram
Вставляем следующий скрипт:
#!/bin/sh
### BEGIN INIT INFO
# Provides: zram
# Required-Start: $local_fs
# Required-Stop: $local_fs
# Default-Start: S
# Default-Stop: 0 1 6
# Short-Description: Use compressed RAM as in-memory swap
# Description: Use compressed RAM as in-memory swap
### END INIT INFO
# Author: Antonio Galea <antonio.galea@gmail.com>
# Thanks to Przemysław Tomczyk for suggesting swapoff parallelization
FRACTION=50
MEMORY=`perl -ne'/^MemTotal:\s+(\d+)/ && print $1*1024;' < /proc/meminfo`
CPUS=`grep -c processor /proc/cpuinfo`
SIZE=$(( MEMORY * FRACTION / 100 / CPUS ))
case "$1" in
"start")
param=`modinfo zram|grep num_devices|cut -f2 -d:|tr -d ' '`
modprobe zram $param=$CPUS
for n in `seq $CPUS`; do
i=$((n - 1))
echo $SIZE > /sys/block/zram$i/disksize
mkswap /dev/zram$i
swapon /dev/zram$i -p 10
done
;;
"stop")
for n in `seq $CPUS`; do
i=$((n - 1))
swapoff /dev/zram$i && echo "disabled disk $n of $CPUS" &
done
wait
sleep .5
modprobe -r zram
;;
*)
echo "Usage: `basename $0` (start | stop)"
exit 1
;;
esac
Сохраняем. Далее даём права на исполнение:
sudo chmod +x /etc/init.d/zram
и активируем:
sudo insserv zram
Перезагружаемся и всё.


Содержание