In che modo l'esecuzione di strace potrebbe risolvere il mio problema OpenGL?


8

Da un recente importante aggiornamento alla mia distribuzione (PLD Linux), ho avuto problemi con tutta una serie di programmi. Come meglio posso dire, tutto ciò che tocca i segfault OpenGL o PulseAudio. Sto usando i driver proprietari nvidia e un kernel 3.2.x. Xorg stesso funziona bene e sono in grado di eseguire la maggior parte dei programmi, tuttavia cose come mplayer segfault e nessun suono viene prodotto da alcun programma.

Una volta capito che potrebbe essere correlato a OpenGL, ho iniziato a giocare glxgearscome test. Eseguendolo da solo segfault all'istante. Poi ho scoperto che eseguirlo sotto stracefunziona bene. La stessa cosa è vera per mplayer. L'esecuzione su un file mp3 di prova segfault all'istante, l'esecuzione strace mplayersuona bene (anche se l'audio a impulsi muore ancora e torna a un dispositivo di output fittizio).

In che modo eseguire qualcosa sotto la stracesua protezione dal segfaulting e come potrei continuare a eseguire il debug della situazione?


1
Il tuo stracebinario ha un bit appiccicoso impostato?
Mat

6
Indovina: è un bug di temporizzazione e la sequenza rallenta il processo abbastanza da non innescare il bug.
Gilles 'SO- smetti di essere malvagio'

1
@Mat: nessuna parte appiccicosa.
Caleb

1
@FrederikDeweerdt: Aaa, sì, in realtà lo fa. Non molto, ma positivly identifica quello che ho già sospettato, la libreria nvidia condizione è la causa del torpore: [ 1170.678996] mplayer[3970]: segfault at ffffe0b4 ip b6464216 sp bfd84930 error 4 in libGL.so.290.10[b63e4000+a9000]. E adesso?
Caleb

1
Qualche motivo per cui non puoi semplicemente eseguire il debug gdbe ottenere un backtrace da dove avviene il segfault?
Ciao,

Risposte:


2

Ho osservato che i libGL.sotentativi di Nvidia di rilevare se il processo attuale viene rintracciato, aprendo /proc/self/statuse cercando " TracerPid:". Vengono presi percorsi di codice diversi a seconda che il valore di TracerPidsia diverso da zero (ovvero, se l'elaborazione corrente viene tracciata o meno).

Installa sysdig e acquisisci una traccia per il processo incriminato due volte, una volta mentre esegui il tracciamento, una volta senza traccia. Per esempio:

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

Confrontare l'output testuale delle due diverse tracce per osservare la variazione del flusso di esecuzione tra le serie di tracce e non glxgears.

strace"risolve" il problema di OpenGL, perché libGLsi comporta in modo diverso a seconda che il processo venga rintracciato / debug.


1

Immagino che un altro pacchetto abbia sostituito libGL.so con la sua versione, sostituendo la versione nVidia - molto probabilmente un pacchetto Mesa. Per risolvere il problema, reinstallare il driver nVidia proprietario, questo ripristinerà libV.so fornito da nVidia.


1
Quindi non funzionerebbe anche se si corre sotto stretto.
Renan,

0

Hai detto di aver provato nv, nouveau e vesa. Che cosa è successo in ogni caso?

Inoltre, prova ad avviare la macchina da una chiavetta USB con un'altra distro e verifica se il problema persiste. In caso contrario, allora, forse, le versioni dei driver delle altre distro possono essere utilizzate sul tuo computer. Potrebbe anche far luce sui dettagli del problema che stai riscontrando (sembra essere un bug di temporizzazione).

Le macchine moderne sono ancora in grado di rallentare il bus PCI? È un PC desktop o un notebook?

Proprio come nota a margine, potresti risparmiarti molto dolore futuro evitando ATI e NVidia del tutto, se possibile dal punto di vista delle prestazioni. I loro margini sono così bassi che persino un calo dell'1% nella base di utenti può indurli a ripulire il loro atto.


-1

Sbarazzarsi dei driver nvidia proprietari e utilizzare quelli open source. Ti sei identificato per colpa dei driver proprietari nvidia.


Ottimo concetto, ma sai che è più facile da dire che da fare. Ho eseguito i driver neavou, ma hanno problemi con due monitor e gestione dell'alimentazione.
Caleb

Ci sono altri driver oltre a neavou. Direi che è una scelta facile poiché in questo momento non hai un sistema che funzioni correttamente.
aseq

Sul serio? Se hai una risposta per me, modifica il tuo post per rispondere effettivamente alla mia domanda o fornire una soluzione alternativa specifica. Se conosci qualche magia che non conosco, dovrai essere più dettagliato per essere utile. Sono ben consapevole che ci sono altri driver là fuori, ma probabilmente sapete che non fanno tutto ciò che fanno i proprietari. L'ho usato nve anche le vesacose lo guidano, ma nouveauè di gran lunga il più caratterizzato e le migliori prestazioni. Ironicamente questo sistema sta funzionando per tutto ciò che è più importante che fare, che non è il caso di altri piloti.
Caleb

Suggerire una soluzione è anche una risposta e direi che è una soluzione alternativa. Solo perché non ti piace quella soluzione non è così rilevante.
aseq,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.