Swap

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

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.

Remarque : Il n’y a pas de différence de performance entre l’utilisation d’une partition d’échange et d’un fichier d’échange contigu.

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

Tango - inexacte.pngL’exactitude factuelle de cet article ou de cette section est contestée.Tango - inexact.png

Raison: 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
Avertissement: Toutes les données de la partition spécifiée seront perdues.

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

device_UUID est l’UUID de l’espace d’échange.

Voir fstab pour la syntaxe du fichier.

Remarque:

  • 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.
Avertissement: L’activation de la défausse sur les configurations RAID à l’aide de mdadm entraînera le verrouillage du système au démarrage et pendant l’exécution, si vous utilisez swapon.

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).

Avertissement: Btrfs prend en charge les fichiers d’échange avec des limitations depuis la version 5.0 du noyau Linux. Voir fichier d’échange Btrfs # pour plus d’informations.

Manuellement

Création de fichier d’échange

Remarque: Si vous utilisez Btrfs, suivez d’abord la procédure décrite dans Btrfs # Fichier d’échange pour initialiser le 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
Remarque: Utiliser dd pour allouer un fichier d’échange est la solution la plus portable, voir swapon(8) § Fichiers avec des trous pour plus de détails.

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.

Remarque:

  • 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

Remarque: L’auteur recommande maintenant d’utiliser zram-generator à la place, en raison de la faible fréquence de validation et de zram couvrant les besoins de la plupart des utilisateurs.

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.

Remarque:

  • 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éfinir swapfc_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.

Note: Comme /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.

Related Posts

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *