Comment l'exécution de strace pourrait-elle résoudre mon problème OpenGL?


8

Depuis une récente mise à niveau majeure de ma distribution (PLD Linux), j'ai eu des problèmes avec toute une série de programmes. Autant que je sache, tout ce qui touche les défauts de segmentation OpenGL ou PulseAudio. J'utilise les pilotes nvidia propriétaires et un noyau 3.2.x. Xorg lui-même fonctionne bien et je suis capable d'exécuter la plupart des programmes, cependant des choses comme mplayer segfault et aucun son n'est produit par aucun programme.

Une fois que j'ai compris qu'il pourrait être lié à OpenGL, j'ai commencé à jouer avec glxgearscomme test. L'exécuter par lui-même segfaults instantanément. Ensuite, j'ai découvert que le faire fonctionner sous stracefonctionnait bien. La même chose est vraie pour mplayer. Le lancer sur un fichier mp3 de test se sépare instantanément, le fonctionnement fonctionne strace mplayertrès bien (bien que le son à impulsions meurt toujours et qu'il redevienne un périphérique de sortie factice).

Comment le fait d'exécuter quelque chose sous l' straceempêcherait-il de se briser et comment pourrais-je continuer à déboguer la situation?


1
Votre stracebinaire a-t-il un ensemble de bits collants?
Mat

6
Devinez: c'est un bug de synchronisation, et strace ralentit suffisamment le processus pour ne pas déclencher le bug.
Gilles 'SO- arrête d'être méchant'

1
@Mat: Pas de bit collant.
Caleb

1
@FrederikDeweerdt: Aaa, oui en fait. Pas grand - chose, mais il positivly identifie ce que je soupçonnais déjà, la bibliothèque fournie nvidia est à l' origine du deadness: [ 1170.678996] mplayer[3970]: segfault at ffffe0b4 ip b6464216 sp bfd84930 error 4 in libGL.so.290.10[b63e4000+a9000]. Maintenant quoi?
Caleb

1
Une raison pour laquelle vous ne pouvez pas simplement le déboguer gdbet obtenir une trace de l'origine du défaut de segmentation?
Hello71

Réponses:


2

J'ai observé que Nvidia libGL.sotente de détecter si le processus en cours est tracé, en ouvrant /proc/self/statuset en recherchant " TracerPid:". Différents chemins de code sont choisis selon que la valeur de TracerPidest non nulle (c'est-à-dire si le traitement en cours est tracé ou non).

Installez sysdig et capturez deux fois la trace du processus incriminé, une fois pendant le stracing, une fois sans strace. Par exemple:

$ sysdig -w glxgears.scap proc.name=glxgears &
$ glxgears &
$ kill -TERM `pidof glxgears`
$ kill -TERM `pidof sysdig`
$ sysdig -w glxgears-strace.scap proc.name=glxgears &
$ strace glxgears &
$ kill -TERM `pidof glxgears`
$ kill -TERM `pidof sysdig`

Comparez la sortie textuelle des deux traces différentes pour observer le changement dans le flux d'exécution entre les séquences étirées et non étirées de glxgears.

strace"corrige" votre problème OpenGL, car il libGLse comporte différemment selon que le processus est tracé / débogué.


1

J'imagine qu'un autre paquet a remplacé libGL.so par sa propre version, remplaçant la version nVidia - très probablement un paquet Mesa. Pour résoudre le problème, réinstallez le pilote nVidia propriétaire, cela restaurera le libGL.so fourni par nVidia.


1
Ensuite, cela ne fonctionnerait pas, même s'il fonctionnait sous strace.
Renan

0

Vous avez dit avoir essayé nv, nouveau et vesa. Que s'est-il passé dans chaque cas?

Essayez également de démarrer votre ordinateur à partir d'une clé USB avec une autre distribution et voyez si le problème persiste. Si ce n'est pas le cas, alors, peut-être, les versions de pilote des autres distributions peuvent être utilisées sur votre machine. Cela pourrait également éclairer les spécificités du problème que vous rencontrez (il semble que ce soit un bug de synchronisation).

Les machines modernes sont-elles toujours capables de ralentir le bus PCI? Est-ce un ordinateur de bureau ou un ordinateur portable?

Juste comme une note latérale, vous pouvez vous épargner beaucoup de douleur future en évitant complètement ATI et NVidia, si possible en termes de performances. Leurs marges sont si faibles que même une baisse de 1% de la base d'utilisateurs peut les inciter à nettoyer leur acte.


-1

Débarrassez-vous des pilotes nvidia propriétaires et utilisez ceux open source. Vous vous êtes identifié comme étant les pilotes propriétaires nvidia.


Excellent concept, mais vous savez que c'est plus facile à dire qu'à faire. J'ai exécuté les pilotes neavou, mais ils ont des problèmes avec deux moniteurs et la gestion de l'alimentation.
Caleb

Il existe d'autres pilotes que neavou. Je dirais que c'est un choix facile car pour le moment, vous n'avez pas de système qui fonctionne correctement.
aseq

Sérieusement? Si vous avez une réponse pour moi, veuillez modifier votre message pour répondre à ma question ou fournir une solution alternative spécifique. Si vous connaissez de la magie que je ne connais pas, vous devrez être plus détaillé pour être utile. Je suis bien conscient qu'il existe d'autres pilotes, mais vous savez probablement qu'ils ne font pas tout ce que font les propriétaires. J'ai utilisé nv, et même les vesatrucs qui le motivent, mais nouveauc'est de loin le plus présenté et le plus performant. Ironie du sort ce système est fonctionne pour tout ce qu'il est plus important que faire, ce qui est le cas avec d' autres pilotes.
Caleb

Suggérer une solution de contournement est aussi une réponse et je dirais que c'est une solution alternative. Ce n'est pas parce que vous n'aimez pas que cette solution est si pertinente.
aseq
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.