Mise à jour : Debian 10.8
La mémoire d'échange (swap), aussi appelée mémoire cache est un espace mémoire avec deux fonctions :
fournir de la mémoire supplémentaire en supplément de la mémoire vive
stocker le contenu de la mémoire vive lorsque l'ordinateur rentre en hibernation
La mémoire d'échange peut être constituée d'un ou plusieurs espaces disques, ces espaces pouvant être des partitions ou des fichiers dédiés. Dans ce qui suit, on s'intéresse au cas d'une mémoire d'échange constituée d'une partition.
La taille de la mémoire d'échange est fonction de la taille de la mémoire vive, de la complexité et du nombre d'applications chargés. On considère généralement qu'un facteur entre 1 et 2 ou 3 entre la mémoire d'échange et la mémoire vive est un bon point de départ.
Création d'une partition d'échange dans la partition /dev/sdb1
$ sudo mkswap -L label_swap /dev/sdb1
Vérification : affichage de l'étiquette et de l'UID
$ sudo swaplabel /dev/sdb1
LABEL: swap
UUID: 332cd5f3-6008-4645-8668-5675a2b93497
$ sudo swaplabel -L label_swap /dev/sdb1
Une solution consiste à recréer la partition de swap :
$ sudo mkswap -L swapdd /dev/sdb2
mkswap: /dev/sdb2 : avertissement : effacement de l'ancienne signature swap.
Configure l'espace d'échange (swap) en version 1, taille = 8191996 Kio
LABEL=swapdd, UUID=bebbc32c-a259-41b9-a764-ae42d26add63
$ sudo swapon /dev/sdb2
$ sudo swapon -a
$ sudo swapoff /dev/sdb2
$ sudo swapon -a
La mémoire d'échange est activée automatiquement au démarrage du système, ce que l'on peut vérifier dans dmesg :
$ sudo dmesg |grep " swap "
[ 43.810481] Adding 15608828k swap on /dev/nvme0n1p7. Priority:-2 extents:1 across:15608828k SSFS
Si l'on constate que la mémoire d'échange n'est pas disponible, vérifier que la ligne de déclaration de la mémoire d'échange dans le fichier fstab est correcte. Les paramètres typiques d'une partition d'échange sont :
<file system> : identifiant de la partition sous la forme UIID=XXXXXXXXX ou LABEL=aaaaaa ou /dev/sdxy
<mount point> : none
<type> : swap
<options> : defaults ou sw
Les autres paramètres <dump> et <pass> ne sont pas utilisés et positionnés à 0 et 0
Exemple :
$ cat /etc/fstab |grep -iE 'type|swap'
# <file system> <mount point> <type> <options> <dump> <pass>
# swap was on /dev/sda2 during installation
UUID=6b388940-d76f-4dc5-a373-2d7e80b16d69 none swap sw 0 0
$ sudo swapoff -a
$ sudo swapon -a
L'option -a (all) peut-être remplacée par l'identifiant de la partition, sous la forme LABEL=nom_swap, ou UUID =XXXX ou dev=/dev/sdxy
Les commandes suivantes permettent de s'assurer de la disponibilité de la mémoire d'échange, de sa taille et de son occupation
$ cat /proc/swaps
Filename Type Size Used Priority
/dev/sda2 partition 8193144 0 -1
Label, UUID, points de montage
$ lsblk -f |grep -iE 'swap|name'
NAME FSTYPE LABEL UUID MOUNTPOINT
├─sda2 swap swap 6b388940-d76f-4dc5-a373-2d7e80b16d69 [SWAP]
Occupation de la mémoire vive et de la mémoire d'échange, en format humain (option -h) :
$ free -h
total used free shared buff/cache available
Mem: 15Gi 897Mi 13Gi 100Mi 801Mi 14Gi
Swap: 14Gi 0B 14Gi
L'utilisation de la swap en complément de la mémoire vive est contrôlée par le paramètre swappiness, compris entre 0 et 100. Lorsque le paramètre est à 0, la swap n'est pas utilisée, lorsque le paramètres est à 100, son utilisation est maximum. Par défaut, ce paramètre est à 60.
Pour modifier la valeur, par exemple la passer à 1, pour limiter au maximum l'utilisation de la swap :
$ sudo sysctl -w vm.swappiness=1
vm.swappiness = 1
Vérification :
$ sudo sysctl vm.swappiness
vm.swappines = 1
Pour rendre permanente la modification :
$ echo vm.swappiness=1 > sudo tee /etc/sysctl.d/local.conf
Si la partition de swap a été modifiée ou mise à jour, mettre à jour le fichier "resume" de l'hibernation en conséquences :
$ cat /etc/initramfs-tools/conf.d/resume
RESUME=UUID=6b388940-d76f-4dc5-a373-2d7e80b16d69
Puis mettre à jour initramfs :
$ sudo update-initramfs -u -k $(uname -r)
ou
$ sudo aptitude reinstall initramfs-tools
Notes :
Pour plus de détails sur l'hibernation, voir Arrêt - Redémarrage - Suspension - Hibernation