Publié le 9 juin 2014 - par

Et si on se passait du swap ?

swap_250pxAvec le temps les cartes SD s’améliorent et leur durée de vie augmente. Cependant, le Raspberry Pi sollicite fortement la carte SD en swappant sur celle-ci.

Pour ceux qui démarrent en Linux (mais ça existe aussi pour les autres systèmes d’exploitation…), le swap consiste à transférer sur le disque dur (ici la carte SD) des pages mémoires inactives pour libérer de la place pour d’autres applications.

 

Attention !
La première partie de l’article s’applique à Raspbian Wheezy ! Si vous utilisez Raspbian Jessie, rendez vous à la fin de l’article.

Swap

Le système va ensuite rechercher ces pages quand l’application concernée en a de nouveau besoin. C’est le cas par exemple lorsque vous travaillez sur une image en haute résolution. Vous agrandissez une partie de l’image pour la retoucher. Lorsque vous déplacez l’image (par exemple vers le haut) la partie manquante apparait parfois lentement. C’est tout simplement le temps qu’il faut pour aller récupérer la partie correspondante sur le disque dur, où elle était momentanément stockée.

Donc le swap sur le Raspberry Pi présente deux inconvénients majeurs : Il réduit la durée de vie de la carte SD et peut ralentir dramatiquement le fonctionnement de la framboise314.

Si vous avez déporté le système de fichiers racine sur un disque dur USB, vous avez éliminé le problème d’usure, mais pas la lenteur de l’accès au fichier de swap.

Affichage de l’espace de swap sur le Raspberry Pi

Lorsque vous êtes connecté, ouvrez une session root sur le Raspberry Pi :

sudo su

Ensuite affichez la place disponible en mémoire free -htl

pi@raspberrypi ~ $ sudo su
root@raspberrypi:/home/pi# free -htl
             total       used       free     shared    buffers     cached
Mem:          437M       405M        31M         0B        28M       277M
Low:          437M       405M        31M
High:           0B         0B         0B
-/+ buffers/cache:       100M       337M
Swap:          99M         0B        99M
Total:        537M       405M       131M

On voit que sur ce Raspberry Pi, la zone de swap fait 99Mo (allez, je vous la laisse à 100Mo, prix d’ami !).

Mais où qu’elle est donc cette zone de swap ?

root@raspberrypi:/etc# dphys-swapfile setup
want /var/swap=100MByte, checking existing: keeping it

La zone de swap se trouve dans /var qui est…. sur la carte SD ! Bingo !

C’est un fichier de swap (qui occupe 100Mo d’espace sur la carte SD) et pas une partition comme habituellement en Linux.

root@raspberrypi:/var# ls -al
total 102448
drwxr-xr-x 12 root root      4096 juin   5 07:41 .
drwxr-xr-x 22 root root      4096 juin   5 07:41 ..
drwxr-xr-x  2 root root      4096 juin   6 06:25 backups
drwxr-xr-x 11 root root      4096 févr. 12 18:28 cache
drwxr-xr-x 39 root root      4096 janv.  7 23:02 lib
drwxrwsr-x  2 root uucp      4096 oct.  17  2013 local
lrwxrwxrwx  1 root root         9 janv.  7 22:01 lock -> /run/lock
drwxr-xr-x  9 root root      4096 juin   9 18:31 log
drwxrwsr-x  2 root mail      4096 janv.  7 22:01 mail
drwxr-xr-x  2 root root      4096 janv.  7 22:01 opt
drwxr-xr-x  2 root root      4096 juin   5 07:41 pulseway
lrwxrwxrwx  1 root root         4 janv.  7 22:01 run -> /run
drwxr-xr-x  4 root root      4096 janv.  7 22:07 spool
-rw-------  1 root root 104857600 janv.  8 00:32 swap
drwxrwxrwt  2 root root      4096 mai   19 17:02 tmp

Bon, résumons : Si vous êtes un utilisateur lambda du Raspberry Pi, ne vous inquiétez pas de la zone de swap. En principe, pour des utilisations de base, le swap est peu sollicité. Donc pas de ralentissement et pas de mise en danger de la vie de la carte SD.

Vous voulez savoir si votre swap sert à quelque chose ? Mettez en route les applications pour lesquelles vous voulez tester l’utilisation du fichier de swap. Dans un terminal en tant que root, lancez la commande top :

top_01Si la ligne KiB Swap : indique imperturbablement 0, alors vous faites partie des élus ! Vous allez pouvoir supprimer le swap.

La commande est dphys-swapfile swapoff (dphys-swapfile swapon permet de l’activer !)

root@raspberrypi:/var# dphys-swapfile swapoff
root@raspberrypi:/var# free
total       used       free     shared    buffers     cached
Mem:        447996     388092      59904          0      16200     265956
-/+ buffers/cache:     105936     342060
Swap:            0          0          0

