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 glxgears
als Test damit zu spielen. Wenn Sie es selbst ausführen, werden die Fehler sofort behoben. Dann entdeckte ich, dass es gut strace
lä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 strace
Segfaulting läuft, und wie würde ich die Situation weiterhin debuggen?
quelle
strace
Binärdatei ein Sticky-Bit gesetzt?[ 1170.678996] mplayer[3970]: segfault at ffffe0b4 ip b6464216 sp bfd84930 error 4 in libGL.so.290.10[b63e4000+a9000]
. Was jetzt?gdb
Gibt es einen Grund, warum Sie es nicht einfach debuggen und eine Rückverfolgung erhalten können, von wo aus der Segfault auftritt?Antworten:
Ich habe beobachtet, dass Nvidia
libGL.so
versucht, festzustellen, ob der aktuelle Prozess verfolgt wird, indem/proc/self/status
sie "TracerPid:
" öffnet und sucht . Je nachdem, ob der Wert vonTracerPid
ungleich 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:
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, dalibGL
es sich unterschiedlich verhält, je nachdem, ob der Prozess verfolgt / debuggt wird.quelle
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.
quelle
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.
quelle
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.
quelle
nv
und sogar dasvesa
Zeug treibt es an, aber esnouveau
ist 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.