Cette page fournit une introduction à l’échange d’espace et à la pagination sous GNU/Linux. Il couvre la création et l’activation de partitions d’échange et de fichiers d’échange.
De Tout sur l’espace d’échange Linux:
Linux divise sa RAM physique (mémoire vive) en morceaux de mémoire appelés pages. L’échange est le processus par lequel une page de mémoire est copiée dans l’espace préconfiguré du disque dur, appelé espace d’échange, pour libérer cette page de mémoire. Les tailles combinées de la mémoire physique et de l’espace d’échange correspondent à la quantité de mémoire virtuelle disponible.
La prise en charge de swap est fournie par le noyau Linux et les utilitaires d’espace utilisateur du paquet util-linux.
- Espace d’échange
- Partition d’échange
- Activation par systemd
- Désactivation du swap
- Fichier d’échange
- Manuellement
- Création de fichier d’échange
- Supprimer le fichier d’échange
- Automated
- générateur de zram
- systemd-swap
- Swap encryption
- Performances
- Swappiness
- Pression de cache VFS
- Priorité
- Utilisation de zswap ou zram
- Striping
Espace d’échange
L’espace d’échange peut prendre la forme d’une partition de disque ou d’un fichier. Les utilisateurs peuvent créer un espace d’échange lors de l’installation ou à tout moment ultérieur comme ils le souhaitent. L’espace d’échange peut être utilisé à deux fins, pour étendre la mémoire virtuelle au-delà de la mémoire physique installée (RAM), et également pour la prise en charge de la suspension sur disque.
S’il est avantageux d’étendre la mémoire virtuelle avec swap dépend de la quantité de mémoire physique installée. Si la quantité de mémoire physique est inférieure à la quantité de mémoire requise pour exécuter tous les programmes souhaités, il peut être avantageux d’activer le swap. Cela évite les conditions de mémoire insuffisante, où le mécanisme de tueur d’OOM du noyau Linux tentera automatiquement de libérer de la mémoire en tuant des processus. Pour augmenter la quantité de mémoire virtuelle à la quantité requise, ajoutez la différence nécessaire (ou plus) en tant qu’espace d’échange.
Le plus gros inconvénient de l’activation du swap est sa performance inférieure, voir la section # Performance. Par conséquent, l’activation du swap est une question de préférence personnelle: certains préfèrent tuer les programmes plutôt que d’activer le swap et d’autres préfèrent activer le swap et un système plus lent lorsque la mémoire physique est épuisée.
Pour vérifier l’état de l’échange, utilisez:
$ swapon --show
Ou pour afficher la mémoire physique ainsi que l’utilisation de l’échange:
$ free -h
Partition d’échange
L’exactitude factuelle de cet article ou de cette section est contestée.
82
est le type de partition d’échange sur MBR, il n’y a pas d’autodétection de partition d’échange sur MBR. Les commandes /TRIM sur les partitions d’échange semblent être émises automatiquement par le Noyau si elles sont prises en charge, voir les Guides de déploiement Fedora. (Discutez dans Talk: Swap #Clarify swap discovery)Une partition swap peut être créée avec la plupart des outils de partitionnement GNU/Linux. Les partitions d’échange sont généralement désignées comme type 82
. Même s’il est possible d’utiliser n’importe quel type de partition comme swap, il est recommandé d’utiliser le type 82
dans la plupart des cas car systemd le détectera automatiquement et le montera (voir ci-dessous).
Pour configurer une partition comme zone d’échange Linux, la commande mkswap(8) est utilisée. Par exemple :
# mkswap /dev/sdxy
Pour activer la pagination du périphérique :
# swapon /dev/sdxy
Pour activer cette partition d’échange au démarrage, ajoutez une entrée à /etc/fstab
:
UUID=device_UUID none swap defaults 0 0
où device_UUID
est l’UUID de l’espace d’échange.
Voir fstab pour la syntaxe du fichier.
- L’entrée fstab est facultative si la partition d’échange se trouve sur un périphérique utilisant GPT. Voir la sous-section suivante.
- Si vous utilisez un SSD avec la prise en charge de TRIM, envisagez d’utiliser
discard
dans la ligne d’échange dans fstab. Si vous activez swap manuellement avec swapon, l’utilisation du paramètre-d
--discard
permet d’obtenir la même chose. Voir swapon(8) pour plus de détails.
Activation par systemd
systemd active les partitions d’échange basées sur deux mécanismes différents. Les deux sont exécutables dans /usr/lib/systemd/system-generators
. Les générateurs sont exécutés au démarrage et créent des unités systemd natives pour les montages. Le premier, systemd-fstab-generator
, lit le fstab pour générer des unités, y compris une unité pour l’échange. Le second, systemd-gpt-auto-generator
inspecte le disque racine pour générer des unités. Il fonctionne uniquement sur les disques GPT et peut identifier les partitions d’échange par leur type GUID, voir systemd #GPT partition automounting pour plus d’informations.
Désactivation du swap
Pour désactiver un espace de swap spécifique :
# swapoff /dev/sdxy
Utilisez également le commutateur -a
pour désactiver tout l’espace de swap.
Comme swap est géré par systemd, il sera à nouveau activé au prochain démarrage du système. Pour désactiver définitivement l’activation automatique de l’espace d’échange détecté, exécutez systemctl --type swap
pour trouver le responsable.échangez l’unité et masquez-la.
Fichier d’échange
Comme alternative à la création d’une partition entière, un fichier d’échange offre la possibilité de varier sa taille à la volée et est plus facilement supprimé. Cela peut être particulièrement souhaitable si l’espace disque est limité (par exemple, un SSD de taille modeste).
Manuellement
Création de fichier d’échange
Utilisez dd pour créer un fichier d’échange de la taille de votre choix. Par exemple, créer un fichier d’échange de 512 MiO :
# dd if=/dev/zero of=/swapfile bs=1M count=512 status=progress
Définissez les bonnes autorisations (un fichier d’échange lisible dans le monde entier est une énorme vulnérabilité locale):
# chmod 600 /swapfile
Après avoir créé le fichier de taille correcte, formatez-le pour échanger:
# mkswap /swapfile
Activez le fichier d’échange:
# swapon /swapfile
Enfin, modifiez la configuration de fstab pour ajouter une entrée pour le fichier d’échange:
/etc/fstab
/swapfile aucun swap par défaut 0 0
Pour plus d’informations informations, voir fstab #Utilisation.
- Le fichier d’échange doit être spécifié par son emplacement sur le système de fichiers, et non par son UUID ou son ÉTIQUETTE.
- Lorsque vous utilisez Btrfs, n’oubliez pas d’ajouter également le sous-volume créé à la liste et de supprimer les options
discard,autodefrag
et de compression.
Supprimer le fichier d’échange
Pour supprimer un fichier d’échange, il doit d’abord être désactivé puis peut être supprimé:
# swapoff /swapfile# rm -f /swapfile
Supprimez enfin l’entrée correspondante de /etc/fstab
.
Automated
générateur de zram
Le but de cet outil est la création de périphériques zram. Il est écrit en Rust et réside dans le GitHub de systemd. Il peut être installé avec le paquet zram-generatorAUR.La configuration est simple et expliquée dans le fichier README.
systemd-swap
systemd-swap est un script permettant de créer un espace d’échange hybride à partir de swaps zram, de fichiers d’échange et de partitions d’échange. Il n’est pas affilié au projet systemd.
Installez le package systemd-swap. Décommentez et définissez swapfc_enabled=1
dans la section Fragmentée du fichier d’échange de /etc/systemd/swap.conf
. Démarrez/activez le service systemd-swap
.
Visitez la page GitHub des auteurs pour plus d’informations et pour configurer la configuration recommandée.
- Si le journal continue d’afficher l’avertissement suivant
systemd-swap: WARN: swapFC: ENOSPC
et qu’aucun fichier d’échange n’est créé, vous devez décommenter et définirswapfc_force_preallocated=1
dans/etc/systemd/swap.conf
. - Le fichier d’échange créé par systemd-swap ne peut pas être facilement utilisé pour l’hibernation. Voir le numéro 85 de systemd-swap.
Swap encryption
Voir dm-crypt/Swap encryption.
Performances
Les opérations d’échange sont généralement beaucoup plus lentes que l’accès direct aux données dans la RAM. La désactivation complète du swap pour améliorer les performances peut parfois entraîner une dégradation, car cela diminue la mémoire disponible pour les caches VFS, entraînant des E/S de disque plus fréquentes et coûteuses.
Les valeurs de swap peuvent être ajustées pour améliorer les performances :
Swappiness
Le paramètre swappiness sysctl représente la préférence (ou l’évitement) de l’espace de swap par le noyau. Swappiness peut avoir une valeur comprise entre 0 et 200 (max 100 si Linux < 5.8), la valeur par défaut est 60. Une valeur faible permet au noyau d’éviter l’échange, une valeur élevée oblige le noyau à essayer d’utiliser l’espace d’échange, et une valeur de 100 signifie que le coût d’E/S est supposé égal. L’utilisation d’une faible valeur sur une mémoire suffisante est connue pour améliorer la réactivité sur de nombreux systèmes.
Pour vérifier la valeur d’échange actuelle:
$ sysctl vm.swappiness
Alternativement, les fichiers /sys/fs/cgroup/memory/memory.swappiness
ou /proc/sys/vm/swappiness
peuvent être lus afin d’obtenir la valeur entière brute.
/proc
est beaucoup moins organisé et n’est conservé qu’à des fins de compatibilité, nous vous encourageons à utiliser /sys
à la place.Pour définir temporairement la valeur d’échange :
# sysctl -w vm.swappiness=10
Pour définir définitivement la valeur d’échange, créez un sysctl.d(5) fichier de configuration. Par exemple :
/etc/sysctl.d/99 - permutation.conf
vm.swappiness =10
Pour tester et plus sur les raisons pour lesquelles cela peut fonctionner, jetez un œil à cet article.
Pression de cache VFS
Un autre paramètre sysctl qui affecte les performances de swap est vm.vfs_cache_pressure
, qui contrôle la tendance du noyau à récupérer la mémoire utilisée pour la mise en cache des caches VFS, par rapport à pagecache et swap. L’augmentation de cette valeur augmente la vitesse à laquelle les caches VFS sont récupérés. Pour plus d’informations, consultez la documentation du noyau Linux.
Priorité
Si vous avez plus d’un fichier d’échange ou d’une partition d’échange, vous devriez envisager d’attribuer une valeur de priorité (0 à 32767) pour chaque zone d’échange. Le système utilisera des zones de swap de priorité supérieure avant d’utiliser des zones de swap de priorité inférieure. Par exemple, si vous avez un disque plus rapide (/dev/sda
) et un disque plus lent (/dev/sdb
), attribuez une priorité plus élevée à la zone d’échange située sur le périphérique le plus rapide. Les priorités peuvent être attribuées dans fstab via le paramètre pri
:
/dev/sda1 none swap defaults,pri=100 0 0/dev/sdb2 none swap defaults,pri=10 0 0
Ou via le paramètre --priority
de swapon:
# swapon --priority 100 /dev/sda1
Si deux zones ou plus ont la même priorité, et qu’il s’agit de la priorité la plus élevée disponible, les pages sont attribuées de manière alternée entre elles.
Utilisation de zswap ou zram
Zswap est une fonctionnalité du noyau Linux fournissant un cache de réécriture compressé pour les pages échangées. Cela augmente les performances et diminue les opérations d’E/S. ZRAM crée un fichier d’échange compressé virtuel en mémoire comme alternative à un fichier d’échange sur disque.
Striping
Il n’est pas nécessaire d’utiliser RAID pour des raisons de performances de swap. Le noyau lui-même peut rayer l’échange sur plusieurs périphériques, si vous leur donnez simplement la même priorité dans le fichier /etc/fstab
. Reportez-vous au GUIDE PRATIQUE Software-RAID pour plus de détails.