¿Cómo habilitar permanentemente el intercambio de RAM comprimido? ¿Qué versión usar?

11

EDITAR: En concreto hay ahora zram-config. Es un trabajo inicial que comprime hasta la mitad de su ram distribuido en dispositivos de intercambio de $ (número de núcleos de CPU). No siempre comenzó en el arranque, pero la emisión sudo service zram-config startfunciona.

Habilité compcache = "256 M" /etc/initramfs-tools/initramfs.confcomo se describe aquí (por mí: P). Esto, creo, crea, /dev/ramzswap0pero nunca se habilita como intercambio. Funciona solo después de mkswap&& swapon.

Luego está el módulo zram que crea /dev/zram. ¿Es algo más? Funciona de la misma manera, pero /dev/ramzswapse crea a partir del módulo ramzswap.

Al final del día, quiero tener un intercambio comprimido en ram y usar el mejor de los dos y para eso necesito saber cómo habilitarlo permanentemente de una manera no hack. ¿Cómo se hace esto?

Escribí sobre ramzswap en Lucid aquí, pero las cosas han cambiado en Natty. Todavía puede habilitar ramzswap en initramfs.conf pero no se activa.

PD: Escaneé todas las reglas de udev en / lib y / etc pero no encontré nada de interés.

turbo
fuente

Respuestas:

2

Ahora hay un PPA que instala un script Upstart adecuado para habilitar zram en el arranque. Elige el tamaño correcto y la cantidad de dispositivos de intercambio comprimidos para su sistema.

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

Ryan C. Thompson
fuente
2
También hay zram-config en preciso ahora.
turbo
¿Por qué se eliminó de Raring 13.04?
NoBugs
El PPA probablemente no ha sido actualizado.
Ryan C. Thompson
2

Estaba luchando con el mismo problema.

Hoy encontré una excelente publicación de blog al respecto. http://weirdfellow.wordpress.com/2011/05/04/compressed-ram-with-zram/

Aunque "sudo start zramswap" no funcionó, cuando reinicié mi PC resolvió mi problema perfectamente.

Intentalo.

Shunsuke Watanabe
fuente
Esa es la primera vez que incluso noté que hay / etc / init /. Normalmente uso /etc/init.d/ para iniciar cosas en el arranque. Fascinante ...
turbo
/etc/init/es donde viven los guiones de inicio de Upstart. Los que /etc/init.destán en su mayoría son solo envoltorios de compatibilidad que llaman a los que están adentro /etc/init.
Ryan C. Thompson
1

Aquí está la solución barata. Agregue la siguiente línea 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
fuente
for i in /dev/ramzswap*;do ...Sería la mejor solución, creo. Todavía un poco demasiado hack en mi libro.
turbo
¿Qué tal find /dev/ -maxdepth 1 -name 'ramzswap*' -print0 | while read -d0 dev; do ... ? Evitará el problema del nombre de archivo extraño con nueva línea.
Cbhihe
@turbo: cosas viejas aquí, pero creo que la respuesta de Ryan anterior es en realidad más general y más segura desde el punto de vista de los scripts que lo que propones en tu comentario. En términos generales, y for loop puede causar problemas para los nombres de archivos con espacio y / o caracteres especiales. Dicho esto, le sobra a su sistema un proceso.
Cbhihe
1

Directamente de la wiki de Debian. Para mí, esto es lo más fácil.

Primero, copie y pegue este código en /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

Luego, ejecute estos dos comandos:

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

Finalmente, para agregar zram al inicio:

sudo update-rc.d zram defaults

Hecho.

mchid
fuente