vendredi 17 avril 2015

Memory leak stress

Ca fait hyper longtemps que je n'ai rien posté, c'est pas grave vu que ça fait hyper longtemps que personne n'est venu sur ce blog. Ouf.

Aujourd'hui j'avais envie de parler d'un sujet récurrent, qui semble me coller à la peau comme une sangsue. J'ai nommé les memory leaks. Ou fuite de mémoire en bon français. Pour rappel, il s'agit du fait qu'un programme, une fois arrêté, ne libère pas la mémoire qu'il a utilisé. A chaque fois que ce programme sera lancé, il occupera donc une nouvelle partie de la mémoire de l'appareil, jusqu'à ce qu'ultimement le système se trouve à court de mémoire, et adopte un comportement étrange: le plus souvent, plus aucun programme ne pourra être lancé. Le système peut aussi décider tout seul d'arrêter d'autres programmes de manière sauvage, dans une tentative désespérée de retrouver un peu d'oxygène. Dans les cas les plus sévères, vous vous ferez insulter par un joli message d'erreur, et la machine peut même aller jusqu'à planter complètement. Tout ça parce qu'un abruti de programmeur a oublié l'instruction qui libère la mémoire.

Il n'y a qu'un seul remède malheureusement: redémarrer l'appareil. Alors oui il y a des problèmes plus grave que ça sur Terre, en effet, puisqu'il suffit de redémarrer son appareil. Ce qui est énervant dans les memory leaks c'est qu'elles frappent souvent sans prévenir, qu'on ne peut rien faire pour corriger le problème, et parfois ça peut rendre totalement inutilisable un téléphone ou une tablette qu'on a pourtant bien payé avec de l'argent difficilement gagné, sans que l'emballage de l'appareil ne comporte pour autant de mention "Attention, le système installé sur votre téléphone est tout pourri de l'intérieur, il y a plein de memory leaks qui vous forceront à redémarrer votre appareil trois fois par jour, et au bout de deux mois votre téléphone refusera tout bonnement de démarrer. Looser !"

Maintenant, un petit florilège des memory leaks les plus mémorables qui ont émaillé mon existence:

