Avec 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.
[stextbox id= »warning » caption= »Attention ! »]La première partie de l’article s’applique à Raspbian Wheezy ! Si vous utilisez Raspbian Jessie, rendez vous à la fin de l’article.[/stextbox]
Au sommaire :
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
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 :
Si 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…
Sources
- http://en.wikipedia.org/wiki/ZRam
- http://www.recantha.co.uk/blog/?p=1476
- https://extremeshok.com/1457/raspberry-pi-raspbian-zram-compression-compressed-swap-residing-in-ram-over-allocating-memory/
- http://www.fatihacar.com/blog/how-to-increase-swap-space-size-in-linux-system/
- http://raspberry.pi.gw.gd/t50-Using-ZRAM-Virtual-Swap-Compressed.html
- http://www.vincentliefooghe.net/content/linux-gestion-la-ram-et-du-swap
- http://manpages.ubuntu.com/manpages/hardy/man8/dphys-swapfile.8.html
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.
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
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.
merci pour ces information 🙂
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^^
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/
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?
Voici une façon d’utiliser la RAM en disque:
http://caron.ws/UtilisationdeRAMDisque.html
Cela peut servir à faire des échanges.
A bientôt
Christophe
merci pour l’info Christophe 🙂
Ping : Et si on se passait du swap ? | Framboise 314, ...
Ping : Limiter les écritures sur la carte SD | La domogique
Ping : Gagner en réactivité avec Zram – c'est pas mon blog
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
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
En installant BUM (But Up Manager), ça devrait être possible de le désactiver à coup-sûr mais je ne sais plus si ça marche sur RPI (le mien ronronne depuis plus d’1 an, j’ai donc oublié). Sinon, installer rcconf ou pire: sysv-rc-conf (Attention! Il est terrible! Regardez-y à 2 fois…)
Pour installer les 2 premiers:
sudo apt install rcconf bum
Parfait, ca marche!
Merci pour cette mise à jour et longue vie à la Framboise314 🙂
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
ah bon, c’est notre copain systemd 😛
Zram existe toujours du moins sur certaines distros (LinuxLite et Mate 16.04)
Possible de l’installer via le repo github du développeur :
https://pimylifeup.com/raspberry-pi-zram/
merci 🙂