La même commande dphys-swapfile accepte le paramètre setup qui va recalculer la taille optimale du swap et créer le fichier d’échange.

root@raspberrypi:/var# dphys-swapfile setup
want /var/swap=100MByte, generating swapfile ... of 100MBytes

Enfin si vous voulez supprimer (proprement) le fichier de swap vous utiliserez la commande dphys-swapfile uninstall :

 root@raspberrypi:/var# dphys-swapfile uninstall

La regrettée solution zRam

Fondamentalement, zRam permet au système d’utiliser la RAM comme espace d’échange, mais dans un mode compressé qui lui permet d’apparaître comme un ensemble RAM + Swap plus grand que la mémoire présente sur le système…

zRam était compilé dans le noyau Raspbian à ses débuts mais… en est à présent absent (trop peu utilisé…?)

Supprimer le swap sous Jessie

Bien entendu sous Jessie le swap a été conservé

pi@raspberrypi:~ $ free
total used free shared buffers cached
Mem: 996468 912448 84020 6736 61812 719496
-/+ buffers/cache: 131140 865328
Swap: 102396 0 102396

On pratique de la même manière que pour Wheezy

pi@raspberrypi:~ $ sudo apt-get remove dphys-swapfile
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances
Lecture des informations d'état... Fait
Le paquet suivant a été installé automatiquement et n'est plus nécessaire :
dc
Veuillez utiliser « apt-get autoremove » pour le supprimer.
Les paquets suivants seront ENLEVÉS :
dphys-swapfile
0 mis à jour, 0 nouvellement installés, 1 à enlever et 0 non mis à jour.
Après cette opération, 85,0 ko d'espace disque seront libérés.
Souhaitez-vous continuer ? [O/n] o
(Lecture de la base de données... 32173 fichiers et répertoires déjà installés.)
Suppression de dphys-swapfile (20100506-1) ...
Traitement des actions différées (« triggers ») pour man-db (2.7.0.2-5) ...
pi@raspberrypi:~ $ sudo apt-get autoremove
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances
Lecture des informations d'état... Fait
Les paquets suivants seront ENLEVÉS :
dc
0 mis à jour, 0 nouvellement installés, 1 à enlever et 0 non mis à jour.
Après cette opération, 111 ko d'espace disque seront libérés.
Souhaitez-vous continuer ? [O/n] o
(Lecture de la base de données... 32161 fichiers et répertoires déjà installés.)
Suppression de dc (1.06.95-9) ...
Traitement des actions différées (« triggers ») pour install-info (5.2.0.dfsg.1-6) ...
Traitement des actions différées (« triggers ») pour man-db (2.7.0.2-5) ...
pi@raspberrypi:~ $

On peut ensuite supprimer de fichier qu’utilise Jessie pour le swap

pi@raspberrypi:~ $ sudo rm -f /var/swap
pi@raspberrypi:~ $ free
total used free shared buffers cached
Mem: 996468 903912 92556 6736 62512 721136
-/+ buffers/cache: 120264 876204
Swap: 0 0 0

et après un reboot :

pi@raspberrypi:~ $ free
total used free shared buffers cached
Mem: 996468 126044 870424 6696 7972 73400
-/+ buffers/cache: 44672 951796
Swap: 0 0 0

Conclusion

Vous êtes déjà passé(e) par la case « Suppression du swap »? Faites nous part du résultat de cette opération. Si vous connaissez un remplaçant de zRam, utilisez les commentaires ci-dessous pour informer les RasPinautes intéressés…

Share Button

À propos François MOCQ

Électronicien d'origine, devenu informaticien, et passionné de nouvelles technologies, formateur en maintenance informatique puis en Réseau et Télécommunications. Dès son arrivée sur le marché, le potentiel offert par Raspberry Pi m’a enthousiasmé j'ai rapidement créé un blog dédié à ce nano-ordinateur (www.framboise314.fr) pour partager cette passion. .

