Performance et optimisation

SWAP : Informations, bonnes pratiques, configuration

Table des matières

Introduction



Bien que j'ai fait un article sur ma réflexion autour du partitionnement idéal pour un système Linux (serveur et station de travail) une question revient souvent autour du SWAP.

La question tourne autour des besoins et des bonnes pratiques sur le SWAP, selon la taille de la RAM, du matériel, en bare-metal vs VM, etc..

De façon générale, je dis toujours : 2G quelque soit la RAM de la machine. SWAPPER c'est MAL mais il faut quand même un petit espace au cas où.

A travers cet article, je souhaite répondre à la question en réexpliquant quelques concepts sur le SWAP sous Linux.

Comprendre le SWAP



A propos du SWAP



Avant de parler du SWAP, je veux partager quelques éclaircissements. C'est un élément essentiel de la gestion de la mémoire sous Linux. C'est pour celà qu'il ne faut pas le désactiver complètement.

Je vous ai fait un petit dessin avec GIMP comme vous aimez bien :

swap_linux



Le SWAP permet d'optimiser l'utilisation de la RAM, lorsque les configurations sont limitées. C'est un espace sur le disque qui est en quelque sortes utilisé comme "extension" de la mémoire vive (la RAM). Il permet donc de "libérer" de la RAM en déplaçant les "pages mémoire" qui ne sont pas utilisées (ou très peu utilisées).

En effet, le disque coûte moins cher que la RAM (en € au Go). Evidemment, cela dégrade énormément les performances. C'est pour cela qu'il est nécessaire de ne pas trop solliciter le SWAP. Cependant, il est utile pour éviter un crash de programme en cas de consommation de ressources excessive. On préfèrera un ralentissement de façon temporaire qu'un crash.

On entendra parler parfois de "fichier de pagination" au lieu de SWAP, car c'est un fichier dans lequel on va déplacer les "pages mémoires".

Les formes du SWAP



Sous Linux, le SWAP peut être représenté sous 3 façons différentes :
- Une partition swap : C'est une partition, ou un volume logique (si on fait du LVM) qui est formaté pour être utilisé en tant que SWAP, avec la commande mkswap.
- Un fichier swap : Plus flexible, car il ne dépend pas d'un schéma de partitionnement sur le disque, c'est un simple fichier, d'une taille définie (généré par dd par exemple ou falloc), qui, après formatage via mkswap pourra être utilisé comme SWAP.
- zram : C'est un module du noyau Linux qui existe depuis longtemps, qui créé un disque compressé en RAM. Il va permettre d'utiliser la RAM de manière plus efficace.

Alors évidemment, il sera possible sur un système de combiner plusieurs SWAP, de plusieurs types. Ces SWAP pourront être utilisés par un système de priorité.
Il est également possible de paramétrer le seuil de déclenchement d'utilisation du SWAP par rapport à l'utilisation de la RAM.


Avantages et inconvénients des types de SWAP



Chaque type de SWAP va avoir ses avantages et inconvénients. Dans l'ordre chonologique, sous Linux, on a plutôt utilisé la partition SWAP au début, puis certaines distributions Linux ont fait le choix du fichier SWAP dans les années 2010 et depuis 2020, on a plutôt tendance à utiliser zram.

La partition SWAP reste la meilleure solution sur disque car sa gestion est simple, ne fragmente pas (utile du temps des HDD), et on la plaçait, quand on gérait une multitudes de partitons, à un endroit stratégique du disque (quand on le pouvait au milieu si on swappait beaucoup) car le bras mécanique passe deux fois plus au milieu du plateau qu'à l'extrémité. Cependant, c'est pas du tout flexible (par la taille et son placement définitif), et cela nécessite une partition dédiée.

Le fichier, est plus flexible que la partition, on peut le créer de la taille souhaitée, le déplacer ou modifier sa taille (après avoir désactivé le SWAP dessus évidemment), mais il peut se fragmenter, ce qui le rend moins performant que la partition SWAP. C'est un peu moins vrai avec les SSD cependant.

Que l'on soit sur une partition, ou un fichier, même sur un SSD (SATA ou NVME), swapper dégradera les performances du système et usera le SSD.

Zram est aujourd'hui une bonne solution, car il permet d'utiliser plus efficacement la RAM, permettra de compresser les pages mémoires en restant dans la RAM (donc un accès rapide). Il évite d'utiliser le disque, limitant l'usure des SSD. Aujourd'hui, les processeurs étant performants, il sera plus efficace de compresser des pages mémoires que de les écrire sur un SSD.
Cependant, zram posera problème si on veut utiliser l'hibernation, car on ne pourra pas stocker sur disque l'état du système.


