• [^] # Re: Pas de swap ... pas de problème

    Posté par (site web personnel, Mastodon) . En réponse au journal Zswap, ZRam, EarlyOOM... organiser la gestion d'une pénurie de mémoire vive. Évalué à 10.

    J'ai la chance d'avoir une machine avec assez de mémoire pour ne jamais la saturer.

    Je ne serai pas aussi prompt à l’affirmer. Saturer, peut-être pas, mais quelque soit la taille de ta mémoire, tu pourras toujours avoir des trucs qui l’occupent au détriment de ce dont tu as besoin.

    Il semble que certaines applications s’étendent autant qu’elles peuvent, alors chaque application ne va peut-être pas tenter de saturer, mais tu peux te faire surprendre.

    Je m’explique, j’ai plusieurs machines de plusieurs générations et de taille de mémoire différentes : une poignée de Go de ram, 16Go, 32Go, 256Go. La machine qui a 256Go avait 128Go il y a quelque mois et j’ai pu comparer le même usage avec la même installation, et en fait le système a été déplacé depuis la machine qui a 32Go donc j’ai pu aussi comparer.

    Avec les mêmes usages, sur la machine à 32Go la somme de certaines grosses applis comme Firefox atteignait facilement 16Go. Pourtant ces applis n’atteignent pas 16Go de RAM sur mon laptop avec 16Go de ram. Et autour de moi j’en vois bien utiliser Firefox sur des machines à 8Go de RAM avec dix mille onglets. Pourtant si je fais pareil ça explose de mon côté, ça explose d’autant que j’ai de la RAM. Avec 128Go, c’est devenu complètement dingue, avec Firefox bouffant parfois 64 ou 96Go de ram, c’est complètement indécent. Et une fois passé à 256Go de RAM Firefox s’est mis à manger 128Go... quoi???!!!!!

    J’ai aussi essayé une chose mais je ne pourrai que l’évaluer dans la durée. Depuis longtemps j’utilise /tmp en tmpfs (pour la performance), mais je soupçonne des applications d’ouvrir des fichiers temporaires, d’écrire dedans, de les supprimer mais de ne pas les fermer (et donc ils resteraient alloués en RAM). Donc pour le moment je suis revenu à un /tmp sur disque, pour voir. Je peux difficilement mesurer mais il me semble que la RAM occupée monte moins, mais monte toujours.

    Donc ces derniers jours j’ai cherché à voir où partait la mémoire ! Il n’est pas rare que dans le gestionnaire des tâches de GNOME (gnome-system-monitor) je vois des processus Firefox qui mangent 1 Go et plus ! Parfois 6 Go ! Si je tue ce type de processus, un onglet quelque part me dit qu’il a crashé et que je peux le recharger (bonne astuce !). C’est plus efficace que la page about:performance qui ne renvoie pas de valeur fiable et sur laquelle on ne peut pas compter.

    Et puis j’ai découvert la clé Firefox browser.cache.memory.capacity qui détermine le cache en mémoire vive de Firefox. Par défaut elle est mise à -1 ça veut dire, pas de limite haute ! La machine est super stable, la dernière fois que je l’ai rebootée pour installer un nouveau composant elle avait un uptime de deux mois ! Alors je ne sais pas combien prenait Firefox pour son cache mémoire, mais ça devait être dingue !

    J’ai mis la limite browser.cache.memory.capacity à 2000000 pour 2Go de cache en mémoire, ce qui le plafonne (et j’ai mis pareil à browser.cache.disk.capacity, au lieu de 2560Mo, ce qui l’augmente), et franchement, ça va beaucoup mieux ! Je n’ai plus de Firefox qui se met à bouffer 100Go, et c’est toujours plus gourmand que sur une machine à 16 ou 32Go mais ça reste contenu.

    Mais dans l’immédiat j’avais toujours beaucoup de mémoire utilisée. Quand j’ai fait ces tests pour récupérer ma mémoire la machine avait 20 jours d’uptime et une 100aine de Go utilisés. Je n’ai pas redémarré mais j’ai tout tué dans la session utilisateur, y compris la session utilisateur. J’en ai récupéré 20-30Go... quoi ??? ils sont où tout les autres ?

    Parce qu’indépendamment des applications, je voyais ma RAM occupée monter, monter, monter... et en effet même après avoir fermé toutes les applications, je ne récupérais pas tout, même après avoir fermé et ré-ouvert la session utilisateur.

    Alors j’ai essayé plus de trucs.

    Il ne faut pas confondre le cache mémoire et la mémoire, et je ne le confonds pas, et pourtant. J’ai vérifié, que si je faisais ceci :

    echo 3 > /proc/sys/vm/drop_caches

    je pouvais libérer non seulement une centaine de Go en cache (normal ! c’est aussi pour ça que cette machine a autant de mémoire, pour pouvoir traiter des fichiers de 100Go en cache mémoire !) mais surtout j’ai récupéré plusieurs dizaines de Go de mémoire non-cache, 30Go peut-être ?! Quoi ? Comment ?

    Et puis j’ai fait un deuxième chose, après avoir fermé toutes mes applications, après avoir vidé le cache qui semble affecter des trucs en mémoire quand mêmeTM, j’ai fait ceci :

    echo N > /sys/module/zswap/parameters/enabled
    swapoff -a; swapon -a
    echo Y > /sys/module/zswap/parameters/enabled

    Ces commandes désactivent zswap, désactivent le swap et le réactivent, puis réactivent zswap.

    En faisant cela, 5Go a été libéré du swap, et environ 20-30Go on été libérés de la RAM, simplement en désactivant zswap et le swap et en réactivant tout cela après.

    Alors je ne sais pas s’il y a un bug dans zswap où je ne sais pas quoi d’autre, mais wow, clairement cette mémoire était occupée pour rien.

    Avant de fermer mes applications j’avais autour de 100Go d’utilisé, après les avoir fermées j’en avais autour de 60~80Go, après avoir vidé le cache (qui semble vider plus que du cache !), désactivé zswap et désactivé le swap (et réactivé les deux), je suis tombé à ~7Go de mémoire utilisée (toujours 20 jours d’uptime). C’était encore beaucoup trop... j’ai sous la main quelques machines avec 8Go et le système ne prend que quelques centaines de Mo. Mais elle était où cette mémoire ? Car cette mémoire faussement occupée empêchait de conserver en cache de gros fichiers (j’ai vérifié).

    Alors on pourrait se dire qu’avec autant de mémoire on s’en moque un peu si Firefox et ce genre d’appli s’étale. Sauf que non, s’il se met à bouffer 64 ou 128Go sur un système parce qu’il se sent à l’aise, il ne sera pas possible de conserver en cache disque de très gros fichiers ni beaucoup de fichiers, et donc les activités de production qui traitent de gros fichiers vont devoir lire le disque dur au lieu du cache mémoire, tout ça parce que t’as un Firefox en arrière plan avec des onglets sur des sites web 2.360TM de märde avec scrolling infini.

    BREF, j’ai pas encore identifié tout ce qui fait qu’un système s’étale, mais clairement, la consommation de RAM augmente avec la RAM disponible, et pas forcément comme on le voudrait. Et quand les applications s’étalent parce qu’elles se disent « c’est bon ça va je peux », elles peuvent manger la mémoire que l’on destine à d’autres usages... par exemple le cache disque qui se retrouve invalidé par tout et n’importe quoi.

    ce commentaire est sous licence cc by 4 et précédentes