Использование zRam для оптимизации swap процессов
Cуть вкратце сводится к тому, что в систему до дискового свопа добавляется сжимаемый налету своп, размещенный в оперативной памяти (коэфициент сжатия при броузинге, если верить автору статьи, доходит до 1:10)
Для современного дистрибутива достаточно сделать
sudo apt-get install zram-config
И все настраивается автоматически.
:~$ free
total used free shared buffers cached Память: 4038764 3802184 236580 576944 10392 819764 -/+ буферы/кэш: 2972028 1066736 Swap: 8429272 236476 8192796
:~$ cat /proc/swaps
Filename Type Size Used Priority /dev/sda7 partition 6409896 229180 -1 /dev/zram0 partition 1009688 3656 5 /dev/zram1 partition 1009688 3640 5
Для Debian все чуть сложнее, но как обычно достаточно просто решаемо. Дело в том что модуль zram собран и доступен по умолчанию. В этом легко убедиться выполнив
modprobe -nv zram
Единственное чего я не нашел в Debian так это скрипта автозапуска для этого модуля с передачей ему нужных параметров. (Аналог zram-config в ubuntu) Это не значит что его нет вовсе, но в репозиториях Debian я его отчего то найти не смог. А это значит, что мы напишем этот скрипт сами.
/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=75
MEMORY=`perl -ne'/^MemTotal:s+(d+)/ && print $1*1024;' < /proc/meminfo`
CPUS=`grep -c processor /proc/cpuinfo`
SIZE=$(( MEMORY * FRACTION / 100 / CPUS ))
start(){
param=`modinfo zram|grep num_devices|cut -f2 -d:|tr -d ' '`
#modprobe zram $param=$CPUS
# load dependency modules
# kernels 3.4 onwards
# if ! modprobe zram num_devices=$CPUS
# kernels 3.1 - 3.3
if ! modprobe zram $param=$CPUS
then
echo -e "Your Kernel needs to be compiled with ZRAM support:"
"nnDevice Drivers --> Staging Drivers --> Compressed RAM block device support (M)"
"nDevice Drivers --> Staging Drivers --> Dynamic compression of swap pages and clean pagecache pages (*)"
"nnThe Liquorix Kernel (http://liquorix.net) has ZRAM support built in."
exit 1
fi
echo "zram devices probed successfully"
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
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
sleep 3
start
;;
*)
echo "Usage: `basename $0` (start | stop| restart)"
exit 1
;;
esac
Как вы можете видеть, у ядер версии выше 3.4 немного изменилась опция указания количества ядер, так что я вписал в скрипт обе, что бы была возможность раскоментировать нужную строку в будущем. Итак теперь остается добавить скрипт в автозагрузку
chmod 755 /etc/init.d/zram
chmod +x /etc/init.d/zram
sudo update-rc.d zram defaults
sudo service zram start
Все теперь мы активировали модуль zram и можем почивать на лаврах.
