Использование 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 и можем почивать на лаврах.