15 réflexions au sujet de « Et si on se passait du swap ? »

  1. Philippe

    Bonjour,

    Etonnant le coups du swap sur mon raspbian :
    root@raspberrypi:~# free -htl
    total used free shared buffers cached
    Mem: 373M 330M 43M 0B 25M 265M
    Low: 373M 330M 43M
    High: 0B 0B 0B
    -/+ buffers/cache: 39M 334M
    Swap: 0B 0B 0B
    Total: 373M 330M 43M

    fraichement installé la semaine dernière et mis à jour ce matin.

    Répondre
    1. admin Auteur de l’article

      ah oui! pas besoin de le supprimer… il n’est pas là… Étonnant quand même.
      j’ai fait un update/upgrade avant de faire les manips cet après midi….
      Cordialement
      François

      Répondre
  2. Dodutils

    Le swap n’est utilisé que si le système en a besoin (contrairement à Windows qui ira taper dans le swap même avec 8Go de RAM !).

    Sinon une autre astuce pour rallonger la vie de la SDCard est de mettre en RAM les /tmp /var/log et autres petits répertoires/fichiers (qui adorent être modifiés constamment) en ajoutant quelques lignes dans le /etc/fstab (à modifier en sudo) :

    tmpfs /tmp tmpfs defaults,noatime,nosuid,size=100m 0 0

    tmpfs /var/tmp tmpfs defaults,noatime,nosuid,size=30m 0 0

    tmpfs /var/log tmpfs defaults,noatime,nosuid,mode=0755,size=100m 0 0

    tmpfs /var/run tmpfs defaults,noatime,nosuid,mode=0755,size=2m 0 0

    tmpfs /var/spool/mqueue tmpfs defaults,noatime,nosuid,mode=0700,gid=12,size=30m 0

    On peut aussi éditer le /etc/default/rcS et ajouter la ligne RAMTMP=yes

    Le « mauvais » côté de ce genre de soltuion « RAM » est que dès que le RasPi redémarre on perd les logs vu qu’ils étaient en RAM.

    L’autre mauvais côté et que cela consomme de la RAM (mais limité à la valeur que l’on a indiquée).

    Sinon après on peut aussi mettre tout le système en RAM mais cela devient plus complexe et consomme encore plus de RAM mais disons que ces quelques lignes aideront déjà pas mal.

    Répondre
  3. zodd

    Bonjour,
    Je suis intéressé par le fait de mettre tout le système en ram. Auriez vous un lien vers un tutoriel à ce sujet?
    En tout cas merci pour ces précisions^^

    Répondre
    1. Dodutils

      Il est possible de monter tout le système en lecture seule sans pour autant surcharger la RAM inutilement.

      Cependant cela pose problème avec dpkg qui du coup ne peut plus écrire quand on veut faire des mises à jour mais cela peut être contourné en remettant temporairement le système en lecture/écriture le temps de faire les mises à jour, cet article donne un exemple complet :

      http://blog.gegg.us/2014/03/a-raspbian-read-only-root-fs-howto/

      Répondre
      1. Simon

        Quel est l’intérêt de mettre le système en lecture seule?

        Pouvoir couper/remettre l’alimentation n’importe quand sans passer par un « halt » propre?

        Répondre
  4. Ping : Et si on se passait du swap ? | Framboise 314, ...

  5. Denis Brion

    Bonjour et merci pour cet article; il y a quelque chose qui m’a chagriné cependant -je n’ai pas de RPi sous la main cette semaine pour tester-
    Il existe sur PC des commandes Linux -Unix (BSD) classiques, que je connais depuis 2005, pour activer/desactiver le swap (swapon/ -resp. – swapoff ; elles ont un manuel et des tas de tutoriaux : https://www.digitalocean.com/community/tutorials/how-to-add-swap-on-ubuntu-12-04 ) « swapon » permet en particulier de mettre le swap dans un fichier et non une partition -c’est plus lent, mais si on boote sur clé USB puis monte un disque de grande capacité, ça peut être utile de desactiver le swap sur le disque de boot et le mettre sur un (fichier d’) un disque plus rapide… Est ce que ces commandes classiques existent aussi sur RPi? -je ne suis pas à 100M près, surtout que la charge que j’inflige au RPi ne risque pas d’épuiser son disque en silicium aussi n’ai je jamais pensé à le supprimer pour le moment -quitte à le déplacer si besoin-

    Répondre
  6. Ping : Limiter les écritures sur la carte SD | La domogique

  7. Ping : Gagner en réactivité avec Zram – c'est pas mon blog

  8. Olivier

    Bonjour,
    Pour avoir essayé de mettre en œuvre ce précieux conseil sur ma distri Jessie franchement installée, je m’aperçois qu’à chaque reboot, je fichier swap revient et ce malgré un « uninstall » en règle.
    Existe-t-il une solution pérenne, autre que de le désactiver à chaque démarrage (dans le fichier profile par ex) ?
    Merci d’avance
    Olivier

    Répondre
    1. François MOCQ Auteur de l’article

      Bonjour Olivier
      l’article datait de 2014 et portait sur Wheezy
      j’ai ajouté un paragraphe pour Jessie, testé sur une Jessie Lite.
      Vous me direz si ça fonctionne pour vous
      cordialement
      François

      Répondre
  9. VinyMeuh

    Bonjour

    pour Jessie, une solution moins radicale que la suppression du package dphys-swapfile est de demander ça gentiment à notre copain systemd:

    sudo systemctl disable dphys-swapfile.service

    Répondre

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Complétez ce captcha SVP * Time limit is exhausted. Please reload CAPTCHA.