Jump to content
From ArchWiki
État de la traduction: Cet article est la version francophone de Swap. Date de la dernière traduction: 2022-10-03. Vous pouvez aider à synchroniser la traduction s'il y a eu des changements dans la version anglaise.

Related articles

- fstab (Français)
- Power management/Suspend and hibernate#Hibernation
- Zswap
- Swap on video ram
- ZFS#Swap volume
- dm-crypt/Swap encryption

Cette page fournit une introduction à l'espace d'échange («swap») sur GNU/Linux. Elle couvre la création et l'activation des partitions swap et des fichiers swap.

Extrait de All about Linux swap space :

  Linux divise sa mémoire physique («RAM») en morceaux de mémoire appelés pages. «Swap»-er est le processus par lequel une page de mémoire est copiée dans l'espace préconfiguré sur le disque dur, appelé espace d'échange ou «swap», pour libérer cette page de mémoire. Les tailles combinées de la mémoire physique et de l'espace d'échange constituent la quantité de mémoire virtuelle disponible.

La prise en charge de l'espace d'échange est assurée par le noyau Linux et les utilitaires de l'espace utilisateur du paquet util-linux.

## Espace de pagination

L'espace de pagination peut prendre la forme d'une partition de disque ou d'un fichier. Les utilisateurs peuvent créer un espace de pagination pendant l'installation ou à tout moment par la suite. 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 aussi pour prendre en charge la suspension sur disque.

L'intérêt d'étendre la mémoire virtuelle avec le 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, alors il peut être bénéfique d'activer l'échange. Cela permet d'éviter le situations d'insuffisance de mémoire, où le mécanisme «OOM killer» du noyau Linux tentera automatiquement de libérer de la mémoire en tuant les processus. Pour augmenter la quantité de mémoire virtuelle à la quantité requise, ajoutez la différence nécessaire (ou plus) comme espace d'échange.

Le plus gros inconvénient de l'activation de l'espace d'échange est sa baisse de performance, consultez la section #Performance. Par conséquent, l'activation de l'espace de pagination est une question de préférence personnelle : certains préfèrent que les programmes soient tués plutôt que d'utiliser du «swap» et d'autres préfèrent utiliser la «swap» et un système plus lent lorsque la mémoire physique est épuisée.

Note: Il n'y a aucune différence de performance entre l'utilisation d'une partition d'échange et d'un fichier d'échange contigu.

Pour vérifier l'état du swap, utilisez :

    $ swapon --show

Ou pour afficher la mémoire physique ainsi que l'utilisation de l'espace de pagination :

    $ free -h

## Partition de swap

Une partition de swap peut être créée avec la plupart des outils de partitionnement GNU/Linux. Les partitions de swap sont désignées comme étant de type `82` en MBR et `0657FD6D-A4AB-43C4-84E5-0933C84B4F4F` en GPT.

Pour configurer une partition comme «Linux swap», on utilise la commande mkswap(8). Par exemple :

    # mkswap /dev/sdxy

Attention: Toutes les données de la partition spécifiée seront perdues.

Pour activer le périphérique pour la pagination :

    # swapon /dev/sdxy

Pour activer cette partition swap 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.

Consultez fstab (Français) pour la syntaxe du fichier.

Note: L'entrée fstab est facultative si la partition d'échange est située sur un périphérique utilisant GPT. Consultez #Activation par systemd.
Attention: L'activation du discard sur les configurations RAID à l'aide de mdadm provoquera un blocage du système au démarrage et pendant l'exécution, si vous utilisez swapon.

### Activation par systemd

systemd active les partitions d'échange selon deux mécanismes différents. Tous deux sont des 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 le swap. Le second, `systemd-gpt-auto-generator` inspecte le disque racine pour générer des unités. Il fonctionne sur les disques GPT uniquement, et peut identifier les partitions d'échange par leur type GUID, consultez Systemd (Français)#Montage automatique d'une partition GPT pour plus d'informations.

### Désactivation de la swap

Pour désactiver un espace d'échange spécifique :

    # swapoff /dev/sdxy

Vous pouvez également utiliser le paramètre `-a` pour désactiver tout l'espace d'échange.

Comme l'espace d'échange est géré par systemd, il sera réactivé au prochain démarrage du système. Pour désactiver définitivement l'activation automatique la swap détecté, exécutez `systemctl --type swap` pour trouver l'unité .swap responsable et masquez-la.

## Fichier d'échange

En tant qu'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 fichiers d'échange

Note: Btrfs prend en charge le fichier d'échange avec des limitations depuis la version 5.0 du noyau Linux, pour ce système de fichiers, suivez la procédure décrite dans Btrfs#Swap file pour initialiser le fichier d'échange.

Utilisez dd pour créer un fichier swap de la taille de votre choix. Par exemple, pour créer un fichier swap de 512 MiB :

    # dd if=/dev/zero of=/swapfile bs=1M count=512 status=progress

Note: L'utilisation de dd pour allouer un fichier swap est la solution la plus portable, consultez swapon(8) § Files with holes pour plus de détails.

Définissez les bonnes permissions (un fichier swap lisible par tous est une énorme vulnérabilité locale) :

    # chmod 0600 /swapfile

