Retrouvez cet article dans : Linux Pratique Hors série 8
La mémoire swap est mécanisme de mémoire virtuelle. Le but de ce mécanisme est de permettre à des applications d'utiliser plus de mémoire vive que n'en contient physiquement la machine. Pour réaliser cela, l'astuce consiste à utiliser un support de stockage de masse (disque dur) pour simuler la mémoire.
Très grossièrement, lorsqu'une application demande plus de mémoire qu'il n'en existe de disponible, le système détermine quelle application utilise la mémoire à un instant donné. Plutôt que d'allouer des morceaux de mémoire à toutes les applications, il met alors en veille certaines d'entre elles et copie sur le disque une image de la mémoire qu'elles utilisent. Il libère ainsi des morceaux de mémoire vive pour l'application gourmande.
Lorsqu'il est temps pour d'autres applications de fonctionner, le système fait l'opération inverse. Il met en veille d'autres applications, copie une image de la mémoire qu'elles utilisent sur le disque, charge l'image de la mémoire des applications en attente et les laisse fonctionner pour un temps. Le processus se poursuit jusqu'à ce que la ou les application(s) gourmande(s) se terminent. Il n'est alors plus nécessaire de faire appel à la mémoire virtuelle et les applications restantes se partagent normalement la mémoire physique.
Il faut bien comprendre que ce mécanisme a un coût pour le système. La mémoire virtuelle n'est largement pas aussi rapide que la mémoire physique. Les lectures/écritures intensives sur le disque, les opérations de mise en veille et reprise de l'exécution des applications et l'organisation même du système provoque une forte consommation du processeur et du disque.
De nos jours, avec des configurations possédant souvent plus de 512 Mo de mémoire physique, si votre système GNU/Linux se met à « swapper », c'est que quelque chose ne va pas. Soit, il s'agit d'un dysfonctionnement d'une application, soit vous en demandez trop à la machine (Gnome/KDE + un document OpenOffice de 300 pages + Blender + The Gimp et une image de 75 Mo + Firefox avec 25 onglets de pages pleines de Flash = un utilisateur qui confond GNU/Linux avec le système miracle qui sauvera le monde).
Comment choisir la taille de la partition dédiée au swap lors de l'installation ? Une réponse courante et erronée est que la taille du swap doit être le double de la mémoire physique. Lorsque les ordinateurs ne possédaient que 32 ou 64 Mo de mémoire vive cette réponse était valable. Aujourd'hui, ce n'est plus le cas. La bonne réponse est : ça dépend de vos besoins.
Habituellement 512 Mo de swap est suffisant pour pallier un problème temporaire d'engorgement de la mémoire. Si le problème de l'utilisation de la mémoire virtuelle est récurrent, il faut alors se pencher vers d'autres solutions comme l'ajout de mémoire, la réévaluation de vos besoins ou le changement de vos habitudes. Un système qui swappe tout le temps n'est pas utilisable et caractérise forcément un problème, qu'il s'agisse de 128 Mo de mémoire virtuelle ou de 4 Go.
Dans tous les cas, si vous avez subitement (mais temporairement) besoin de plus de mémoire virtuelle, par exemple pour un rendu gourmand en mémoire avec Blender ou POV-Ray, vous pouvez facilement en ajouter (en tant que root bien sûr) :
Avant opération :
# free -m | grep Swap Swap: 494 95 427
Nous disposons de 494 Mo de mémoire virtuelle. Commençons par créer un fichier daswap (le nom importe peu) pour le swap :
# dd if=/dev/zero of=daswap bs=1024 count=30000 30000+0 enregistrements lus 30000+0 enregistrements écrits 30720000 octets (31 MB) copiés, 0.318773 seconde, 96.4 MB/s
Nous créons là un fichier de 30000 blocs de 1024 octets, soit 30 Mo de zéros. Nous initialisons ensuite le fichier pour pouvoir l'utiliser comme mémoire virtuelle :
# mkswap daswap Setting up swapspace version 1, size = 30715 kB no label, UUID=967a3eb8-7907-4343-ac1c-5cbe19d86005
Pour que le système soit content et que nous ayons un minimum de sécurité, nous changeons les permissions sur le fichier en le rendant lisible et inscriptible uniquement pour le propriétaire (root) :
# chmod 0600 daswap
Enfin, nous signalons au système qu'il doit l'utiliser comme mémoire virtuelle :
# swapon -v daswap swapon on daswap
On vérifie :
# free -m | grep Swap Swap: 523 95 427
Enfin, lorsque nous n'en avons plus besoin :
# swapoff -v daswap swapoff on daswap # rm daswap
Swapper dans un fichier est un peu plus lent que sur une partition dédiée, mais le mécanisme est de toute façon lent à la base. Nous pouvons utiliser ainsi n'importe quelle taille de fichier swap et même plusieurs fichiers si nécessaire. Pensez simplement à placer le fichier sur un disque (rapide de préférence) et non dans un répertoire monté en mémoire vive, comme c'est souvent le cas pour /tmp.
Enfin, je tiens à signaler que le manque de mémoire ne signifie pas nécessairement le plantage du système. Le noyau ayant les pleins pouvoirs, même en cas de carence en mémoire, celui-ci va tuer les processus dont la demande ne peut être satisfaite. Il est donc possible que le problème se résolve de lui-même au bout d'un certain temps si la configuration le permet.
Retrouvez cet article dans : Linux Pratique Hors série 8

