Purge de la mémoire, Nvidia renvoie la faute sur Apple

Florian Innocente |

Nvidia dément toute responsabilité dans le bug décrit par un développeur cette semaine. Un comportement qui peut provoquer l'affichage inopiné à l'écran de contenus consultés précédemment sur l'ordinateur, car ils résidaient toujours dans la mémoire vidéo de la carte graphique au lieu d'être purgés.

Dans le cas de ce témoignage, pendant la phase de lancement de Diablo III, l'utilisateur avait eu pendant quelques secondes sur l'écran de son Mac, l'image d'une page web porno visitée auparavant, et qui plus est avec le mode navigation privée de Chrome (lire Lorsque Chrome et Nvidia omettent de purger la mémoire de contenus gênants). Le pilote de la carte Nvidia était alors pointé du doigt.

Un porte parole de Nvidia en Europe nous a envoyé la réponse suivante : « This issue is related to memory management in the Apple OS, not NVIDIA graphics drivers. The NVIDIA driver adheres to policies set by the operating system and our driver is working as expected. We have not seen this issue on Windows, where all application-specific data is cleared before memory is released to other applications ».

En résumé, l'origine technique de ce comportement réside dans la manière dont OS X gère la mémoire et non dans le pilote graphique fourni par Nvidia, qui suit à la lettre les consignes de fonctionnement édictées par le système d'Apple. Ce problème, ajoute le fondeur, est propre à OS X « Nous ne [l'avons] pas observé sur Window, où toutes les données relatives aux applications sont effacées avant que la mémoire ne soit allouée de nouveau aux autres logiciels. ».

avatar cham | 

J'avais remarqué ça sur iOS.
Qd je rappelle safari en mode horizontal (que je n'utilise pas souvent), il affiche des sites que j'ai consultés il y a des mois dans le "carrousel"

avatar tyga tiger | 

@cham :

Oui j'ai le même problème sur mon iPad Air 2 depuis un moment déjà

avatar joneskind | 

@cham

C'est le fonctionnement d'iOS. C'est une image de la même application qui est chargée, pas celle d'une application différente.

avatar malcolmZ07 | 

@joneskind :
En plus sur iOS lorsque tu es en navigation privée , il n'y a pas de preview de ta page web. C'est la même chose pour les applications de banking

avatar comboss | 

Ça fait un bail que Os X a ce bug, iOs aussi pour le coup. Sur mon iPhone il m'est déjà arriver de voir en preview de l'app Photos, une photo que j'avais supprimé 3 mois auparavant, mais lorsqu'on ouvre l'app, on ne peut bien évidemment pas voir l'image

avatar joneskind | 

@comboss

C'est quand même très différent de ce qui se passe ici. Dans ton exemple, il s'agit d'une capture de la même application qui apparait. Dans le cas présent, c'est une image d'une autre application qui apparait au lancement d'une app différente (une image de Chrome au lancement de Diablo).

Je n'ai jamais vu ça sur iOS.

Je n'ai jamais vu ça non plus sur mon MBP El Capitan et sa carte nVidia ou Intel
Je n'ai jamais vu ça non plus sur mon Hackintosh et sa carte ATI.

C'est juste que nVidia s'est fait jeter du marché des Macs et n'a pas envie de se casser la rondelle à pondre des drivers corrects (si elle a déjà cherché à le faire d'ailleurs)

avatar Ast2001 | 

Parce que tu ne l'a jamais constaté, tu en déduis que le mec de NVidia se trompe et que ses drivers sont mal écrits. Perso, je ne sais pas qui a raison et je ne me permettrais pas de juger sans savoir.

avatar joneskind | 

@Ast2001

C'est vrai que mon seul témoignage n'est pas suffisant pour prouver quoi que ce soit. Mais compte tenu du fait qu'on a jamais entendu parler de ce problème sur d'autres machines, la mauvaise réputation de Nvidia sur ses drivers Mac, et le fait que la boite a perdu le marché du Mac... Je dirais que l'explication la plus simple est souvent la meilleure.

Maintenant, si on arrive à me prouver que les Mac Intel et AMD ont le même problème je mangerai mon chapeau ! (ça ne sera pas la première fois ^-^)

avatar Ast2001 | 

Certes mais si tu regardes bien, le phénomène observé semble hyper rare. Donc 1 à 1, balle au centre :-) Franchement, il me semble difficile de dire qui a raison sur ce sujet.

