Swap/fr
Dans le monde Linux/Unix, le terme swap est généralement utilisé comme synonyme de pagination de la mémoire. Le swap désigne à la fois l'action de déplacer des pages de mémoire entre la mémoire et un espace de stockage secondaire.
Linux peut utiliser une combinaison de zones de swap - plusieurs périphériques de swap et/ou fichiers de swap ensemble. Il est également possible d'attribuer différentes priorités aux zones de swap.
Toutefois, l'espace de swap peut ne pas être nécessaire du tout, en fonction des exigences du système en question. Par exemple, un ordinateur portable qui suspend son activité au disque (hibernation) exige que toutes les pages de la mémoire soient stockées sur le disque, de sorte que le swap est nécessaire dans ce cas. Les systèmes de serveurs équipés d'une grande quantité de mémoire et fonctionnant à une charge constante peuvent ne pas nécessiter de swap du tout. Pour plus de détails, voir l'article dédié de la base de connaissances.
Partition swap
Le manuel Gentoo recommande, dans le cadre du processus d'installation, de créer une partition swap d'une taille égale à deux fois la mémoire système disponible[1].
Les partitions swap peuvent être créées et activées à tout moment tant que des partitions sont disponibles et sont correctement formatées.
De nos jours, les systèmes disposant de beaucoup de mémoire, il peut être suffisant de créer une partition swap plus petite que la mémoire disponible. En cas d'utilisation de l'hibernation, le stockage d'une image de la RAM compressée à l'intérieur de la partition swap, c'est une bonne idée d'avoir une partition swap de la taille de la mémoire installée.
Création
En supposant que /dev/sda2 est la partition utilisée pour le swap :
root #
mkswap /dev/sda2 # Format the partition for swap.
root #
swapon /dev/sda2 # Activate the swap partition.
Vérifiez les swaps activés à l'aide de la commande swapon :
root #
swapon --show
Pour éviter de devoir activer manuellement le fichier swap lors des redémarrages, ajoutez une ligne (en modifiant le chemin d'accès si nécessaire) au fichier fstab :
/dev/sda2 none swap sw 0 0
Swap chiffré avec option d'hibernation
En supposant que l'objectif souhaité soit de disposer d'une partition swap chiffrée LUKS avec la possibilité d'effectuer une mise en veille prolongée (c'est-à-dire une suspension sur disque). La partition swap chiffrée a besoin d'une clé LUKS connue (fichier clé, mot de passe, etc.). L'utilisateur sera invité à saisir le mot de passe dès le début du processus de démarrage. Le noyau doit alors décider s'il faut démarrer régulièrement le système ou charger une image RAM hibernée à partir de SWAP - si le système a été hiberné dans l'état d'alimentation précédent.
La création d'une partition swap chiffrée LUKS ne diffère pas de celle de toute autre partition chiffrée LUKS, décrite dans la section Création d'une plate-forme de stockage chiffrée. Utilisez mkswap au lieu de mkfs.* sur la partition chiffrée LUKS pour créer le SWAP. L'UUID (c'est-à-dire 01b37ea8-74a5-4526-85c7-9fdf6dad34cb
), créé lors du formatage en tant que swap, est nécessaire pour l'étape suivante :
Indiquez au chargeur d'amorçage (GRUB) où reprendre la lecture en cas d'hibernation :
GRUB_CMDLINE_LINUX_DEFAULT="resume=UUID=01b37ea8-74a5-4526-85c7-9fdf6dad34cb"
De plus (lorsque vous utilisez OpenRC avec dracut, systemd est supposé être utilisé pour cette section du guide) dracut aura besoin d'être informé du numéro majeur et mineur du périphérique LUKS associé, afin qu'il puisse créer un initrd approprié :
root #
lsblk
.. └─sdb1 8:22 0 32G 0 part └─luks-cc166689-4246-41ae-86e8-84705b81ecc2 253:1 0 32G 0 crypt [SWAP]
root #
echo 253:1 > /sys/power/resume
La valeur par défaut est
0:0
. Utilisez la commande echo pour désactiver l'hibernation.Assurez-vous que l'UUID LUKS (
cc166689-4246-41ae-86e8-84705b81ecc2
) et l'UUID SWAP (01b37ea8-74a5-4526-85c7-9fdf6dad34cb
) ne sont pas confondus !Enfin, l'initrd doit être mis à jour avec ces changements :
root #
dracut --hostonly --force
N'oubliez pas la configuration usuelle de SWAP dans le fichier /etc/fstab et redémarrez le système par la suite.
# /dev/sdb1 (SWAP)
UUID=01b37ea8-74a5-4526-85c7-9fdf6dad34cb none swap sw 0 0
Si un SWAP chiffré LUKS utilisant dmcrypt est déjà configuré en incluant une configuration dans /etc/conf.d/dmcrypt, il sera obsolète, puisque ce périphérique LUKS sera désormais ouvert plus tôt avec l'aide de l'initrd généré par dracut.
Utilisation du chiffrement intégral du disque
Si vous utilisez déjà le chiffrement intégral du disque avec LUKS, une invite de mot de passe de déchiffrement apparaîtra deux fois au démarrage : une fois pour saisir la clé LUKS pour la partition racine du système (comme auparavant) et une fois pour déchiffrer la partition SWAP. Il est possible de ne décrypter que la partition racine et d'utiliser ensuite un fichier clé LUKS, stocké sur la partition racine qui vient d'être décryptée, pour déchiffrer automatiquement la partition SWAP. Des détails et un exemple simple sur la façon de procéder dans /etc/default/grub, peuvent être trouvés sur kernel.org.
Fichiers Swap
Afin de contourner les contraintes plus strictes des partitions de disque, une alternative consiste à utiliser le swap comme un fichier sur le disque. Les fichiers peuvent être situés à l'intérieur des partitions du disque. L'administrateur système peut ainsi redimensionner ou déplacer l'espace de swap en fonction des besoins du système, sans avoir à ouvrir un outil de partitionnement.
Création
Commencez par allouer un nouveau fichier utilisé pour le swapfile, la taille de ce fichier correspondra à la taille de l'espace de swap. Des utilitaires standard peuvent être utilisés à cette fin, tels que fallocate de sys-apps/util-linux :
root #
fallocate -l 12GiB swapfile # Create the file.
root #
chmod 600 swapfile # Restrict security on the file to root access only.
Si la partition sur laquelle se trouve le swapfile utilise btrfs, swapon échouera à moins que le swapfile ne soit dans son propre sous-volume et que la copie sur écriture et la compression ne soient désactivées pour le swapfile[2]. En supposant un fichier swap de 4 Go, les étapes seraient les suivantes :
root #
btrfs subvolume create swap_vol
root #
chattr +C swap_vol
root #
fallocate -l 4G swap_vol/swapfile
root #
chmod 600 swap_vol/swapfile
}}
Maintenant, initialisez et activez le swapfile :
root #
mkswap swapfile # Format the file swap.
root #
swapon swapfile # Activate the swap file.
Il est également possible de vérifier les swaps du système à l'aide de la commande swapon :
root #
swapon --show
Pour éviter de devoir activer manuellement le fichier swap lors des redémarrages, ajoutez une ligne (en modifiant le chemin d'accès si nécessaire) au fichier fstab :
/12G-swapfile none swap sw 0 0
Swap chiffré
C'est une bonne pratique que de chiffrer les fichiers swap. Pour créer un fichier swap chiffré de 2 Go dans le répertoire /opt, exécutez :
root #
cd /opt
root #
dd if=/dev/zero of=swap count=2048 bs=1M
root #
cryptsetup --type plain -d /dev/urandom open swap swap
root #
mkswap swap
root #
chmod 600 swap
root #
swapon swap
root #
swapon --show
Ensuite, éditez /etc/fstab, éditez également /etc/crypttab (si vous utilisez systemd) ou /etc/conf.d/dmcrypt (si vous utilisez OpenRC) pour activer automatiquement le fichier swap :
swap /opt/swap /dev/urandom swap
Assurez-vous que systemd est compilé avec le support cryptsetup, sinon /etc/crypttab ne sera pas lu.
swap=swap
source=/opt/swap
/dev/mapper/swap none swap sw 0 0
Enfin, si vous utilisez OpenRC, activez le service dmcrypt :
root #
rc-update add dmcrypt boot
Configuration d'OpenRC
Lors de l'utilisation de fichiers swap qui ne sont pas sur le système de fichiers racine, l'ordre des services dans OpenRC doit être modifié via /etc/conf.d/swap :
# If you are only using local swap partitions, you should not change
# this file. Otherwise, you need to uncomment the below rc_before line
# followed by the appropriate rc_need line.
rc_before="!localmount"
#
# If you are using swap files stored on local file systems, uncomment
# this line.
rc_need="localmount"
#
# If you are using swap files stored on network file systems or swap
# partitions stored on network block devices such as iSCSI, uncomment
# this line.
#rc_need="netmount"
Optimisation des performances
Priorisation
Il est possible de hiérarchiser les différentes zones de swap en leur attribuant une priorité (un nombre entier compris entre 0 et 32767). Les zones de swap de priorité supérieure sont utilisées en premier. Les zones de priorité inférieure sont utilisées après épuisement des zones de priorité supérieure. Les zones ayant la même priorité sont utilisées selon le principe du round-robin[3].
La priorité peut être utilisée pour les systèmes utilisant une combinaison de zones de swap rapides (ZRAM ou NVMe) et lentes (HDD) afin de donner la priorité aux premières avant les secondes.
Par exemple, donner la priorité à un périphérique de swap rapide /dev/nvme0n1 avant un fichier de swap normal /swapfile à l'aide de /etc/fstab :
/dev/nvme0n1 none swap sw,pri=16383 0 0
/swapfile none swap sw,pri=1 0 0
Échanges swap
Le noyau permet de régler l'utilisation du swap via les paramètres sysctl, ce qui permet d'adapter le swap à différentes charges de travail.
Le paramètre vm.swappiness contrôle le rapport entre la volonté du noyau de récupérer les pages de mémoire sauvegardées dans les fichiers (morceaux de fichiers "memory cached") et les pages de mémoire anonymes (tas et pile de l'application) vers leur stockage respectif. La plage de valeurs sur les noyaux récents est de 0 à 200, tandis que la valeur par défaut est de 60<ref>Documentation for /proc/sys/vm/ — The Linux Kernel documentation. Les valeurs inférieures à la valeur par défaut représentent une préférence pour le maintien en mémoire des pages de mémoire anonyme liées à l'application au détriment des pages sauvegardées dans les fichiers et vice versa.
La valeur actuelle peut être affichée avec :
user $
sysctl vm.swappiness
vm.swappiness = 60
La valeur d'échange souhaitée peut être réglée de manière permanente via :
vm.swappiness=20
Voir également
- Filesystem — un moyen d'organiser les données à conserver lorsqu'un programme termine.
- Zram — a Linux kernel feature and userspace tools for creating compressible RAM-based block devices.
- Zswap — a lightweight compressed cache for swap pages.
Ressources externes
Références
- ↑ Handbook:AMD64/Installation/Disks#What_about_swap_space.3F
- ↑ https://btrfs.readthedocs.io/en/latest/Swapfile.html
- ↑ swapon(2) - Linux man page, die.net. Retrieved on: October 23, 2022