Swap (Français)
Linux divise la RAM ( la mémoire vive) physique en blocs de mémoire appelés pages. Le swapping est le procédé par lequel une page de mémoire est copiée vers un espace prédéfini du disque dur que l'on nomme le «swap» (ou «espace virtuel», ou encore «partition d'échange», en français.)
Les tailles combinées de la mémoire physique et de l'espace d'échange correspondent à la quantité de mémoire virtuelle disponible.
La question de la nécessité du swap divise, et les avis personnels sur le sujet abondent. Cette page présente une solution «classique» à la question, qui n'est pas forcément la plus adaptée à votre cas. Voir ci-dessous #Nécessité du swap.
L'espace d'échange, peut être présent sous forme de partition et/ou de fichier, et peut être créé ou supprimé à n'importe quel moment. L'utilisation d'un fichier d'échange ou d'une partition d'échange est équivalente en terme de performance.
Obtenir des informations
Pour voir l'état de l'espace d'échange, utilisez:
swapon -s
Ou:
free -m
Partition d'échange
Une partition d'échange peut être créée avec la plupart des outils de partitionnement GNU/Linux (comme fdisk
ou cfdisk
). Les Partitions d'échanges sont désignées sous le type d'id 82.
Pour préparer la partition, il faut utiliser la commande mkswap
(équivalent d'un formatage avec mkfs
). Par exemple:
mkswap /dev/sda2
Pour utiliser la partition d'échange:
swapon /dev/sda2
Pour que la partition d'échange s'active lors du processus de boot, éditez le fichier /etc/fstab
et ajoutez une entrée pour la partition d'échange:
/dev/sda2 none swap defaults 0 0
discard
est une option de montage valide pour le fichier d'échange (à placer à côté de defaults
en séparant par une virgule). Le paramètre -d
ou --discard
avec swapon
a le même effet. Pour plus d'informations sur les options de montages, utilisez man swapon
.Fichier d'échange
Comme alternative à l'utilisation d'une partition entière, un fichier d'échange à la capacité de changer sa taille à la volée est plus simple à supprimer. Ce qui est préférable si l'espace disque est faible.
Création d'un fichier d'échange
En root utilisez dd
pour créer un fichier de la taille de votre choix.
La taille se calcule avec la taille de block (bs) multipliée par le compte (count). Par exemple, pour créer un fichier de 4Gio:
dd if=/dev/zero of=/swapfile bs=4M count=1024 #M = Mégaoctets, G = Gigaoctets
fallocate
peut être plus simple à utiliser (et est souvent plus rapide) mais peut cependant causer d'autres ennuis. cf.swapon(8) à la rubrique NOTES.Changez les permissions (un fichier d'échange lisible est une grande faille de sécurité locale):
chmod 600 /swapfile
Après avoir créé le fichier, formatez-le avec:
mkswap /swapfile
Activez le fichier d'échange:
swapon /swapfile
Pour que le fichier d'échange s'active lors du processus de boot, éditez le fichier /etc/fstab
et ajoutez une entrée pour le fichier d'échange:
/swapfile none swap defaults 0 0
Suppression d'un fichier d'échange
Pour supprimer un fichier d'échange, il faut d'abord le désactiver.
En root:
swapoff -a
Puis, supprimez le fichier de manière classique:
rm -f /swapfile
Nécessité du swap
L'espace d'échange est recommandé pour les machines ayant peu de mémoire vive (RAM).
Ceci étant dit la présence ou non d'un swap présente certains avantages et certaines contraintes.
Disques durs de type ssd
- L'espérance de vie des ssd étant fonction du nombre d'écritures sur celui-ci. L'utilisation de swap sur un ssd peut mener à une usure prématurée de celui-ci.
- D'un autre coté, un swap sur un ssd présente de bien meilleures performances que sur un classique hdd.
Suspend to disk
- L'activation de l'hibernation (suspend-to-disk), nécessite un swap de taille supérieur ou égale à la taille de mémoire vive physiquement installée.
- D'un autre coté, depuis les ssd, les temps de démarrage sont beaucoup plus courts, et les pc portables ont aujourd'hui des autonomies de plusieurs dizaines d'heures en mode veille (suspend-to-ram).
Fatal error: Out of heap memory
- Une application en manque de mémoire plante généralement de façon brutale, et produits souvent des tentatives d'accès à des zones protégées de la mémoire. Dans un tel cas le processus est immédiatement tué par le noyau!
- A la vue de la quantité de ram dont disposent certains ordinateurs modernes, ce cas se présente assez rarement dans une utilisation normale (pas de compilation lourde, édition vidéo...)