Como habilitar permanentemente a troca de ram compactada? Qual versão usar?

11

EDIT: Em preciso, há agora zram-config. É um trabalho inicial que comprime até metade da sua ram espalhada por dispositivos de troca $ (número de núcleos da CPU). Nem sempre começou na inicialização, mas a emissão sudo service zram-config startfunciona.

Ativei o compcache = "256 M" /etc/initramfs-tools/initramfs.confconforme descrito aqui (por mim: P). Isso - acredito - cria, /dev/ramzswap0mas nunca é ativado como swap. Funciona somente após mkswap&& swapon.

Depois, há o módulo zram que cria /dev/zram. É algo mais? Funciona da mesma maneira, mas /dev/ramzswapé criado a partir do módulo ramzswap.

No final do dia, quero ter uma troca compactada no ram e usar o melhor dos dois e, para isso, preciso saber como habilitá-lo permanentemente de uma maneira não hackeada. Como isso é feito?

Eu escrevi sobre ramzswap no Lucid aqui, mas as coisas mudaram em Natty. Você ainda pode ativar o ramzswap no initramfs.conf, mas ele não é ativado.

PS: Examinei todas as regras do udev em / lib e / etc, mas não encontrei nada de interessante.

turbo
fonte

Respostas:

2

Agora existe um PPA que instala um script Upstart adequado para ativar o zram no momento da inicialização. Ele escolhe o tamanho e o número corretos de dispositivos de troca compactados para o seu sistema.

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

Ryan C. Thompson
fonte
2
também há o zram-config em preciso agora.
turbo
Por que foi removido do Raring 13.04?
NoBugs
O PPA provavelmente não foi atualizado.
Ryan C. Thompson
2

Eu estava lutando com o mesmo problema.

Hoje encontrei um excelente post sobre isso. http://weirdfellow.wordpress.com/2011/05/04/compressed-ram-with-zram/

Embora o "sudo start zramswap" não tenha funcionado, quando reiniciei o PC, ele resolveu meu problema perfeitamente.

Tente.

Shunsuke Watanabe
fonte
Essa é realmente a primeira vez que eu notei que existe / etc / init /. Normalmente eu uso /etc/init.d/ para iniciar coisas na inicialização. Fascinating ...
turbo
/etc/init/é onde vivem os scripts de inicialização do Upstart. Os que estão em /etc/init.dsua maioria são apenas invólucros de compatibilidade que os chamam /etc/init.
Ryan C. Thompson
1

Aqui está a solução barata. Adicione a seguinte linha a /etc/rc.local, antes de exit 0:

find /dev/ -maxdepth 1 -name 'ramzswap*' | while read dev; do
    mkswap $dev
    swapon -p 1000 $dev
done
Ryan C. Thompson
fonte
for i in /dev/ramzswap*;do ...seria a melhor solução que eu acho. Ainda um pouco tolo demais no meu livro.
turbo
Que tal find /dev/ -maxdepth 1 -name 'ramzswap*' -print0 | while read -d0 dev; do ... ? Isso evitará o problema de um nome de arquivo estranho com uma nova linha.
precisa saber é o seguinte
@ turbo: coisas antigas aqui, mas acredito que a resposta de Ryan acima é realmente mais geral e mais segura do ponto de vista dos scripts do que o que você propõe no seu comentário. De um modo geral, o ano para loop pode causar problemas para nomes de arquivos com espaço e ou caracteres especiais. Dito isto, você poupa um processo ao sistema.
precisa saber é o seguinte
1

Diretamente do wiki Debian. Para mim, isso é o mais fácil.

Primeiro, copie e cole esse código no /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 <[email protected]>
# 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

Em seguida, execute estes dois comandos:

sudo chmod +x /etc/init.d/zram
sudo /etc/init.d/zram start

Por fim, para adicionar o zram na inicialização:

sudo update-rc.d zram defaults

Feito.

mchid
fonte