# Optimiser la gestion de la RAM et du Swap sous Linux

- Link: https://dolys.fr/forums/topic/optimiser-gestion-ram-swap-linux/
- Published: 2018-01-28T13:16:25+02:00
- Author: nam1962

Linux gère déjà très bien la mémoire tout seul. Mais quelques réglages et surtout une bonne organisation de la swap peuvent rendre une machine plus confortable quand la RAM commence à manquer. Et pour moi, même avec beaucoup de RAM : on DOIT avoir une swap 😉 Commençons par regarder ce que fait réellement la machine avant de toucher aux réglages. 1 &#8211; Voir l&rsquo;état de la RAM et de la swap Pour voir la mémoire : free -h Ne vous inquiétez pas si Linux utilise beaucoup de RAM. Il profite de la mémoire disponible pour ses caches et sait la récupérer quand une application en a besoin. Dans la sortie de free, regardez surtout la colonne : available Pour voir les espaces de swap actifs : swapon --show Pour voir si zram est utilisée : zramctl Et les deux réglages mémoire qui nous intéressent ici : cat /proc/sys/vm/swappiness cat /proc/sys/vm/vfs_cache_pressure 2 &#8211; Faut-il vraiment une swap ? Pour moi : oui, on DOIT avoir une swap, même avec beaucoup de RAM. Linux peut fonctionner sans swap. Quand la RAM vient à manquer, il dispose alors de moins de possibilités pour libérer de la mémoire et peut finir par tuer des processus avec l&rsquo;OOM killer. Avec une swap disponible, le noyau peut déplacer des pages mémoire peu utilisées et conserver davantage de RAM pour ce qui travaille réellement. Ça ne transforme évidemment pas un SSD en RAM. Une machine qui passe son temps à lire et écrire plusieurs gigaoctets de swap disque va ramer. Mais je préfère largement disposer d&rsquo;une réserve quand arrive un gros pic de mémoire. J&rsquo;aime donc avoir une swap assez confortable lorsque l&rsquo;espace disque le permet. J&rsquo;ai ainsi réussi à faire tourner Nextcloud + Collabora sur un petit VPS avec seulement 1 Go de RAM et 75 Go de SSD. Là, la swap n&rsquo;était franchement pas décorative 😛 3 &#8211; Partition, swapfile, zram : qu&rsquo;est-ce que j&rsquo;ai ? La commande : swapon --show vous dira ce qui est réellement utilisé. Vous pouvez rencontrer : une partition swap sur le disque ; un swapfile, donc un fichier utilisé comme swap ; une zram, espace compressé conservé en RAM. On peut également combiner zram et une swap sur disque. C&rsquo;est une configuration que j&rsquo;aime bien : zram absorbe en priorité une partie de la pression mémoire et la swap disque reste disponible derrière si ça chauffe vraiment. Une partition swap existante qui fonctionne correctement n&rsquo;a aucune raison d&rsquo;être supprimée juste pour la remplacer par un fichier. 4 &#8211; Créer un swapfile Le swapfile est pratique : sa taille peut être choisie sans repartitionner le disque. Vérifiez d&rsquo;abord ce que vous avez : swapon --show lsblk -f findmnt -no FSTYPE / Et vérifiez qu&rsquo;un fichier /swapfile n&rsquo;existe pas déjà : ls -lh /swapfile Les commandes suivantes sont donc à utiliser pour créer un nouveau swapfile, pas pour écraser tranquillement celui qui existe déjà ! Sur ext4 et les systèmes de fichiers classiques Exemple avec un swapfile de 8 Gio : sudo dd if=/dev/zero of=/swapfile bs=1M count=8192 status=progress sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile Vérifiez : swapon --show Puis ajoutez-le au démarrage : echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab Et contrôlez : tail -n 5 /etc/fstab Si votre système est en Btrfs Btrfs demande un swapfile préparé spécialement pour son fonctionnement Copy-on-Write. La commande dédiée simplifie le travail : sudo btrfs filesystem mkswapfile --size 8G /swapfile sudo chmod 600 /swapfile sudo swapon /swapfile Puis : echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab Vérifiez toujours le résultat : swapon --show Si vous utilisez des snapshots Btrfs, gardez en tête qu&rsquo;un sous-volume contenant un swapfile actif a des contraintes particulières. Évitez donc de déposer votre swapfile n&rsquo;importe où dans une arborescence que vous snapshottez sans arrêt. 5 &#8211; Quelle taille de swap choisir ? Il n&rsquo;y a pas une taille magique valable pour toutes les machines. Je regarde surtout : la quantité de RAM ; la charge réelle de la machine ; l&rsquo;espace disponible sur le SSD ; la possibilité d&rsquo;avoir de gros pics de mémoire ; l&rsquo;utilisation éventuelle de l&rsquo;hibernation. Sur une machine de bureau avec suffisamment de stockage, je préfère avoir quelques gigaoctets de réserve plutôt que chercher à économiser 4 ou 8 Gio sur un SSD de plusieurs centaines de gigaoctets. Sur une petite machine ou un VPS disposant de très peu de RAM, une swap confortable peut faire une énorme différence lors d&rsquo;une pointe de consommation. Si votre machine passe en permanence plusieurs gigaoctets dans la swap, le problème devient cependant la quantité de RAM disponible ou la consommation des applications. Augmenter encore la swap évitera peut-être le crash, mais ne rendra pas le disque aussi rapide que la mémoire vive 😉 6 &#8211; zram : compresser de la mémoire plutôt que taper tout de suite dans le disque zram crée un périphérique compressé en RAM utilisé comme swap. Les pages compressibles prennent moins de place et restent accessibles beaucoup plus rapidement que si elles avaient été écrites sur un SSD ou un disque dur. La taille affichée par zramctl représente la capacité logique du périphérique zram. Cela ne signifie pas qu&rsquo;autant de RAM physique est immédiatement réservée. Vérifiez d&rsquo;abord si zram existe déjà : zramctl swapon --show Si une zram est déjà active, inutile d&rsquo;installer un second gestionnaire par-dessus. Debian On peut utiliser : sudo apt install zram-tools Pour une zram pouvant représenter jusqu&rsquo;à 50 % de la RAM et utilisée avant la swap disque, éditez : sudoedit /etc/default/zramswap et utilisez : PERCENT=50 PRIORITY=100 Je laisse généralement l&rsquo;algorithme de compression choisi par le système sauf raison précise de le modifier. Puis : sudo systemctl enable --now zramswap.service Si vous venez de modifier la configuration : sudo systemctl restart zramswap.service Contrôlez : zramctl swapon --show EndeavourOS, CachyOS, Manjaro et autres Arch Installez : sudo pacman -S zram-generator Puis créez : sudoedit /etc/systemd/zram-generator.conf avec : [zram0] zram-size = ram / 2 swap-priority = 100 Rechargez systemd et lancez la zram : sudo systemctl daemon-reload sudo systemctl start systemd-zram-setup@zram0.service Vérifiez : zramctl swapon --show La priorité est importante : plus elle est élevée, plus cet espace de swap sera choisi en premier. Avec une zram à priorité 100 et une swap disque à priorité inférieure, Linux utilisera donc d&rsquo;abord la zram. 7 &#8211; Et zswap ? zswap travaille différemment. Il sert de cache compressé en RAM devant une vraie swap persistante. Quand une page doit être swappée, zswap essaie de la conserver compressée en mémoire. Si son cache ne peut plus la garder, elle peut ensuite être écrite dans la swap sur disque. Pour voir son état : cat /sys/module/zswap/parameters/enabled Vous obtiendrez généralement : Y ou : N Sur une machine où zram assure déjà la swap compressée principale, je n&#8217;empile pas zswap par-dessus sans raison précise. zswap m&rsquo;intéresse surtout lorsqu&rsquo;on conserve une swap sur SSD ou disque et qu&rsquo;on veut limiter une partie des entrées/sorties vers ce support. Son activation permanente passe par les paramètres du noyau et dépend aussi du chargeur de démarrage utilisé. Vérifiez donc d&rsquo;abord s&rsquo;il est déjà actif avant de modifier GRUB ou systemd-boot. 8 &#8211; Régler la swappiness La swappiness indique au noyau le coût relatif qu&rsquo;il doit attribuer au swap par rapport à la récupération de pages du cache fichier. Pour connaître sa valeur : cat /proc/sys/vm/swappiness La plage va de 0 à 200. La valeur par défaut du noyau est : 60 Ce n&rsquo;est pas un « réglage serveur ». C&rsquo;est simplement la valeur générique du noyau. Avec une swap lente sur disque, une valeur plus basse peut parfois convenir. Avec une swap très rapide en mémoire comme zram, une valeur de 100 ou davantage peut parfaitement avoir du sens. Je vous déconseille donc de recopier une valeur trouvée dans un tuto sans regarder votre configuration. Pour essayer temporairement une valeur, par exemple 100 : sudo sysctl vm.swappiness=100 Vérifiez : cat /proc/sys/vm/swappiness Le changement disparaîtra au redémarrage. C&rsquo;est pratique pour tester avant de graver quoi que ce soit dans la configuration. Si le comportement vous convient et que vous voulez conserver cette valeur : echo 'vm.swappiness=100' | sudo tee /etc/sysctl.d/99-swappiness.conf sudo sysctl --system Avec uniquement une swap SSD classique, je commencerais simplement avec la valeur par défaut. Avec zram, on peut tester plus haut et observer le résultat sous sa vraie charge de travail. 9 &#8211; vfs_cache_pressure Pour voir sa valeur : cat /proc/sys/vm/vfs_cache_pressure Ce réglage agit sur la tendance du noyau à récupérer les caches contenant notamment les dentries et les inodes utilisés pour accéder aux fichiers. Je laisse normalement : 100 Une valeur plus basse conserve davantage ces structures en mémoire. Cela peut aider certaines charges très particulières, mais ce n&rsquo;est pas une optimisation automatique du poste de travail. Sans mesure montrant un problème précis, laissez ce réglage tranquille. 10 &#8211; Swap et SSD Un SSD peut parfaitement héberger une swap. Les accès disque restent nettement plus lents que la RAM, mais désactiver ou réduire brutalement la swap simplement parce qu&rsquo;on possède un SSD n&rsquo;apporte rien de magique. zram ou zswap permettent en plus d&rsquo;éviter une partie des écritures lorsque les pages peuvent rester compressées en mémoire. Le vrai indicateur reste l&rsquo;usage : swapon --show Si votre swap SSD contient quelques pages froides pendant que la machine reste fluide, il n&rsquo;y a pas de catastrophe à réparer. 11 &#8211; Hibernation : attention à la différence avec zram Lors d&rsquo;une hibernation, le contenu nécessaire à la reprise doit survivre à l&rsquo;extinction de la machine. zram vit en mémoire vive et disparaît donc lorsque l&rsquo;alimentation est coupée. Si vous utilisez l&rsquo;hibernation, gardez une swap persistante sur partition ou fichier, suffisamment grande pour accueillir l&rsquo;image d&rsquo;hibernation, et configurez correctement le mécanisme resume de votre distribution. Vous pouvez conserver zram en priorité pour le fonctionnement normal et une swap disque derrière pour les gros dépassements de mémoire et l&rsquo;hibernation. Avoir une swapfile ne suffit cependant pas à rendre automatiquement l&rsquo;hibernation fonctionnelle. Le système doit savoir sur quel espace reprendre l&rsquo;image et, avec certains systèmes de fichiers comme Btrfs, la configuration demande des précautions supplémentaires. 12 &#8211; Observer la machine en situation réelle Une optimisation mémoire se juge pendant que l&rsquo;ordinateur fait réellement ce qu&rsquo;on lui demande. Pour regarder RAM et swap évoluer : watch -n 2 'free -h; echo; swapon --show' Si vous utilisez zram : watch -n 2 zramctl Pour voir l&rsquo;activité mémoire et les entrées/sorties seconde par seconde : vmstat 1 Dans vmstat, les colonnes : si so montrent les entrées et sorties de swap. Un peu de swap utilisée n&rsquo;indique pas à elle seule un problème. Des échanges massifs et continus accompagnés de gros ralentissements indiquent en revanche que la pression mémoire est réelle. 13 &#8211; Si une application disparaît faute de mémoire Pour chercher un passage de l&rsquo;OOM killer dans les messages du noyau : journalctl -k -b | grep -Ei 'out of memory|oom|killed process' Si vous trouvez ce genre d&rsquo;événement, regardez ensuite la RAM disponible, la quantité de swap et surtout quel programme consommait la mémoire. Une swap plus grande peut éviter la mort brutale d&rsquo;un processus et laisser le temps de finir un gros travail. Si la charge normale dépasse continuellement la RAM disponible, il faudra aussi agir sur les applications ou ajouter de la mémoire. 14 &#8211; Ma configuration pratique Pour un poste Linux moderne, j&rsquo;aime bien cette organisation : une swap persistante sur SSD ou une partition swap ; zram avec une priorité supérieure ; une swappiness choisie après avoir observé le comportement réel ; aucun réglage exotique ajouté simplement parce qu&rsquo;il existe. Sur une machine avec beaucoup de RAM, la swap disque restera souvent presque vide. Elle est là pour le jour où elle devient utile. Sur une petite machine, zram peut repousser assez loin le moment où le système doit écrire sur le disque. Et sur un tout petit serveur, une grosse swap peut faire la différence entre un service qui ralentit pendant un pic et un service qui se fait tuer. Je préfère prévoir le parachute avant de sauter 😉 15 &#8211; Les commandes à garder sous la main free -h swapon --show zramctl cat /proc/sys/vm/swappiness cat /proc/sys/vm/vfs_cache_pressure vmstat 1 Avec ça, vous savez déjà beaucoup mieux ce que fait votre mémoire que quelqu&rsquo;un qui colle au hasard une valeur de swappiness trouvée sur Internet 😉
