Comment activer en permanence le swap compressé de RAM? Quelle version utiliser?

11

EDIT: En précis, il y a maintenant zram-config. C'est un travail novateur de compression jusqu'à la moitié de votre mémoire RAM répartie sur des périphériques d'échange $ (nombre de cœurs de processeur). Cela n'a pas toujours commencé au démarrage mais la publication sudo service zram-config startfonctionne.

J'ai activé compcache = "256 M" /etc/initramfs-tools/initramfs.confcomme décrit ici (par moi: P). Cela - je crois - crée /dev/ramzswap0mais il n'est jamais activé comme swap. Cela ne fonctionne qu'après mkswap&& swapon.

Ensuite, il y a le module zram qui crée /dev/zram. Est-ce autre chose? Il fonctionne de la même manière mais /dev/ramzswapest créé à partir du module ramzswap.

À la fin de la journée, je veux avoir un swap compressé dans le bélier et utiliser le meilleur des deux et pour cela, j'ai besoin de savoir comment l'activer en permanence de manière non hackeuse. Comment cela se fait-il?

J'ai écrit sur ramzswap dans Lucid ici mais les choses ont changé dans Natty. Vous pouvez toujours activer ramzswap dans initramfs.conf mais il n'est pas activé.

PS: J'ai scanné toutes les règles udev dans / lib et / etc mais je n'ai rien trouvé d'intéressant.

turbo
la source

Réponses:

2

Il existe maintenant un PPA qui installe un script Upstart approprié pour activer zram au démarrage. Il choisit la taille et le nombre corrects de périphériques d'échange compressés pour votre système.

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

Ryan C. Thompson
la source
2
il y a aussi zram-config en précis maintenant.
turbo
Pourquoi a-t-il été retiré de Raring 13.04?
NoBugs
Le PPA n'a probablement pas été mis à jour.
Ryan C. Thompson
2

Je me débattais avec le même problème.

Aujourd'hui, j'ai trouvé un excellent article de blog à ce sujet. http://weirdfellow.wordpress.com/2011/05/04/compressed-ram-with-zram/

Bien que "sudo start zramswap" n'ait pas fonctionné, lorsque j'ai redémarré mon PC, il a parfaitement résolu mon problème.

Essayez-le.

Shunsuke Watanabe
la source
C'est en fait la première fois que je remarque même qu'il y a / etc / init /. Normalement, j'utilise /etc/init.d/ pour démarrer des trucs au démarrage. Fascinant ...
turbo
/etc/init/est l'endroit où vivent les scripts d'init Upstart. Ceux qui /etc/init.dsont en sont principalement des wrappers de compatibilité qui appellent ceux en /etc/init.
Ryan C. Thompson
1

Voici la solution bon marché. Ajoutez la ligne suivante à /etc/rc.local, avant le exit 0:

find /dev/ -maxdepth 1 -name 'ramzswap*' | while read dev; do
    mkswap $dev
    swapon -p 1000 $dev
done
Ryan C. Thompson
la source
for i in /dev/ramzswap*;do ...serait la meilleure solution, je pense. Encore un peu trop hackish dans mon livre.
turbo
Et alors find /dev/ -maxdepth 1 -name 'ramzswap*' -print0 | while read -d0 dev; do ... ? Cela évitera le problème des noms de fichiers étranges avec une nouvelle ligne.
Cbhihe
@turbo: de vieux trucs ici, mais je pense que la réponse de Ryan ci-dessus est en fait plus générale et plus sûre d'un point de vue de script que ce que vous proposez dans votre commentaire De manière générale, yr pour la boucle peut causer des problèmes pour les noms de fichiers avec espace et / ou caractères spéciaux. Cela étant dit, vous épargnez à votre système un processus.
Cbhihe
1

Directement depuis le wiki Debian. Pour moi, c'est le plus simple.

Tout d'abord, copiez et collez ce code dans /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

Ensuite, exécutez ces deux commandes:

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

Enfin, pour ajouter zram au démarrage:

sudo update-rc.d zram defaults

Terminé.

mchid
la source