Swap

Revision as of 16:37, 1 April 2021 by Fabby (talk | contribs) (Created page with "Il n'y a pas de valeurs optimales universelles pour ces paramètres.")
Other languages:
Deutsch • ‎English • ‎français • ‎русский


Aperçu

L'espace d'échange (« swap » à partir de maintenant) est utilisé pour étendre la capacité de la mémoire vive (RAM) disponible pour exécuter des logiciels .

  • Sans espace swap, vos applications se termineront jusqu'au point que le système d'exploitation complet se plante ou se gèle .
  • Contrairement, si votre système possède d'un espace swap, le noyau Linux peut prendre les pages de mémoire des applications / services non-actives et les écrire sur disque (« swapping ») pour pouvoir récupérer plus de mémoire vive ( « RAM ») pour les applications actives .


Il y a trois moyens selon Manjaro peur utiliser la mémoire swap:

  • Une partition swap
  • Un fichier swap
  • zswap


Cet article essaye d'être le plus complet que possible, mais si vous avez besoin de plus ample information, voyez articles liés en bas

Avez vous besoin de swap?

On ne peut pas répondre à cette question particulière sans les spécifications exactes de votre système . Même des systèmes avec beaucoup de mémoire vive de disponible, le swap est utilisé comme filet de sécurité et dû à des applications avec des besoins très particuliers . En bas une liste non-exhaustive qui éclairci cette définition vague en plus de détails :

  • Si vous utilisez de l'« hibernation » (mise en veille prolongée): oui, vous avez besoin de swap!
  • Si vous avez des services qui ne sont pas toujours actives, mais qui tournent quand-même : oui, vous avez besoin de swap!
  • Si vous avez une application qui alloue de la mémoire virtuelle directement comme stockuage et non du RAM : oui, vous avez besoin de swap!
  • Si vous avez une application qui contient une fuite de mémoire : oui, vous avez besoin de swap!
  • Si vous possédez d'un serveur contenant 1TB de RAM que vous utilisez sans applications qui allouent de la mémoire virtuelle directement ou ayant des duites de mémoire : non, vous n'avez pas besoin de swap!

Quelle est la taille de swap dont vous avez besoin?

