Zswap, ZRam, EarlyOOM… organiser la gestion d'une pénurie de RAM
Sur mon SSD, j'avais l'habitude d'activer ZRam comme indiqué dans ces colonnes.
Ma vie était plutôt simple jusque là
(tous droits réservés).
Puis j'ai lu un peu de doc sur EarlyOOM qui est utilisé dans Fedora 32 par exemple, mais aussi sur systemd-oomd, sorti plus tard (intégré à Linux 4.20 sorti en décembre 2018).
Et puis finalement j'entends parler de Zswap qui serait mieux que Zram…
Quelques notions (très incomplètes)
Déjà je ne vais pas vous expliquer quelle solution est la meilleure : cela dépasse tout simplement mes compétences.
Entre Zram (intégré à Linux 3.14 sorti en mars 2014) et Zswap (intégré à Linux 3.11 sorti en septembre 2013), retenez déjà une première différence : zswap joue le rôle d'un cache pour un espace de swap existant sur le disque, là où Zram permet de créer directement un espace de swap en RAM.
L'alternative peut donc être posée ainsi :
- choisissez Zram si vous n'avez pas configuré de partition swap sur votre disque ;
- choisissez Zswap si vous avez configuré une partition swap sur votre disque.
Dans les deux cas vous faîtes le choix d'échanger un peu de temps processeur (pour calculer la compression/décompression des données en RAM) contre de l'espace RAM. Et dans les deux cas vous permettez de limiter les écritures sur le disque, ce qui est généralement une bonne idée si vous avez un SSD pour allonger sa durée de vie.
À noter que pour activer Zswap, il est conseillé de désactiver Zram pour ne pas le fausser.
Ce que j'ai mis en place sur ma Debian et comment
Pour être franc, j'ai suivi l'avis de l'auteur de ce billet de blogue cité dans l'introduction : Setting up Zswap in Debian 11 GNU/Linux, par BaronHK's Rants. Il conseille le couple Zswap et EarlyOOM (mais sans se prononcer sur systemd-oomd ou un des nombreux autres équivalents à EarlyOOM qui tous visent une remédiation plus élaborée que le mécanisme OOM killer du noyau utilisé par défaut lorsque RAM et swap sont remplis). Je décide d'appliquer sa méthode clé en main. Toutefois comme j'ai rencontré quelques obstacles, je consigne ici tout ce que j'ai dû effectuer comme manipulations sur ma Debian Testing fraîchement réinstallée.
Installer Zswap
Commencez par désactiver Zram s'il est actif (sudo apt remove zram-tools
).
Regardez ensuite si Zswap est déjà activé : cat /sys/module/zswap/parameters/enabled
: « N » non pour non, « Y » pour oui.
Installer l'outil de compression lz4 (Debian privilégie lzo qui est plus lent) : sudo apt install lz4
.
Ouvrir le fichier /etc/initramfs-tools/modules : sudo nano /etc/initramfs-tools/modules
et ajouter à la fin du fichier ces trois lignes :z3fold
lz4
lz4_compress
Demandez la prise en compte de cette modification : sudo update-initramfs -u
.
Ouvrir le fichier /etc/default/grub : sudo nano /etc/default/grub
et ajouter la suite de la ligne démarrant par « GRUB_CMDLINE_LINUX_DEFAULT= » : zswap.enabled=1 zswap.compressor=lz4 zswap.max_pool_percent=25 zswap.zpool=z3fold
Par exemple ma ligne se présente ainsi : « GRUB_CMDLINE_LINUX_DEFAULT="quiet zswap.enabled=1 zswap.compressor=lz4 zswap.max_pool_percent=25 zswap.zpool=z3fold" ».
Demandez la prise en compte de cette modification : sudo update-grub
.
Redémarrez et vérifiez que tout est bien configuré avec la commande grep -R . /sys/module/zswap/parameters
qui devrait donner ceci :
/sys/module/zswap/parameters/same_filled_pages_enabled:Y
/sys/module/zswap/parameters/enabled:Y
/sys/module/zswap/parameters/max_pool_percent:25
/sys/module/zswap/parameters/compressor:lz4
/sys/module/zswap/parameters/non_same_filled_pages_enabled:Y
/sys/module/zswap/parameters/zpool:z3fold
/sys/module/zswap/parameters/accept_threshold_percent:90
Installer EarlyOOM
Installer et activer EarlyOOM avec la commande : sudo apt install earlyoom && sudo systemctl enable –now earlyoom
.
Vérifiez que que la commande a été prise en compte : systemctl status earlyoom.service
.
Maintenant oubliez tout, le système prend la main :)
Un mois plus tard
Je reviens signaler que le système tel que configuré est tout de même assez agressif : avec Thunderbird, Liferea et Firefox ouverts, l'ouverture d'une deuxième instance Firefox provoque assez vite la fermeture de la session pré-existante. J'ai fini par upgrader ma RAM tant qu'il est encore temps.