Drop swap pour zram sous Linux


  • Français


  • Je passe beaucoup de temps à jouer (je veux dire travail) sur mes ordinateurs, et j’ai trouvé beaucoup de choses intéressantes. L’un d’entre eux qui a récemment attiré mon attention est le zram0 dispositif. Je l’ai remarqué pour la première fois en travaillant sur l’un de mes articles Opensource.com il y a plusieurs mois. Il est apparu dans la sortie du lsblk commande:

    # lsblk
    NAME          MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
    sda             8:0    0 931.5G  0 disk
    ├─sda1          8:1    0   600M  0 part
    [...]
    zram0         252:0    0     8G  0 disk [SWAP]

    Il est identifié comme un espace d’échange, ce qui a d’abord piqué ma curiosité, alors j’ai fait quelques recherches. Zram s’appelait à l’origine “compcache”, qui signifie “cache compressé”. Il s’avère que zram est un outil permettant de créer un cache compressé en RAM, spécifiquement destiné à être utilisé comme espace d’échange.

    Mais pourquoi?

    Lorsque j’ai commencé à faire des recherches sur zram, je n’ai trouvé que quelques articles de base sur l’utilisation de zram pour l’espace d’échange. Au début, cela me semblait un peu contre-intuitif. Après tout, si vous manquez de RAM et que vous échangez des pages dans un lecteur virtuel en RAM, qu’y a-t-il à gagner ?

    J’ai ensuite trouvé la page wiki du projet Fedora qui proposait l’utilisation de Échange sur zram. La proposition dit : “Le swap est utile, sauf quand il est lent. zram est un lecteur RAM qui utilise la compression. Créez un swap-on-zram au démarrage. Et n’utilisez plus les partitions de swap par défaut.”

    Le reste de la page concerne les détails, les avantages, les effets secondaires et les commentaires.

    Zram pour l’espace d’échange sous Linux

    L’utilisation de zram pour l’espace d’échange est destinée à faire la même chose que l’espace d’échange standard basé sur une partition ou sur un fichier. Lorsque la pression sur la mémoire devient trop importante, certaines des données les moins récemment utilisées sont déplacées vers l’espace d’échange. En moyenne, il est compressé à environ 50 % de sa taille d’origine et placé dans l’espace zram de la RAM. C’est beaucoup plus rapide que de stocker ces pages de mémoire sur un disque dur et libère la RAM qu’il utilisait pour un autre usage.

    Économiser sur le swap

    J’ai essayé de trouver des recommandations révisées sur la quantité d’échange ou d’échange de zram à configurer. Cela m’a ramené à une réévaluation du swap et à mon article précédent, Quelle est la bonne quantité d’espace de swap pour un système Linux moderne ? Pour autant que je sache d’après la documentation la plus récente pour RHEL et Fedora, la quantité recommandée d’espace de swap n’a pas changé. Cette documentation, cependant, ignore l’utilisation de zram.

    Cependant, les tableaux de cet article précédent fournissent toujours un bon point de départ pour l’allocation d’espace de swap lors de l’utilisation d’anciennes versions de Linux qui n’utilisent pas zram ou dans les cas où zram a été désactivé.

    Les documents que j’ai trouvés pour la fonctionnalité Zram sont incohérents en termes d’allocation de zram par rapport à la taille de la RAM et de la quantité d’espace allouée à l’échange de zram.

    En raison du manque de documentation faisant autorité, j’ai effectué quelques expériences pour déterminer empiriquement l’algorithme utilisé pour allouer le swap zram. J’ai utilisé mes propres systèmes physiques et virtuels pour cela. Les résultats sont intéressants et ne correspondent à aucune documentation que j’ai trouvée jusqu’à présent.

    La taille par défaut de zram est de 8 Go sur tous les systèmes suffisamment grands pour supporter cela, mais elle est généralement réduite de manière significative sur les hôtes avec de petites quantités de RAM. Sur une machine virtuelle (VM) que j’utilise pour les tests, avec accès à 4 Go de RAM, l’espace de swap virtuel zram est alloué à 3,8 Go. Un ancien Dell que j’ai contient 8 Go de RAM et le zram est réglé sur 7,6 Go. Lorsque la RAM est réduite à 2 Go, la Zram est réduite à 1,9 Go.

    Tous les hôtes physiques et virtuels que j’ai avec plus de 8 Go de RAM affichent exactement 8 Go de zram. Cela inclut mon poste de travail principal avec 64 Go de RAM et d’autres hôtes avec 16 Go ou 32 Go de RAM.

    Sur la base de ces quelques points de données, je peux tirer la conclusion que les paramètres par défaut actuels sont de 8 Go de zram au maximum, et que zram correspond à 95 % de la RAM sur les hôtes de 8 Go ou moins.

    J’ai lu un certain nombre d’articles qui mentionnent d’autres tailles pour l’échange de zram, même jusqu’à 100% de RAM, mais ceux-ci semblent tous être théoriques plutôt que réels.

    Votre distribution peut être différente, mais voici les allocations réelles d’échange de zram pour Fedora et les distributions similaires :

    Sachez que l’algorithme de taille d’échange zram n’est basé sur aucune recommandation concernant la “meilleure” taille d’échange pour un système ou une application du monde réel donné. Cette allocation d’échange de zram est une approche plutôt probabiliste de ce qui devrait bien fonctionner sur une large gamme d’hôtes Linux. Cependant, le fait que la taille maximale d’échange de zram soit configurée pour 8 Go et le fait que j’ai toujours recommandé 8 Go comme quantité maximale d’échange traditionnel, je pense pouvoir dire que cela reflète les tailles optimales pour l’échange de zram.

    Gérer l’échange de zram

    Les valeurs par défaut de Zram sont stockées dans le /usr/lib/systemd/zram-generator.conf fichier de configuration. Ce qui suit provient de l’une de mes machines virtuelles de test avec 5097 Go de RAM alloués.

    # cat /usr/lib/systemd/zram-generator.conf
    # This config file enables a /dev/zram0 device with the default settings:
    # - size - same as available RAM or 8GB, whichever is less
    # - compression - most likely lzo-rle
    #
    # To disable, uninstall zram-generator-defaults or create empty
    # /etc/systemd/zram-generator.conf file.
    [zram0]
    zram-size = min(ram, 8192)

    Vous pouvez modifier la taille d’échange Zram par défaut dans la dernière ligne du zram-generator.conf fichier de configuration. Je déconseille de le faire, à moins que vous ne puissiez définitivement montrer une raison de le faire, et testez vos résultats une fois que vous avez apporté des modifications. Comme beaucoup d’autres paramètres de configuration par défaut sous Linux, ceux de zram ont été bien testés et conviennent à la plupart des cas d’utilisation.

    Surveiller zram

    L’utilitaire zramctl peut être utilisé pour afficher l’état actuel de zram.

    # zramctl
    NAME       ALGORITHM DISKSIZE DATA COMPR TOTAL STREAMS MOUNTPOINT
    /dev/zram0 lzo-rle       4.8G   4K   80B   12K       4 [SWAP]

    Le traditionnel swapon La commande peut également être utilisée pour afficher le swap, y compris le zram utilisé comme swap :

    # swapon --show
    NAME       TYPE      SIZE USED PRIO
    /dev/zram0 partition 4.8G   0B  100

    Une chose à savoir est que zramctl ne signale pas zram lorsqu’il ne contient aucune donnée, de sorte que les résultats contiennent une sortie nulle. Des outils comme lsblk, swapon, top, free, htopet ainsi de suite, affichent zram même lorsqu’il ne contient aucune donnée.

    Désactiver zram

    La swapoff -a la commande s’éteint zram swap ainsi que le stockage traditionnel HDD ou SSD utilisé comme swap. La swapon -a La commande n’affiche pas zram lorsqu’elle est vide. Utilisation zramctl /dev/zram0 Au lieu.

    # swapon --show
    # lsblk
    NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
    sda             8:0    0  120G  0 disk
    ├─sda1          8:1    0    1G  0 part /boot/efi
    ├─sda2          8:2    0    1G  0 part /boot
    └─sda3          8:3    0  118G  0 part
      ├─vg01-root 253:0    0   10G  0 lvm  /
      ├─vg01-swap 253:1    0    3G  0 lvm  [SWAP]
      ├─vg01-usr  253:1    0   30G  0 lvm  /usr
      ├─vg01-home 253:2    0   10G  0 lvm  /home
      ├─vg01-var  253:3    0   30G  0 lvm  /var
      └─vg01-tmp  253:4    0   10G  0 lvm  /tmp
    sr0            11:0    1 1024M  0 rom
    zram0         252:0    0    0B  0 disk
    # zramctl
    #
    # zramctl /dev/zram0
    NAME       ALGORITHM DISKSIZE DATA COMPR TOTAL STREAMS MOUNTPOINT
    /dev/zram0 lzo-rle         0B   0B    0B    0B       4

    Notez que /dev/zram0 n’apparaît pas dans ces commandes en tant qu’espace d’échange tant qu’il n’est pas utilisé à cette fin. Cela m’a causé une certaine confusion jusqu’à ce que mes expériences montrent que c’était le cas.

    Création d’échange Zram

    Zram lui-même existe depuis environ 20 ans, mais n’a été utilisé comme espace d’échange sur certaines distributions que depuis un an ou deux. L’installation Linux actuelle sur certains ou tous vos hôtes n’a peut-être pas été créée avec zram pour l’échange. Si tel est le cas, il peut être facilement résolu.

    Pour Fedora 32, la dernière version avant l’utilisation par défaut de zram pour le swap, il suffit de trois commandes simples.

    Vérifiez d’abord la présence de zram-swap.service fichier, installé dans le cadre du zram Pack RPM.

    # systemctl status zram-swap
    ● zram-swap.service - Enable compressed swap in memory using zram
         Loaded: loaded (/usr/lib/systemd/system/zram-swap.service; disabled; vendor preset: disabled)
         Active: inactive (dead)

    Ensuite, installez le zram-generator-defaults et zram-generator paquets.

    # dnf install zram-generator-defaults zram-generator

    Activez et démarrez le service zram-swap :

    # systemctl enable zram-swap.service
    # systemctl start zram-swap.service

    Et ensuite vérifier que zram0 existe et est utilisé comme espace d’échange :

    # lsblk
    NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sda             8:0    0  120G  0 disk
    ├─sda1          8:1    0    2G  0 part /boot
    └─sda2          8:2    0  118G  0 part
      ├─vg01-root 253:0    0   10G  0 lvm  /
      ├─vg01-swap 253:1    0    3G  0 lvm  [SWAP]
      ├─vg01-usr  253:2    0   35G  0 lvm  /usr
      ├─vg01-tmp  253:3    0   15G  0 lvm  /tmp
      ├─vg01-var  253:4    0   35G  0 lvm  /var
      └─vg01-home 253:5    0   20G  0 lvm  /home
    sr0            11:0    1 1024M  0 rom
    zram0         252:0    0  7.5G  0 disk [SWAP]

    Améliorer l’échange avec zram

    C’est tout ce qu’on peut en dire. C’était facile avec Fedora. Différentes distributions seront probablement tout aussi simples, avec quelques détails différents possibles dans les noms et les commandes des packages. Essayez zram swap sur votre ordinateur. Dans mon prochain article, je montrerai d’autres options de zram.

    Source

    Houssen Moshinaly

    Pour contacter personnellement le taulier :

    Laisser un commentaire

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

    Copy code