La taille de swap est extrêmement variable et dépend de vos applications spécifiques et la façon dont vous les utilisez . Il n'y a pas de formule universelle sans surveillance de votre système surveillance sur une période de temps prolongée . Un bon point de départ sera :

  • Pour des systèmes contenant moins que 4GB de RAM, il est hautement recommandé que l'espace swap soit, au minimum, le double de la taille de votre RAM. Il es aussi recommandé que l'espace swap soit, au maximum, le double de votre RAM (dépendant de l'espace disque de disponible) en raison de rendements décroissants.
  • Pour des systèmes plus récentes (>4GB), votre swap devra être au minimum égal à votre mémoire vive (RAM) si vous utilisez de l'hibernation. Sinon, vous avez besoin d'un minimum de l'arrondi supérieur de la racine carrée de votre RAM en GB. Le maximum est, de nouveau, le double de votre RAM en raison de rendements décroissants.
  • Le seul et unique désavantage d'avoir trop de swap, sera que l'espace disque alloué ne pourra pas être utilisé ni par des applications, ni pour stocker des données.

Les "rendements décroissants" signifie qu'au cas ou vous avez besoin de plus de mémoire que le double de votre RAM, il vaut mieux rajouter du RAM puisque l'accès à un disque dur (HDD) est environs 10³ fois plus lent que la vitesse d'accès au RAM, donc une tâche qui prend 1 seconde en RAM, prendra 15 minutes en swap! Même sur un disque SSD la même opération d' une seconde prendra une minute entière avec un SSD.

En distillant tout cela on arrive au tableau ci-dessous: (Les dernières 3 colonnes sont le swap dont vous avez besoin)

       RAM   Sans hibernation    Avec hibernation  Maximum
       1GB              1GB                 2GB      2GB
       2GB              2GB                 3GB      4GB
       3GB              3GB                 5GB      6GB
       4GB              4GB                 6GB      8GB
       RAM   Sans hibernation    Avec hibernation  Maximum
       5GB              2GB                 7GB     10GB
       6GB              2GB                 8GB     12GB
       8GB              3GB                11GB     16GB
      12GB              3GB                15GB     24GB
      16GB              4GB                20GB     32GB
      24GB              5GB                29GB     48GB
      32GB              6GB                38GB     64GB
      64GB              8GB                72GB    128GB
     128GB             11GB               139GB    256GB
     256GB             16GB               272GB    512GB
     512GB             23GB               535GB      1TB
       1TB             32GB              1056GB      2TB
       2TB             46GB              2094GB      4TB
       4TB             64GB              4160GB      8TB
       8TB             91GB              8283GB     16TB
Note
Le serveur le plus large qu'un des auteurs de ce wiki a jamais dû installer, contenait 8TB de RAM et se trouvait juste en dehors de Paris.

Afficher de l'information sur le swap

La commande swapon vous affichera de l'information sur votre usage de swap actual. Par example:

swapon
NAME      TYPE      SIZE   USED PRIO
/dev/sda7 partition  20G  44.3M   -2

Le script suivant :

  • vous affichera si zswap est actif ou non, et si actif vous donnera des informations de zswap si vous exécutez le script en utilisant sudo.
  • vous affichera une liste de toutes les applications / services qui ont alloué du swap et combien en ordre décroissante.
#!/bin/bash
#Check whether running as root
if [ "$(whoami)" = 'root' ]; then
  dmesg | grep "zswap:" | grep --silent "load"
  if $? -eq 0 ; then
    # zswap is active
    echo "zswap information:"
    grep --recursive --color=none . /sys/kernel/debug/zswap/
    read -n 1 -s -r -p "Press any key to continue"
  else
    echo "[warning] zwap not active. Continuing"
  fi
else
  echo "[warning] Not running as root: skipping zswap info"
fi
for szFile in /proc/*/status ; do
  awk '/VmSwap|Name/{printf $2 "\t" $3}END{ print "" }' "$szFile"
done | sort --key 2 --numeric --reverse | more

Utiliser une partition swap

Une partition swap est la façon traditionnelle d'activer du swap. Dans ce scénario, une (ou plusieurs) partition(s) dédiée(s) sont crées pour allouer le swap.

Créer et activer une partition swap

Pour pouvoir créer une partition swap, vous avez besoin d'assez d’emplacement disque non-alloué pour créer votre partition swap. Si vous n'avez pas assez d'assez d'espace non-alloué, mais assez de place libre, veuillez bien procéder à la section #Utiliser_un_fichier_swap. Une partition swap doit être créée par une application de partition et doit avoir comme type de partition linuxswap.

Après avoir créé la partition swap, elle devra être initialisée avec la commande mkswap. Par exemple, si votre partition swap est /dev/sda3, vous devriez utiliser la commande :

sudo mkswap /dev/sda3

En suite, vous devriez activer la partition swap an utilisant la commande swapon. En continuant notre exemple en haut, on devra exécuter :

sudo swapon /dev/sda3

Pour assurer que le swap est activé au démarrage (« boot ») il faudra ajouter une entrée au fichier /etc/fstab. Comme d'habitude, il vaut mieux utiliser le UUID que le nom du device. Vous pouvez rajouter la ligne à la fin du fichier fstab en utilisant cette commande:

sudo bash -c "echo UUID=$(lsblk -no UUID /dev/sda3) none swap defaults 0 0 >> /etc/fstab"

If you would like to have more than one swap partition, simply repeat the steps above for any additional partitions.


Note
Be sure to replace /dev/sda3 in the above commands with your actual swap partition.


Tip
If you're using a HDD (spinning rust) put the swap partition *at the beginning of the disk* as the speed of the disk is higher on the inside tracks. On an SSD this doesn't matter.

Utiliser un ficher swap

Le plus grand désavantage d'une partition swap est qu'on doit re-partitionner le disque pour pouvoir changer la taille du swap. En utilisant des noyaux Linux à partir de ou supérieur à 2.6, il n'y a plus de différence de vitesse entre ces deux moyens.

Créer et utiliser in fichier swap statique

Tip
Il y a moyen d'avoir à la fois une partition d'échange et un fichier swap. Utilisant cette méthode, vous évitera de devoir re-partionner votre disque.


Premièrement, créez et initialisez le fichier qui contiendra le swap. Par exemple, pour créer un fichier swap de 4GB, utilisez la commande suivante :

sudo fallocate -l 4G /swapfile
sudo mkswap /swapfile


Maintenant, on protègera le fichier en donnant lecture et écriture par root uniquement. Utilisez ma commande suivante pour obtenir ce but :

sudo chmod u=rw,go= /swapfile


Maintenant que le fichier est protégé, on doit encore l'activer avec la commande swapon. En suivant notre exemple, utilisez :

sudo swapon /swapfile


Pour assurer que le swap est actif à chaque démarrage, vous pouvez rajouter une ligne au fichier /etc/fstab manuellement ou en utilisant la commande :

sudo bash -c "echo /swapfile none swap defaults 0 0 >> /etc/fstab"

Fichiers swap et BTRFS

A partir de la version 5.0 du noyau Linux, des fichiers swap résidents sur des partitions btrfs sont supportés. Néanmoins, ils ont besoin de quelques pas supplémentaires à ceux de la section précédente.

Avant d'exécuter la commande fallocate en haut, vous devez exécuter ces commandes :

sudo truncate -s 0 /swapfile
sudo chattr +C /swapfile
sudo btrfs property set /swapfile compression none


Ces commandes créent un fichier vide, désactivent COW pour ce fichier et assurent qu'il n'y a pas de compression active.

Fichiers swap sur ZFS

zfs ne supporte pas de fichiers de type swap, mais le même résultat peut être obtenu en utilisant un volume zvol comme volume swap.


Des instructions détaillés se trouve dans le guide ZoL guide (en Anglais).

Gestion automatique de swap avec systemd-swap

Note
Utiliser systemd-swap sur des volumes btrfs/zfs n'est pas encore inclus dans ce guide-ci.

C'est possible de gérer la taille du ficher swap en utilisant systemd-swap. systemd-swap peut créer des fichiers swap dynamiquement, dépendant de l'utilisation de la mémoire ainsi qu'une façon efficace et facile de gérer zswap.

Installation et configuration de systemd-swap

En premier lieu, installez et activez systemd-swap :

pamac install systemd-swap
sudo systemctl enable systemd-swap.service


En suivant, activez la gestion dynamique en créant un fichier /etc/systemd/swap.conf.d/myswap.conf contenant les paramètres suivantes :

zswap_enabled=0
zram_enabled=0
swapfc_enabled=1


Si vous préférez une seule commande pour créer ce fichier, veuillez utiliser :

sudo bash -c 'echo -e "zswap_enabled=0\nzram_enabled=0\nswapfc_enabled=1" > /etc/systemd/swap.conf.d/myswap.conf'

Enlever les autres types de swap

Pour laisser gérer votre swap par systemd_swap, vous devez enlever les autres moyens de swap déjà actives.


Utilisez la commande swapon pour afficher votre configuration swap actuelle. En dessous un exemple de configuration :

swapon
NAME      TYPE      SIZE USED PRIO
/swapfile file        4G   0B   -2
/dev/sda3 partition 8.4G   0B   -3


Cet exemple vous montre deux dispositifs de swap: une partition et un ficher swap. Pour arrêter les deux, un utilisera la commande swapoff.

sudo swapoff /swapfile
sudo swapoff /dev/sda3


En suivant, vous devriez enlever ces dispositifs. La partition swap devra être effacé en utilisant votre logiciel de partitionnement favori. Simplement effacer cette partition maintenant.

sudo rm /swapfile


En suite, vous devriez aussi enlever toutes les lignes swap du fichier /etc/fstab. Éditez le fichier avec votre éditeur favori et enlevez ou commentez les lignes contenant l'espace swap. En utilisant l'exemple d'en haut, on devra enlever les lignes suivantes :

UUID=c2430cf1-8ea9-4422-a5c5-5a38779194c3 swap           swap    defaults,noatime 0 2
/swapfile none swap defaults 0 0


Puis redémarrez votre ordinateur. Après redémarrage, quand vous exécutez swapon vous devriez voir quelque chose similaire que :

NAME                           TYPE SIZE USED PRIO
/var/lib/systemd-swap/swapfc/1 file 512M   0B   -2


systemd-swap va maintenant activer et désactiver des fichiers swap en fonction de l'utilisation de l'utilisation de votre mémoire vive.


Note
Même si vous enlevez la partition swap de votre ficher fstab, systemd-swap va continuer à utiliser la partition swap si la partition n'es pas effacé!

Utiliser zswap avec systemd-swap

zswap est du swap comprimé, stocké en mémoire vive. zswap garde les pages fréquemment utilisées en RAM et écrit les pages rarement utilisées sur disque. En beaucoup de cas, ceci résultera en performances accrues et moins d'usure intensive de disques SSD.

Pour activer zswap avec systemd-swap, chngez les instructions en haut et activez le paramètre du noyau Linux Template:META Error.

Considérations relatives au réglage et aux performances

Même si swap vous semble une bonne façon pour étendre votre mémoire facilement et rapidement, une utilisation excessive peut causer des dégradations importantes de la performance, comme déjà mentionné avant.

Il existe quelques paramètres pour régler l'utilisation de swap. Ceux-ci sont swappiness et vfs_cache_pressure. Pour afficher votre configuration actuelle, exécutez les commandes suivantes :

cat /proc/sys/vm/swappiness
cat /proc/sys/vm/vfs_cache_pressure

swappiness contrôle la probabilité qu'une sera trensféré de mémoire vive vers le swap. Cette valeur représente le pourcentage le mémoire libre avant d'activer le processus de swap. De plus bas la valeur, de moins probable que swap sera utilisé et de plus de pages de mémoires seront gardés en mémoire vive où :

  • 0 désactive le swap
  • 60 est la valeur par défaut, idéal pour un serveur qui exécute beaucoup de services
  • 100 active le swap agressivement

Pour la plupart des ordinateurs, la valeur recommandé est de 10. Théoriquement, le processus de swap ne commencera que quand l'utilisation de la mémoire vive atteint les 90 pourcent.

vfs_cache_pressure est un pourcentage qui contrôle la tendence du noyau à récupérer la mémoire utilisé pour la mise en cache des objets inode ou répertoire. La valeur par défaut est 100. L'augmentation de cette valeur augmentera la vitesse à laquelle ces objets sont supprimés du cache RAM. La réduction permettra à ces objets d'être mis en cache en mémoire plus longtemps, consommant de la RAM supplémentaire au fil du temps. En fonction de votre charge de travail spécifique, augmenter ou réduire cette valeur de trop, peut avoir des impacts négatifs importants sur les performances de votre système. Vous devez expérimenter avec ces valeurs et trouver l'équilibre idéal pour votre système et les valeurs par défaut sont bien pour la plupart des systèmes. En général, optimisez d'abord la valeur de swappiness avent d'aller vers vfs_cache_pressure.

Pour changer ces valeurs, utilisez la commande sysctl. Par exemple, pour changer la valeur du paramètre swappiness à 10, utilisez :

sudo sysctl vm.swappiness=10


Il n'y a pas de valeurs optimales universelles pour ces paramètres. Experimentation is needed to find the optimum configuration for your specific hardware and workload.


See Also