Après avoir créé le fichier de taille correcte, formatez-le en swap :

    # mkswap -U clear /swapfile

Activez le fichier d'échange :

    # swapon /swapfile

Enfin, modifiez la configuration fstab pour ajouter une entrée pour le fichier d'échange :

    /etc/fstab

    /swapfile none swap defaults 0 0

Pour plus d'informations, consultez Fstab (Français)#Utilisation.

Note:

- Le fichier d'échange doit être spécifié par son emplacement sur le système de fichiers, et non par son UUID ou son LABEL.
- Lorsque vous utilisez Btrfs, n'oubliez pas d'ajouter également le sous-volume créé à la liste, et de supprimez les options `discard,autodefrag` du sous-volume monté en premier (qui contrôlera ces paramètres pour l'ensemble du FS).
- La compression doit également être désactivée, mais l'attribut `No_COW` (précédemment défini avec `chattr +C`) s'en charge.

#### Supprimer le fichier swap

Pour supprimer un fichier swap, il faut d'abord le désactiver, puis le supprimer :

    # swapoff /swapfile
    # rm -f /swapfile

Enfin, supprimez l'entrée correspondante de `/etc/fstab`.

### Automatisé

#### systemd-swap

Note: L'auteur recommande maintenant recommande d'utiliser zram-generator à la place, en raison de la faible fréquence de commit et du fait que ZRAM couvre les besoins de la plupart des utilisateurs.

systemd-swap est un script permettant de créer un espace de pagination hybride à partir de ZRAM swap, de fichiers de pagination et de partitions de pagination. Il n'est pas affilié au projet systemd.

Installez le paquet systemd-swap. Décommentez et définissez `swapfc_enabled=1` dans la section Swap File Chunked de `/etc/systemd/swap.conf`. Démarrez et activez le service `systemd-swap`.

Visitez la page GitHub de l'auteur pour plus d'informations et pour mettre en place la configuration recommandée.

Note:

- Si le journal continue à 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. Consultez systemd-swap issue 85.

## Chiffrement de la swap

Consultez Dm-crypt/Swap encryption.

## Performance

Les opérations de swap sont généralement beaucoup plus lentes que l'accès direct aux données en RAM. Désactiver entièrement le swap pour améliorer les performances peut parfois conduire à une dégradation, car cela diminue la mémoire disponible pour les caches du système de fichier virtuel (VFS), entraînant des utilisations du disque plus fréquentes et plus coûteuses.

Les valeurs de swap peuvent être ajustées pour améliorer les performances :

### Swappiness

Le paramètre sysctl swappiness représente la préférence (ou l'évitement) du noyau pour l'espace swap. Swappiness peut avoir une valeur entre 0 et 200 (max 100 si Linux < 5.8), la valeur par défaut est 60. Une valeur basse fait que le noyau évite le swapping, une valeur élevée fait que le noyau essaie d'utiliser l'espace de swap, et une valeur de 100 signifie que le coût d'E/S est supposé être égal. L'utilisation d'une valeur faible sur une mémoire suffisante est connue pour améliorer la réactivité sur de nombreux systèmes.

Pour vérifier la valeur actuelle de swapiness :

    $ sysctl vm.swappiness

Alternativement, les fichiers `/sys/fs/cgroup/memory/memory.swappiness` (spécifique aux cgroup v1) ou `/proc/sys/vm/swappiness` peuvent être lus afin d'obtenir la valeur entière brute.

Pour définir temporairement la valeur de swappiness :

    # sysctl -w vm.swappiness=10

Pour définir la valeur de permutation de manière permanente, créez un fichier de configuration sysctl.d(5). Par exemple :

    /etc/sysctl.d/99-swappiness.conf

    vm.swappiness=10

Pour que le chargeur d'amorçage définisse la «swappiness» lors du chargement du noyau, ajoutez un paramètre du noyau, par exemple `sysctl.vm.swappiness=10`.

Pour tester et en savoir plus sur les raisons pour lesquelles cela peut fonctionner, jetez un œil à cet article.

### Pression du 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 qui est utilisée pour la mise en cache des caches VFS, par rapport au pagecache et au swap. L'augmentation de cette valeur augmente la vitesse à laquelle les caches VFS sont récupérés [1]. 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 les zones d'échange de priorité supérieure avant d'utiliser les zones d'échange 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 plus haute priorité disponible, les pages sont allouées entre elles en alternance stricte.

### Utilisation de zswap ou zram

Zswap est une fonctionnalité du noyau Linux qui fournit un cache en écriture compressé pour les pages échangées, ZRAM crée un bloc d'échange virtuel compressé en mémoire comme alternative à un fichier ou une partition d'échange sur le disque. Les deux approches augmentent les performances et diminue les opérations d'entrée/sortie sur disque.

### Striping

Il n'est pas nécessaire d'utiliser RAID améliorer les performance du swap. Le noyau lui-même peut répartir le swap sur plusieurs périphériques, si vous leur donnez simplement la même priorité dans le fichier `/etc/fstab`. Reportez-vous à The Software-RAID HOWTO pour plus de détails.

Category:

- File systems (Français)