- 1993: terminale C (je sais, ça n'existe plus). Jusque là abonné aux calculatrices graphiques casio, je décide d'investir 2000 francs (oui 2000 francs, ça fait 300 euros, une somme totalement hallucinante pour le lycéen que j'étais alors) de façon à acquérir une calculatrice graphique HP48GX, le top du top à l'époque. Je la reçois un samedi matin, le lundi matin suivant je m'aperçois avec horreur que la quantité de mémoire disponible sur la machine (bien que conséquente pour l'époque) ne fait que décroître avec le temps. Même pour faire 1+2, la machine bouffe un peu de mémoire qui ne réapparaît jamais. C'est l'angoisse ! Je m'aperçois alors que je viens de dépenser l'équivalent de 10 ans d'économies d'argent de poche et de boulots d'été pour un truc merdique qui ne fonctionne manifestement pas du tout. Je me rends bien compte qu'en redémarrant l'engin, la mémoire est de nouveau entièrement disponible, mais je ne supporte pas l'idée d'utiliser un système si mal conçu. Venant du monde casio, il faut dire que ce genre de problème m'était totalement inconnu. On dira ce qu'on veut des machines casio, au moins quand on sort d'un programme la quantité de mémoire disponible est strictement identique à la quantité initialement disponible. Au byte près. Ma première grosse désillusion donc.

- 2000: un GPS Garmin de randonnée, là encore payé au prix de l'or. La première semaine, pas de soucis. Et puis je me rends compte que le bousin redémarre de façon aléatoire, y compris en pleine utilisation. Sans parler de l'écran qui a vite de très gros problèmes (lignes et colonnes qui s'affichent de manière aléatoire, puis plus du tout). L'engin atterrit très vite au fond d'une poubelle. Je n'ai jamais racheté de produit Garmin.

- 200… 5 ? Ou 6 ? Sais plus. Un magnifique Ipaq 4700. Personne ne se souviendra des pocket PC ! Pourtant à l'époque, c'était une mini révolution. Ensuite Apple est arrivé avec son iPhone, envoyant directement au musée nos chers pocket PC à écran tactile résistif (stylet / pas de multi-touch) où il fallait écrire soi-même ses applications en c++ ; L'Ipaq 4700 de HP- Compaq était le top du nec plus ultra, avec un écran de 4 pouces et ses 64 Mo de RAM, un gros processeur -- encore une fois tout est relatif -- etc. Je ne me souviens plus de la résolution, mais il permettait de stocker des vidéos sur la carte mémoire CF externe, et de les visionner sur un (grand pour l'époque) écran couleur, de bonne qualité, avec un bon temps de réponse et pas de rétention d'image. Je me souviens très bien être passé pour un extra-terrestre en demandant au vendeur de me confirmer que l'appareil ne souffrait d'aucune memory leak. Il n'avait manifestement aucune idée de ce dont je lui parlais, il a fait semblant d'aller se renseigner et au bout de dix minutes, m'a assuré avec son air le plus hypocrite que non, il n'y avait aucun souci avec ce pocket PC. Je décide donc de le prendre, je le déballe et là PAF ! Evidemment la première chose que je fais c'est de lancer les différents programmes les uns après les autres, en vérifiant la quantité de mémoire disponible à chaque étape. Le verdict ne se fait pas attendre. Guess what ? Grosse memory leak. Du genre grave, très grave. Il s'avère que le coupable qui dévore la mémoire telle une étoile qui se serait un peu trop approchée d'un trou noir, n'est autre que le driver du chipset graphique. Oui, le fucking driver du chipset graphique ! C'est pas le genre de programme dont on peut se passer. A chaque seconde d'utilisation du bignoux, la RAM disponible diminue un peu plus. L'engin demande deux ou trois reboots par jour pour fonctionner normalement. Parfois, il est nécessaire de redémarrer en plein milieu d'une vidéo. Sur les derniers temps, la brique ne pouvait même plus lancer le moindre programme. Un verre d'eau renversé par mégarde met fin aux souffrances du pathétique bidule, dans un soulagement général. Je me souviens de ma calculatrice HP48GX, et je décide de ne plus jamais acheter de produit HP (Compaq ayant tout bonnement disparu).

- 2006-2013: divers téléphones souffrant tous de memory leaks à des degrés divers. Je me souviens particulièrement d'un Sony-Ericsson P900, hybride entre un téléphone et un organiser, un peu avant le lancement du premier iPhone. Le machin était plutôt joli, l'écran de bonne qualité et avec une bonne définition une fois encore. Quelques applications sympa. Mais malheureusement un gros problème de memory leak, assez curieux celui-ci: un "soft reboot" ne suffisait pas à restaurer la mémoire. Non non, sur ce modèle, pour retrouver toute sa mémoire, il fallait passer par des bidouilles terribles au niveau du système de fichiers, puis restaurer le bidule dans son état d'usine. Et donc perdre toutes ses données. A l'époque, il n'y avait pas de synchronisation sur le cloud ! Je l'ai donné celui-là, et j'ai décidé de ne plus jamais acheter de produit Sony.

- 2013: un nexus 4 équipé d'Android 4 (je ne sais plus exactement quelle sous-version). C'est une grande surprise: je n'ai pas besoin de redémarrer le truc plus d'une fois par jour, ça me change. Et à chaque redémarrage, la mémoire est bien restaurée. Si je me souviens bien, je change de téléphone alors que celui-ci passe sous Android 4.2, et j'en suis globalement à un reboot tous les mois. Là je me dis c'est gagné, le monde de l'informatique a enfin vaincu les memory leaks, c'est un problème du passé, les systèmes modernes sont assez bien fichus pour que les problèmes soient à peine perceptibles. Je décide donc de racheter un téléphone nexus.

- 2014: le nexus 5, avec successivement les version 4.2, 4.3 puis 4.4 d'Android. Je termine sur un Android 4.4.4 où je ne vois carrément plus aucune memory leak, je ne reboote jamais ce téléphone. Le système est en béton armé question stabilité, je suis tellement confiant que je ne vérifie plus jamais la consommation de mémoire. Ce qui me conforte dans mon opinion que Google nous veut du bien, et qu'il faut rester chez eux. En octobre 2014 sort le Nexus 6, avec Android 5.0. Ayant appris de mes erreurs, je ne fais pas la mise à jour de mon nexus 5 lorsqu'il m'indique que je peux installer la nouvelle version du système. J'attends, je me documente, j'attends encore… que d'éventuels problèmes surgissent. Comme rien ne semble venir, je décide au bout de deux mois de faire la MAJ. Et là patatras ! Je retombe dans le problème des memory leaks. Ce nouvel android n'est pas du tout stable, la mémoire se fait littéralement dévorer vivante, les applications plantent, le système peine à se maintenir en état de marche et finit par rendre l'âme avec un lamentable message indiquant qu'il est à bout de souffle. Seule solution: éteindre le téléphone tous les soirs, le remettre en marche tous les matins. Ce qui est acceptable, donc je finis par oublier cette histoire de memory leak, au risque de devenir fou tout simplement.

- 2015: le Nexus 6 ! Malgré son prix élevé, c'est du très beau matériel, avec un bel écran Oled 2K, un bon appareil photo, un processeur quadri-coeur 2.7 GHz, etc. Et avant de l'acheter, j'ai attendu 7 mois après sa sortie, écumant le Net à la recherche d'infos sur les problèmes matériels et logiciels dont souffre ce téléphone. Certains se plaignent de problèmes de burn-in sur l'écran (usure très prématurée du matériel organique émettant la lumière), d'autres voient leur batterie dégazer et enfler jusqu'à faire éclater la plaque arrière. Et bien sûr, la monstrueuse, prodigieuse memory leak d'Android 5.0 qui oblige à un cycle d'extinction/redémarrage quotidien. Au prix d'un iPhone qui ne souffre absolument pas des mêmes problèmes, c'est vraiment exagéré, et je décide sagement d'attendre la version 5.1 d'Android avant d'acheter le téléphone. Google promet que les memory leaks seront réparées dans la prochaine MAJ. Juré craché. Lorsqu'enfin Google décide de lâcher la version 5.1 dans la nature, je me rue sur ma carte de crédit et je commande l'engin, qui arrive en moins de 3 jours à la maison (autant pour les rumeurs de rupture de stock). Ca fait quelques semaines que j'utilise la bête, et je n'ai rencontré ni de problème de burn-in, ni aucun souci avec la batterie. Bien entendu je surveille constamment la quantité de mémoire disponible. Elle ne cesse de fluctuer, mais grosso-modo, la mémoire a une sale tendance à se remplir et à ne pas être totalement relâchée lors de l'arrêt des applications. Et ce, même avec android 5.1… mais depuis, la présence de memory leaks tenaces a bien été mis en évidence dans 5.1, malgré les promesses de Google. Je n'ai redémarré l'engin qu'une fois jusque là, plus par prévention qu'autre chose, puisque je n'ai rencontré aucun problème lié aux memory leaks. Il faut dire qu'avec les 3Go de RAM dont le bestiau est équipé, il faudrait vraiment beaucoup de patience pour que les memory leaks résiduelles entraînent de sérieux problèmes. Je me retrouve donc de nouveau dans une situation où je ne me préoccupe pas de redémarrer l'appareil, mais où il faut malgré tout effectuer un reboot de maintenance de temps en temps. Avec cet arrière-goût tenace qu'on se fiche de moi et que j'aurai mieux fait d'acheter un iPhone. Attention Google, je ne suis pas très loin de prendre la décision de ne plus jamais acheter de produit Google ! Et quand je prends ce genre de décision, c'est irrévocable, je ne reviens jamais en arrière. La seule chose qui m'empêche de basculer du côté obscur de la pomme pour mon téléphone, c'est que tout le monde a le même. Cette uniformité écrasante est à mon sens encore plus déprimante qu'une memory leak.

Now what ? J'attends la version 5.1.1 d'Android, pour laquelle Google devrait améliorer la stabilité. Ouais on me l'a déjà faite, celle là ! Je doute vraiment que tous les problèmes soient résolus. Je me résigne en me disant que les Nexus, c'est pour les geeks qui veulent du Android pur et dur, pour les gens qui ne veulent pas attendre les mises à jour, quitte à essuyer les plâtres. Et il y a un prix à payer. En même temps je me dis que chez Apple, les mises à jour ne sont jamais lâchées sans un minimum de vérifications. Et la stabilité du système IOS n'est plus à démontrer, c'est une référence en la matière. Donc si Google corrige le tir dans l'année à venir ça ira, je ferai en sorte de pardonner. Sinon mon prochain téléphone aura une pomme au cul (sans vouloir être grossier), un point c'est tout.