Les besoins en SWAP



J'ai par curiosité demandé à Chat GPT ce qu'il en pensait, et pour moi il dit n'importe quoi :
ChatGPT :
Pour les systèmes avec peu de RAM (moins de 4 Go) : Il est souvent recommandé d'avoir une taille de SWAP équivalente à 1,5 à 2 fois la taille de la RAM. Par exemple, si vous avez 2 Go de RAM, vous pouvez créer une partition SWAP de 3 à 4 Go.
Pour les systèmes avec 4 Go à 8 Go de RAM : Une taille de SWAP équivalente à la taille de la RAM est généralement suffisante. Par exemple, si vous avez 8 Go de RAM, une partition SWAP de 8 Go peut suffire.
Pour les systèmes avec plus de 8 Go de RAM : La taille de SWAP peut être réduite. Une taille de 4 à 8 Go est souvent suffisante, sauf si vous prévoyez d'utiliser des applications gourmandes en mémoire ou si vous souhaitez utiliser la mise en veille (hibernation).

NON, NON et NON.

Si on n'a pas beaucoup de RAM, alors on adapte l'usage de la machine. On sera sur une machine ancienne, déjà peu performante donc mettre beaucoup de SWAP va dégrader encore plus les performances. Dans le cas d'une machine virtuelle, on va adapter la RAM en fonction des applications à faire fonctionner dans celle-ci.

Avec un fichier ou une partition SWAP, je persiste et signe : 2Go de SWAP c'est suffisant. Si je reprends les cas cités par Chat GPT :
- Pour les systèmes avec peu de RAM (moins de 4 Go) : ça laisse un peu de marge, ça permettra d'absorber le lancement d'un processus un peu gourmand, en évitant un crash d'une application en fonction ou en arrière plan à caude d'un manque de mémoire.
- Pour les systèmes avec 4 Go à 8 Go de RAM : même argument que précédemment
- Pour les systèmes avec plus de 8 Go de RAM : même argument que précédemment

Si on utilise Zram, on va compresser les pages mémoire dans la RAM elle même. On ne paramètrera pas un nombre de Go mais plutôt un pourcentage de la mémoire totale, car ça dépend de la RAM installée.
Je recommande de ne pas dépasser 50% de la RAM totale.
Dans tous les cas, l'espace utilisé pour Zram n'est pas consommé sur le disque donc si on a 64Go de RAM, 32Go de ZRam n'est pas dérangeant (comparé à une partition ou un fichier SWAP de 32Go !)

J'ai fait cependant quelques tests, il semble qu'on puisse atteindre 80% à 100% de la RAM totale. Au delà, le système fige car la théorie de compression possible dépasse la pratique. Donc ne comptez pas, avec 2Go de RAM, de mettre 4Go de Zram. Aussi, 64 Go de Zram pour 64Go de RAM, c'est complètement inutile.


Les bonnes pratiques



Dans le cadre d'un serveur, on sera souvent en environnement virtuel. On ne swappera peu, donc :
- un volume logique avec une partition SWAP est recommandé
- on modifiera le seul de déclenchement du SWAP, à adapter en fonction des applications et de la RAM totale

Dans le cadre d'une station de travail :
- zram est une bonne alternative dans les cas généraux, il sera potentiellement plus sollicité qu'un serveur
- un fichier ou une partition fait aussi l'affaire tout en étant moins performant que zram si le SWAP est utilisé
- fichier ou partition SWAP si vous utilisez l'hibernation, de la taille RAM au moins, pour stocker l'intégralité de la RAM sur disque.

Dans des cas spécifiques comme Raspberry Pi :
- zram pour éviter d'écrire sur la carte SD ou un disque connecté en USB
- ne pas désactiver le SWAP, car peut causer des crashs de processus (applications ou processus système)


Dans tous les cas, on surveillera l'usage de la RAM et du SWAP :
- sur les serveurs : avec des outils de supervision et alerting si utilisation élevée de SWAP.
- sur les stations de travail : on surveillera avec htop par exemple si on veut lancer des applications gourmandes pour ne pas avoir les yeux plus gros que la RAM.


Configuration du SWAP



Ajouter une partition SWAP



Je ne parlerai pas forcément de la création d'une partition SWAP, car souvent le système est déjà installé.
On peut réduire des partitions existantes mais on fait jamais ça en vrai :)

Ajouter un volume logique pour du SWAP



Si on est dans le cadre de LVM, et que vous avez de l'espace disponible dans votre Volum Group :

