Supprimer le swap pour zram sous Linux
Zram est un outil permettant de créer un cache compressé en RAM, spécifiquement destiné à être utilisé comme espace de swap.
Je passe beaucoup de temps à jouer (je veux dire travailler) sur mes ordinateurs et j'ai trouvé beaucoup de choses intéressantes. Celui qui a récemment attiré mon attention est le périphérique zram0
. 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 le résultat de la commande lsblk
:
# 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 explorations. Zram s'appelait à l'origine « compcache », ce 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 de swap.
Mais pourquoi?
Lorsque j'ai commencé à faire des recherches sur zram, tout ce que j'ai trouvé, ce sont quelques articles de base sur l'utilisation de zram pour l'espace d'échange. Au début, cela me paraissait un peu contre-intuitif. Après tout, si vous manquez de RAM et que vous échangez des pages vers un lecteur virtuel en RAM, qu'est-ce que vous gagnez ?
J'ai ensuite trouvé la page wiki du projet Fedora qui proposait l'utilisation de Swap sur zram. La proposition dit : "Le swap est utile, sauf lorsqu'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 de 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 qu'un espace d'échange standard basé sur une partition ou sur un fichier. Lorsque la pression de 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 mémoire sur un disque dur et libère la RAM qu'il utilisait pour d'autres usages.
Économiser sur le swap
J'ai essayé de trouver des recommandations révisées sur la quantité de swap ou de swap 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 ? D'après la documentation la plus récente pour RHEL et Fedora, la quantité d'espace de swap recommandée n'a pas changé. Cette documentation ignore cependant l’utilisation de zram.
Cependant, les tableaux de cet article précédent constituent 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 de façon dont zram est alloué en ce qui concerne la taille de la RAM et la quantité d'espace allouée au swap 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 prendre en charge cela, mais elle est généralement considérablement réduite sur les hôtes dotés 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 vieux Dell que je possède contient 8 Go de RAM et le zram est réglé sur 7,6 Go. Lorsque la RAM est réduite à 2 Go, Zram est réduit à 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 pour 8 Go de zram au maximum, et que le zram représente 95 % de la RAM sur les hôtes de 8 Go ou moins.
J'ai lu un certain nombre d'articles mentionnant d'autres tailles pour l'échange de zram, même jusqu'à 100 % de la RAM, mais ceux-ci semblent tous théoriques plutôt que réels.
Votre distribution peut être différente, mais voici les allocations réelles de swap zram pour Fedora et les distributions similaires :
RAM ⇐ 8 Go : 0,95 × RAM
RAM > 8 Go : 8 Go
Sachez que l'algorithme de taille de swap zram n'est basé sur aucune recommandation concernant la « meilleure » taille de swap pour un système ou une application du monde réel donné. Cette allocation de swap 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 de swap zram soit configurée pour 8 Go et le fait que j'ai toujours recommandé 8 Go comme quantité maximale de swap traditionnel, je pense pouvoir dire que cela reflète les tailles optimales pour le swap zram.
Gestion du swap zram
Les valeurs par défaut de Zram sont stockées dans le fichier de configuration /usr/lib/systemd/zram-generator.conf
. Ce qui suit provient d'une de mes machines virtuelles de test avec 5 097 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 fichier de configuration zram-generator.conf
. Je vous déconseille de le faire, à moins que vous puissiez définitivement montrer une raison pour le faire et tester 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]
La commande traditionnelle swapon
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 à prendre en compte est que zramctl
ne fait pas de rapport sur zram lorsqu'il ne contient aucune donnée, les résultats contiennent donc une sortie nulle. Des outils comme lsblk
, swapon
, top
, free
, htop
, etc. , affichez zram même s'il ne contient aucune donnée.
Désactiver Zram
La commande swapoff -a
désactive le swap zram
ainsi que le stockage HDD ou SSD traditionnel utilisé comme swap. La commande swapon -a
n'affiche pas zram lorsqu'il est vide. Utilisez plutôt zramctl /dev/zram0
.
# 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 de swap jusqu'à ce qu'il soit 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'un échange Zram
Zram lui-même existe depuis environ 20 ans, mais n'est utilisé comme espace d'échange sur certaines distributions que depuis un an ou deux. L'installation Linux actuelle sur tout ou partie de vos hôtes n'a peut-être pas été créée avec zram pour le swap. Si tel est le cas, il est facile d'y remédier.
Pour Fedora 32, la dernière version avant l'utilisation par défaut de zram pour le swap, cela ne prend que trois commandes simples.
Tout d'abord, vérifiez la présence du fichier zram-swap.service
, installé dans le cadre du package RPM zram
.
# 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 les packages zram-generator-defaults
et zram-generator
.
# 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 puis vérifiez que zram0
existe et est utilisé comme espace de swap :
# 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 le swap 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 des détails différents dans les noms de packages et les commandes. Essayez zram swap sur votre ordinateur. Dans mon prochain article, je présenterai d'autres options zram.