Как навсегда включить сжатый обмен оперативной памяти? Какую версию использовать?

11

РЕДАКТИРОВАТЬ: в точном есть сейчас zram-config. Это сложная задача - сжать до половины объема оперативной памяти на $ (количество ядер ЦП) устройств подкачки. Это не всегда начиналось при загрузке, но выдача sudo service zram-config startработ.

Я включил compcache = "256 M", /etc/initramfs-tools/initramfs.confкак описано здесь (мной: P). Это - я считаю - создает, /dev/ramzswap0но никогда не включается как своп. Работает только после mkswap&& swapon.

Тогда есть модуль Zram, который создает /dev/zram. Это что-то еще? Он работает так же, но /dev/ramzswapсоздается из модуля ramzswap.

В конце дня я хочу получить сжатый своп в оперативной памяти и использовать лучшее из двух, и для этого мне нужно знать, как включить его на постоянной основе без хакерской атаки. Как это сделать?

Я писал о ramzswap в Lucid здесь , но все изменилось в Natty. Вы все еще можете включить ramzswap в initramfs.conf, но он не активируется.

PS: я просмотрел все правила udev в / lib и / etc, но ничего интересного не нашел.

турбо
источник

Ответы:

2

Теперь есть PPA, который устанавливает правильный скрипт Upstart для включения zram во время загрузки. Он выбирает правильный размер и количество сжатых устройств подкачки для вашей системы.

https://launchpad.net/~shnatsel/+archive/zram

Райан К. Томпсон
источник
2
теперь есть и точный zram-config.
турбо
Почему он был удален из Raring 13.04?
NoBugs
PPA, вероятно, не был обновлен.
Райан Томпсон
2

Я боролся с той же проблемой.

Сегодня я нашел отличный пост об этом в блоге. http://weirdfellow.wordpress.com/2011/05/04/compressed-ram-with-zram/

Хотя «sudo start zramswap» не работал, когда я перезагружал свой компьютер, он отлично решил мою проблему.

Попытайся.

Шунсуке Ватанабэ
источник
На самом деле это первый раз, когда я заметил, что существует / etc / init /. Обычно я использую /etc/init.d/ для запуска вещей при загрузке. Увлекательный ...
турбо
/etc/init/где находятся сценарии инициализации Upstart. Те, что в /etc/init.dосновном, являются просто упаковщиками совместимости, которые вызывают те, в которых /etc/init.
Райан К. Томпсон
1

Вот дешевое решение. Добавьте следующую строку /etc/rc.localперед exit 0:

find /dev/ -maxdepth 1 -name 'ramzswap*' | while read dev; do
    mkswap $dev
    swapon -p 1000 $dev
done
Райан К. Томпсон
источник
for i in /dev/ramzswap*;do ...было бы лучшее решение, я думаю. Слишком хакерский в моей книге.
турбо
Как насчет find /dev/ -maxdepth 1 -name 'ramzswap*' -print0 | while read -d0 dev; do ... ? Это избавит от проблемы странного имени файла с новой строкой в ​​нем.
Cbhihe
@turbo: старые вещи здесь, но я полагаю, что ответ Райана на самом деле более общий и безопасный с точки зрения сценариев, чем то, что вы предлагаете в своем комментарии. Вообще говоря, цикл yr может вызвать проблемы для имен файлов с пробелами или специальными символами. Это говорит о том, что вы избавите свою систему от процесса.
Cbhihe
1

Прямо из вики Debian. Для меня это самый простой.

Сначала скопируйте и вставьте этот код в /etc/init.d/zram

### 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 ))

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 /etc/init.d/zram start

Наконец, чтобы добавить zram при запуске:

sudo update-rc.d zram defaults

Выполнено.

mchid
источник