Les correctifs du bogue « Memory Leak » sur GNOME Shell sont disponibles

Et seront embarqués dans la version 3.28, de l’environnement de bureau

Les correctifs du bogue « Memory Leak » détecté sur GNOME Shell et qui se manifeste par l’augmentation de l’espace RAM occupé toutes les minutes seront disponibles dans la prochaine version de GNOME. En effet, depuis le jeudi dernier, les deux Merge Request (MR) de Gitlab qui le résolvent ont été fusionnés. Ces changements après des tests concluants ont été reportés sur la version 3.28 de GNOME. Lorsque le bogue a été constaté, plusieurs utilisateurs l’ont signalé via le ticket 1672297 sur launchpad.net. Le souci a été attribué aux animations du GNOME Shell. En effet, des tentatives de reproduction ont montré que GNOME Shell consommait environ 70 MB de mémoire aussitôt après le démarrage. Ce nombre passe à 95 MB après l’ouverture de menu puis à 250 MB après avoir chargé la grille d’icônes.

Le Garbage Collector est à l’origine du problème. Lorsque des objets en mémoire sont liés par des relations parent/fils, quand on supprime un objet parent il est marqué dans le Garbage Collector. Cette suppression doit normalement entrainer la suppression des objets fils qui lui sont attachés. Contrairement à JavaScript qui trace les objets fils, et par conséquent dont le Garbage Collector supprime tous les objets dépendants, le langage C ne les trace pas. Il conserve uniquement le nombre d’objets dépendants. Ce qui ne permet pas de les supprimer. Après la suppression, le Garbage Collector n’a aucun moyen de lier les objets. Seuls les objets directement dépendants sont supprimés. Le prochain passage du ramasse-miette n’est pas strictement connu, sachant qu’il n’est programmé que lorsque le « toggle reference » d’un GObject contenu dans le GJS passe d’une valeur supérieure à 1 à la valeur 1. Par conséquent, il ne survient que lorsque plusieurs GObject sont empilés. La fuite de mémoire survient à la suite de cet empilement. Formellement, il ne s’agit pas d’une fuite de mémoire, mais plutôt d’un comportement irrégulier de la mémoire.

La solution consiste à programmer le Garbage Collector chaque fois qu’un objet est marqué pour suppression. Cette solution bien qu’ayant un léger impact sur la performance reste efficace. En exécutant fréquemment le Garbage Collector, le nombre d’objets à supprimer est réduit. Autrement dit, le léger impact sur la performance est compensé par le gain en mémoire. Au-delà de cette solution préconisée entre autres par l’expert Georges Stavracas, d’autres améliorations ont été apportées. La première modifie la structure de données sous-jacente des objets JS, ce qui permet de passer d’un algorithme dont la complexité est O(n) à un algorithme dont la complexité est réduite à O(1). La seconde amélioration apportée réduit considérablement le nombre d’allocations de mémoire temporaires. Au-delà de ce bogue sur GNOME, un souci de communication au sein de la communauté a été soulevé. Ainsi, Garnacho déplore que certains utilisateurs considèrent GNOME comme le produit de ses développeurs, créant ainsi une barrière entre eux et les nouveaux contributeurs.

Dans la même rubrique

| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | ... | 23 |

Actu en image