avatar LimeJuicy | 

Ce n'est pas un bug. L'OS prend des screenshots pour remplir ce genre de fenêtres. Et elles ne sont actualisées qu'après un futur lancement.

avatar jerome74 | 

C'est un bug de l'OS! Prendre des screenshots pour afficher l'application plus rapidement au prochain lancement, pourquoi pas... à condition que les données ne puissent pas être modifiées entre temps, depuis un autre device ou le cloud par exemple! Sinon on affiche un truc obsolète, qui disparait tout de suite, c'est mille fois pire que d'afficher une fenêtre vide ou avec un sablier...

avatar joneskind | 

@jerome74

Non c'est le fonctionnement d'iOS qui sauvegarde sur la mémoire flash le dernier état de l'app avant de quitter. Ça reste dans le bac à sable. Et donc, si tu modifies un fichier dans le cloud depuis un autre périphérique, l'app va afficher une information obsolète le temps de rafraichir les informations.

avatar jerome74 | 

On est bien d'accord que c'est une "feature" d'iOS. Mais une "feature" mal pensée qui donne un moins bon résultat que pas de feature du tout, moi j'appelle ça un bug. C'est stupide de faire un screenshot quand on sait qu'il ne sera peut-être plus valable quand on l'affichera. Et on a ça sur OS X aussi d'ailleurs, quand je redémarre le Mac avec l'option "restaurer les fenêtres", il commence par m'afficher le screenshot du Moniteur d'Activité, ce qui est le comble de l'absurde!

avatar jerome74 | 

Il y a bien un problème de sécurité chez Apple ou Nvidia (je ne peux pas trancher), puisque des données d'une application (Chrome) peuvent passer à une autre (Diablo). Mais il y a aussi un problème chez le développeur du jeux!! Afficher le contenu d'une zone mémoire sans l'avoir initialisée, c'est n'importe quoi.

avatar joneskind | 

@jerome74

Oui, clairement il y a un problème de sécurité parce qu'ici il y a "échange" d'information d'une app à une autre. Je ne sais d'ailleurs pas si on peut parler d'échange d'information à proprement parler, mais il est certain qu'il y a des bouts d'informations qui sont traités en même temps que d'autres et qui n'ont absolument rien à faire là.

avatar byte_order | 

C'est clair que d'afficher un buffer object sans être sûr que son contenu est effectivement prêt, c'est très moyen.

Comme MacOS X compose son affichage avec des buffer object par fenêtre, y'a un risque en effet qu'un buffer object recyclé contienne encore le rendu d'une fenêtre Mac OS X.
Une solution peut être la remise à zéro du buffer lors du recyclage, mais c'est du temps perdu pour rien l'essentiel du temps.

La vrai solution c'est d'afficher un buffer objet qu'une fois que son contenu réel est prêt côté GPU. Ce n'est visiblement pas toujours le cas.
Soit c'est l'application qui n'attend pas, soit y'a une notification fausse côté driver.

avatar joneskind | 

Si le problème venait réellement de la gestion mémoire d'OSX et pas du drivers de Nvidia on constaterait le phénomène sur tous les Macs, qu'ils soient équipés en Intel HD ou en ATI. Or ce n'est pas le cas. Alors Nvidia peut bien prétendre qu'elle respecte les règles imposées par Apple, j'ai quand même bien l'impression qu'elle se fout du monde.

avatar françois bayrou | 

+1 pour l'absence du pb sur Ati ou Intel. Il faudrait tester pour constater que le bug est spécifique à NVidia.

D'un autre côté, l'histoire des screenshots effectués par les applications pour accélérer/enjoliver l'affichage, quitte à montrer un visuel obsolète, montre un mode de fonctionnement chez Apple qui n'est pas bon.
Les conséquences peuvent être assez lourdes.
Il m'est arrivé de voir s'afficher des documents ( devis, propositions,…) devant des personnes qui n'avaient surtout pas à voir ces documents. Je les avaient pourtant fermés. Pas cool…

CF. le commentaire de Oomu à ce sujet sur l'article précédent sur le même sujet.
https://www.macg.co/logiciels/2016/01/lorsque-chrome-et-nvidia-omettent-de-purger-la-memoire-de-contenus-genants-92543

Ces "défauts" ( qui techniquement n'en sont pas, puisque c'est asssumé, à la "it is not a bug it is a feature" ) sont dûs au fait de faire passer les problématiques de beauté de l'interface, réactivité, fluidité,... devant les questions élémentaires comme la confidentialité des données et le respect de leur durée de vie ( si je l'ai supprimée ou fermée, je ne dois pas la voir surgir à l'écran )

