10
septembre
2020
16:39

Configuration de la compression RAM avec ZSwap

10 septembre 2020 16:39

Lorsque la RAM est épuisée, l'ordinateur devient très lent lorsqu'il accède au fichier d'échange sur le disque dur. Pour résoudre ce problème, le module zswap a été inventé. Par défaut, il est désactivé dans le système d'exploitation Linux, mais vous pouvez l'activer.

Почavait-il besoin que j'utilise zswap ? Il y a 2 clés de 2 Go installées, mais la carte mère ne prend physiquement en charge que 3 Go - il s'agit d'une limitation d'une carte mère basée sur le chipset Intel 82945. Sur un autre ordinateur, fonctionnant également sous Linux, des barrettes RAM de 1 Go et 2 Go sont installées (3 Go au total), elles suffisent généralement pour travailler sur Internet. Mais parfois, lors de l'ouverture de gros fichiers PDF ou d'images, la RAM peut s'épuiser...

Choix : zram ou zswap

zram est utilisé pour la compression permanente des pages - une section d'échange est allouée en mémoire, dans laquelle les pages de mémoire compressées sont déchargées comme dans un fichier d'échange ordinaire, mais dans une RAM rapide.

zswap n'alloue pas de partition en mémoire - seulement un volume dynamique (pool) en RAM, qui comprend uniquement les pages candidates à l'accès au fichier d'échange physique. Les pages sont également compressées avant d'être placées dans le pool.

Étant donné que la taille de la mémoire est suffisamment grande, je n'ai pas besoin de compresser constamment la RAM comme le fait zram. Il est nécessaire de s'assurer qu'il n'y a pas d'échange sur le disque lorsque la RAM est presque pleine.

Solution :

  1. Dans la ligne du bootloader GRUB, qui se charge de transmettre les paramètres du noyau, j'indique un appel au module ZSwap :

    sudo nano /etc/default/grub

correction de la ligne GRUB_CMDLINE_LINUX_DEFAULT comme suit :

GRUB_CMDLINE_LINUX_DEFAULT="noresume zswap.enabled=1 zswap.zpool=z3fold zswap.compressor=lz4 zswap.max_pool_percent=35"

GRUB_CMDLINE_LINUX=""

  1. Configuration GRUB mise à jour :

    sudo update-grub

  2. Chargement autorisé de modules pour une compression avancée

    sudo nano /etc/initramfs-tools/modules

j'ai ajouté les lignes:

lz4
lz4_compress
z3fold

et enregistré les modifications.

  1. J'ai commencé à mettre à jour le fichier initrd (qui contient iniramfs - le système de fichiers initial à charger dans la RAM au démarrage du système d'exploitation ; la deuxième partie du noyau est le fichier statique vmlinuz, qui n'est pas modifié par cette commande et contient le noyau lui-même) :

    sudo update-initramfs -u

  2. Redémarrez le système

    sudo reboot

  3. Vérifiez.

  • Il n'y avait pas de RAM avant de configurer le module de compression.

    dmesg | grep zswap

  • Après le premier démarrage sans les modules lz4, lz4compress, la commande dmesg sort
    [ 2.690663] zswap : chargé à l'aide du pool lzo/zbud

  • Après la configuration finale avec l'inclusion des modules lz4, lz4compress et z3fold, le résultat de la commande dmesg est le suivant :
    [ 2.734842] zswap : chargé à l'aide du pool lz4/z3fold


Remarques :

  1. La différence entre les méthodes de compression lzo et lz4 réside dans la vitesse de compression/décompression - lz4 a la vitesse de compression et de décompression la plus élevée parmi toutes.
  2. Sur les systèmes avec une petite quantité de RAM, au lieu de zswap.zpool=z3fold, il est préférable d'essayer zswap.zpool=zsmalloc (niveau de compression jusqu'à 7).
  3. La taille maximale du pool pour les pages de cache compressées est de 50 %, car selon free -h sur un ordinateur doté de 3 Go de RAM, la taille du cache est de 600 Mo et 1,1 Go est libre (1,7 Go représente environ 50 % des 3 Go de RAM). Sur les systèmes dotés d'une petite quantité de RAM, la limite zswap.max_pool_percent doit être réduite à 10-15 %, de sorte qu'elle soit de 200 à 300 Mo. La taille du pool (cache compressé) de pages est dynamique.

    Mise à jour du 10 juin 2021: après augmentation dans le fichier de configuration /etc/default/grub paramètre zswap.max_pool_percent de 50 à 70 et exécution de la commande sudo update-grub la taille de la RAM libre (gratuite) est passée de 213 à 500 Mo, apparemment en raison de la compression de la RAM. À mon avis, la taille optimale max_pool_percent pour une économie maximale de RAM, elle est comprise entre 70 et 90 %. Avec le paramètre max_pool_percent au niveau de 90 %, je n'ai remarqué aucun ralentissement dans le fonctionnement du programme ou du système d'exploitation dans son ensemble. Après avoir augmenté zswap.max_pool_percent à 90, la taille de la RAM libre lorsque le navigateur Mozilla Firefox est en cours d'exécution est comprise entre 908 et 937 Mo. La vitesse du navigateur FireFox a également augmenté.

Ajout du 21/10/2021 : avec max_pool_percent=90, j'ai observé de forts échanges sur le site Web des Services de l'État lors de la soumission d'un formulaire complété pour le recensement de la Fédération de Russie. Max_pool_percent réduit = 35 (environ 1 Go de RAM), exécuté sudo update-grub et redémarré le PC. Apparemment, une augmentation excessive du paramètre max_pool_percent, supérieure à 50 %, n'est pas souhaitable.

Ajout 2023. Sortie des statistiques d'opération zswap

Affichage des paramètres ZSwap actuels

grep -R . /sys/module/zswap

Statistiques de performances de ZSwap (débogage) :

sudo grep -R . /sys/kernel/debug/zswap/

Si zswap est activé, mais qu'il n'y a no de pages compressées dans les statistiques (/sys/kernel/debug/zswap/stored_pages:0), cela signifie que le système d'exploitation dispose de suffisamment de RAM. Dans ce cas, le débogage zswap produira des zéros, car aucune page mémoire n'attend d'être chargée dans le swap.

Sources :



Publications connexes