Wie könnte Running Strace mein OpenGL-Problem beheben?

8

Seit einem größeren Upgrade meiner Distribution (PLD Linux) habe ich Probleme mit einer ganzen Reihe von Programmen. Soweit ich das beurteilen kann, ist alles, was OpenGL oder PulseAudio berührt, fehlerhaft. Ich verwende die proprietären NVIDIA-Treiber und einen 3.2.x-Kernel. Xorg selbst läuft gut und ich kann die meisten Programme ausführen, jedoch werden Dinge wie mplayer segfault und kein Ton von irgendeinem Programm erzeugt.

Nachdem ich herausgefunden hatte, dass es mit OpenGL zu tun haben könnte, begann ich glxgearsals Test damit zu spielen. Wenn Sie es selbst ausführen, werden die Fehler sofort behoben. Dann entdeckte ich, dass es gut straceläuft , wenn man es unter läuft. Das gleiche gilt für mplayer. Das Ausführen auf einer Test-MP3-Datei ist sofort fehlerfrei. Die Wiedergabe läuft einwandfrei strace mplayer(obwohl das Puls-Audio immer noch ausfällt und zu einem Dummy-Ausgabegerät zurückkehrt).

Wie könnte es verhindern, dass etwas unter straceSegfaulting läuft, und wie würde ich die Situation weiterhin debuggen?

Caleb
quelle
1
Hat Ihre straceBinärdatei ein Sticky-Bit gesetzt?
Mat
6
Vermutung: Es ist ein Timing-Fehler, und Strace verlangsamt den Prozess so weit, dass der Fehler nicht ausgelöst wird.
Gilles 'SO - hör auf böse zu sein'
1
@ Mat: Kein klebriges bisschen.
Caleb
1
@FrederikDeweerdt: Aaa, ja eigentlich schon. Nicht viel, aber es identifiziert positiv, was ich bereits vermutet habe, die von nvidia bereitgestellte Bibliothek verursacht den Tod : [ 1170.678996] mplayer[3970]: segfault at ffffe0b4 ip b6464216 sp bfd84930 error 4 in libGL.so.290.10[b63e4000+a9000]. Was jetzt?
Caleb
1
gdbGibt es einen Grund, warum Sie es nicht einfach debuggen und eine Rückverfolgung erhalten können, von wo aus der Segfault auftritt?
Hallo71

Antworten:

2

Ich habe beobachtet, dass Nvidia libGL.soversucht, festzustellen, ob der aktuelle Prozess verfolgt wird, indem /proc/self/statussie " TracerPid:" öffnet und sucht . Je nachdem, ob der Wert von TracerPidungleich Null ist (dh ob die aktuelle Verarbeitung verfolgt wird oder nicht), werden unterschiedliche Codepfade verwendet .

Installieren Sie sysdig und erfassen Sie die Spur für den fehlerhaften Vorgang zweimal, einmal beim Straffen, einmal ohne Strace. Zum Beispiel:

$ 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`

Vergleichen Sie die Textausgabe der beiden verschiedenen Traces, um die Änderung des Ausführungsflusses zwischen den gespannten und den nicht gespannten Läufen von zu beobachten glxgears.

strace"behebt" Ihr OpenGL-Problem, da libGLes sich unterschiedlich verhält, je nachdem, ob der Prozess verfolgt / debuggt wird.

Tom O.
quelle
1

Ich würde mir vorstellen, dass ein anderes Paket libGL.so durch eine eigene Version ersetzt und die nVidia-Version ersetzt - höchstwahrscheinlich ein Mesa-Paket. Um das Problem zu beheben, installieren Sie den proprietären nVidia-Treiber neu. Dadurch wird die von nVidia bereitgestellte libGL.so wiederhergestellt.

Ciotog
quelle
1
Dann würde es nicht funktionieren, selbst wenn es unter Zwang läuft.
Renan
0

Du hast gesagt, du hast es mit nv, nouveau und vesa versucht. Was ist in jedem Fall passiert?

Versuchen Sie außerdem, Ihren Computer von einem USB-Stick mit einer anderen Distribution zu starten, und prüfen Sie, ob das Problem weiterhin besteht. Wenn dies nicht der Fall ist, können möglicherweise die Treiberversionen der anderen Distributionen auf Ihrem Computer verwendet werden. Es könnte auch etwas Licht auf die Besonderheiten des Problems werfen, das Sie haben (es scheint ein Timing-Fehler zu sein).

Können moderne Maschinen den PCI-Bus noch verlangsamen? Ist es ein Desktop-PC oder ein Notebook?

Nur als Randnotiz, Sie können sich viel zukünftigen Schmerz ersparen, indem Sie ATI und NVidia, wenn möglich, in Bezug auf die Leistung ganz vermeiden. Ihre Margen sind so niedrig, dass selbst ein Rückgang der Benutzerbasis um 1% dazu führen kann, dass sie ihre Handlung bereinigen.

rbanffy
quelle
-1

Befreien Sie sich von den proprietären NVIDIA-Treibern und verwenden Sie die Open Source-Treiber. Sie haben festgestellt, dass die proprietären NVIDIA-Treiber schuld sind.

aseq
quelle
Tolles Konzept, aber Sie wissen, dass das leichter zu sagen ist als zu tun. Ich habe die Neavou-Treiber ausgeführt, aber sie haben Probleme mit zwei Monitoren und der Energieverwaltung.
Caleb
Neben neavou gibt es noch andere Fahrer. Ich würde sagen, es ist eine einfache Wahl, da Sie derzeit kein ordnungsgemäß funktionierendes System haben.
Aseq
Ernsthaft? Wenn Sie eine Antwort für mich haben, bearbeiten Sie bitte Ihren Beitrag, um meine Frage tatsächlich zu beantworten oder eine bestimmte alternative Lösung bereitzustellen. Wenn Sie etwas Magie kennen, das ich nicht kenne, müssen Sie detaillierter sein, um nützlich zu sein. Mir ist klar, dass es andere Treiber gibt, aber Sie wissen wahrscheinlich, dass sie nicht alles tun, was die proprietären tun. Ich habe es benutzt nvund sogar das vesaZeug treibt es an, aber es nouveauist bei weitem das am besten ausgestattete und leistungsstärkste. Ironischer dieses System ist für alles arbeitet , ist es sehr wichtig , dass sie tun, was nicht der Fall mit anderen Fahrern ist.
Caleb
Das Vorschlagen einer Problemumgehung ist ebenfalls eine Antwort, und ich würde sagen, dass dies eine alternative Lösung ist. Nur weil Ihnen diese Lösung nicht gefällt, ist sie nicht so relevant.
Aseq