D'un côté on crypte les données de l'app Notes, et de l'autre, l'app garde la capture d'un document supprimé il y a 6 mois : ca n'a pas de sens.

avatar joneskind | 

@françois bayrou

C'est ce que j'ai expliqué un peu plus haut.

D'un côté on a une feature qui affiche l'app dans son dernier état (et comme tu l'as montré ça peut être gênant)

Mais de l'autre on a un bug et potentiellement un gros problème de sécurité puisqu'ici il ne s'agit pas d'une app qui affiche une capture d'elle-même, mais d'une app qui affiche une capture d'une autre app. Par exemple, on pourrait imaginer une app malveillante qui capture et récupère cette image en espérant en tirer des données confidentielles.

Donc bien que les phénomènes soient en apparence similaires, en réalité ce n'est pas le cas.

avatar françois bayrou | 

J'avais bien compris.
Les problèmes sont très différents mais les conséquences sont les mêmes.
Qu'une équipe de devs qui s'amuse à screenshoter à tout va, fasse l'impasse sur la purge mémoire vidéo, ne serait pas très surprenant, si ?
A ceux qui disent que bizarrement, ca n'arrive pas avec les cartes ATI, NVidia réponds que bizarrement, ca n'arrive que sur Mac : bref, attendons la suite :)

NB technique ...

quand on dev en C, il est souvent recommandé de remplir la RAM avec des zéros, pour s'assurer que l'espace est vide, avant de le remplir, même si l'OS est censé le faire.

http://stackoverflow.com/questions/1622196/malloc-zeroing-out-memory

Qu'en est il de la mémoire vidéo ? Est ce à l'OS de le faire ? Au driver ?
Si c'est au driver, comment peut-il savoir que cet appel vient d'une autre application et qu'il faut donc tout dégager "attention un intrus arrive, faisons table rase du passé" ?
N'est ce pas à l'OS de s'en occuper ?

avatar byte_order | 

Aucun OS n'est tenu de mettre à zéro un bloc mémoire fraichement alloué.
Non seulement cela impacterait dûrement les performances, mais rien ne dit que la présence de zero soit moins préjudiciable que toute autre valeur.

Seule l'application sait comment initialiser un nouveau bloc de mémoire, et cette opération n'étant pas neutre, il lui appartient de le faire explicitement.
A minima, en appelant calloc() plutot que malloc()

avatar marc_os | 

@françois bayrou :
Je n'ai constaté ce comportement que dans dans Safari par exemple. Pas Firefox ni Numbers, ni Word.
Quelle est donc cette App qui a affiché ton doc confidentiel au démarrage ?

avatar DrHouse64 | 

Wow mais il date ce bug. Mon MacBook de 2008 fait ça depuis le début. Ça ne m'a jamais dérangé, personne n'en parlait, donc j'ai cru que c'était plus ou moins normal.

avatar crispr | 

Même problème sur iPad Air 2, des photos venant d'être supprimés du dossier photo par une application tierce s'affichent 1 ou 2 s quand on ouvre le dossier photo....

avatar marc_os | 

@crispr :
C'est peut-être un problème pour toi, mais ce n'est pas le problème décrit par la brève !!
C'est bien expliqué dans plusieurs commentaires qui précèdent.

avatar crispr | 

@marc_os :
OK, j'aurais dû parler de mauvaise purge du cache...il n'en reste pas moins que ces problèmes de mémoire persistant dans le cache peuvent agacer. Je ne vais pas rebooter l'iPad à tout bout de champs...

avatar fte | 

L'allocation de mémoire est complexe. Tous les OS implémentent les fonctions de base, et mettre à la mémoire à 0x00 ou 0xFF ou 0xDEADBEEF n'est pas une nécessité. Par dessus ces fonctions de base, les diverses librairies des divers langages de développement peuvent ou non initialiser la mémoire. C ne l'impose pas, Obj-C et Swift si.

Côté Windows, la CLR initialise tout quelque soit le langage, je ne suis pas sûr que ce soit le cas en dehors de la CLR pour tous les langages. Peut-être.

Dans tous les cas, c'est une opération qui n'est pas anodine et qui prend beaucoup de temps, donc elle n'est pas systématique.

CONNEXION UTILISATEUR