On créé un LV de la taille qui va bien. Exemple de 2Go, nom du LV swaplv, nom du VG rootvg :
Code BASH :
lvcreate -L 2G -n swaplv rootvg


On formate le LV :
Code BASH :
mkswap /dev/rootvg/swaplv


On active le swap :
Code BASH :
swapon /dev/rootvg/swaplv


Pour l'activer au démarrage, dans /etc/fstab :
Code TEXT :
/dev/rootvg/swaplv none swap sw 0 0

On pourra aussi utiliser l'UUID de la partition


Ajouter un fichier SWAP



Créer un fichier SWAP, par exemple à la racine :
Code BASH :
fallocate -l 2G /swap


On met les bonnes permissions :
Code BASH :
chmod 600 /swap


On formate le fichier (oui formater car on applique un format)
Code BASH :
mkswap /swap


On active le fichier SWAP :
Code BASH :
swapon /swap


Pour l'activer au démarrage, dans /etc/fstab :
Code :
/swap none swap sw 0 0



Configurer Zram



Pour configurer Zram, je vous renvoie vers mon article : zRAM : Compresser la RAM au lieu de swapper sur Linux

Certains distributions Linux ont des services tout fait pour paramétrer facilement.
J'aborde également les commandes à l'unité si vous souhaitez paramétrer aux petits oignons Zram !


Gérer les paramétrages du SWAP



Visualiser l'état des SWAP



On utilisera la commande :
Code BASH :
swapon -s


Voici un exemple :
Code :
Filename                Type        Size        Used        Priority
/dev/dm-1                               partition    2097148        0        -2
/dev/zram0                              partition    8388604        240320        100


On voit le nombre de SWAP actifs sur la machine, leur taille, utilisation et priorité.


Activer et désactiver le SWAP



On pourra activer un fichier SWAP comme vu précédemment via :
Code BASH :
swapon /chemin/du/swap


Pour désactiver un fichier SWAP :
Code BASH :
swapoff /chemin/du/swap


Si le SWAP est utilisé :
- Le fichier est vidé (les pages mémoires sont transférées en RAM ou dans les autres SWAP)
- La désactivation est possible si l'utilisation du SWAP actuelle du SWAP est déplaçable en RAM ou dans dautres SWAP

On pourra activer tous les SWAP présents dans le fichier fstab :
Code BASH :
swapon -a


On pourra désactiver tous les SWAP présents dans le fichier fstab :
Code BASH :
swapoff -a



Régler le déclenchement du SWAP



Le paramètre vm.swappiness détermine le seuil à partir duquel le noyau va utiliser le SWAP.
On gère ça avec la commande sysctl avec une valeur entre 0 et 100.
Cette valeur correspond (à peu près) au % de mémoire disponible restant à partir de laquelle le système va swapper.

Pour vérifier la valeur :
Code BASH :
cat /proc/sys/vm/swappiness

Par défaut, c'est souvent 60. Cela signifie que quand moins de 60% de RAM est disponible, le système peut commencer à swapper.

On modifiera souvent à la baisse cette valeur pour utiliser au maximum la RAM pour des raisons de performances évidente.

On peut le faire temporairement (tant que le système ne redémarre pas) :
Code BASH :
sysctl -w vm.swappiness=10


Pour rendre ce changement permanent, on pourra modifier le fichier /etc/sysctl.conf ou créer un fichier dans /etc/sysctl.d/ :
Code BASH :
vim /etc/sysctl.d/swappiness.conf


On y met la valeur souhatée :
Code BASH :
vm.swappiness=10


Ce fichier est lu au démarrage du système. On pourra appliquer les changements de suite via :
Code BASH :
sysctl -p /etc/sysctl.d/swappiness.conf



Régler les priorités du SWAP



Si on a plusieurs SWAP, on pourra régler les priorités entre eux.

Sur ma machine, j'ai zram et un volume logique :
Code :
Filename                Type        Size        Used        Priority
/dev/dm-1                               partition    2097148        0        -2
/dev/zram0                              partition    8388604        240320        100


Zram est prioritaire par rapport au volume logique car la priorité est plus élevée. (D'ailleurs on le voit sur l'utilisation)

A l'activation du SWAP on pourra définir une priorité (ici, priorité 20 pour le fichier /swap) :
Code BASH :
swapon -p 20 /swap


Après cela, l'utilisation sera Zram (100), Fichier (20), Volume Logique (-2)

Dans le fichier fstab, on metttra l'option pri, comme par exemple :
Code BASH :
/swap   none    swap    sw,pri=20   0   0

Cette page a été vue 583 fois