¿Cómo podría correr strace solucionar mi problema de OpenGL?

8

Desde una reciente actualización importante de mi distribución (PLD Linux), he tenido problemas con una gran cantidad de programas. Lo mejor que puedo decir, todo lo que toca OpenGL o PulseAudio segfaults. Estoy usando los controladores propietarios de nvidia y un kernel 3.2.x. Xorg en sí funciona bien y puedo ejecutar la mayoría de los programas, sin embargo, cosas como mplayer segfault y ningún programa produce sonido.

Una vez que descubrí que podría estar relacionado con OpenGL, comencé a jugar glxgearscomo prueba. Ejecutarlo por sí solo segfaults instantáneamente. Entonces descubrí que ejecutarlo bajo stracefunciona bien. Lo mismo es cierto para mplayer. Ejecutarlo en un archivo mp3 de prueba se convierte en un valor predeterminado al instante, la ejecución se strace mplayerreproduce muy bien (aunque el audio de pulso aún muere y vuelve a un dispositivo de salida ficticio).

¿Cómo podría ejecutar algo bajo para straceevitar que se produzca una falla y cómo continuaría depurando la situación?

Caleb
fuente
1
¿Su stracebinario tiene un conjunto de bits pegajoso?
Mat
66
Adivina: es un error de tiempo, y strace ralentiza el proceso lo suficiente como para no activar el error.
Gilles 'SO- deja de ser malvado'
1
@Mat: sin pedacitos.
Caleb
1
@FrederikDeweerdt: Aaa, sí, de hecho lo hace. No mucho, pero positivly identifica lo que ya sospechaba, la biblioteca nvidia siempre está causando la falta de vida: [ 1170.678996] mplayer[3970]: segfault at ffffe0b4 ip b6464216 sp bfd84930 error 4 in libGL.so.290.10[b63e4000+a9000]. ¿Ahora que?
Caleb
1
¿Alguna razón por la que no puede simplemente depurarlo gdby obtener un seguimiento de donde ocurre el segfault?
Hola71

Respuestas:

2

He observado que Nvidia libGL.sointenta detectar si se está rastreando el proceso actual, abriendo /proc/self/statusy buscando " TracerPid:". Se toman diferentes rutas de código dependiendo de si el valor de TracerPidno es cero (es decir, si se está rastreando el procesamiento actual o no).

Instale sysdig , y capture el rastro del proceso ofensivo dos veces, una vez mientras realiza el enderezado, una vez sin forzar. Por ejemplo:

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

Compare la salida textual de las dos trazas diferentes para observar el cambio en el flujo de ejecución entre las corridas con y sin ejecución glxgears.

strace"corrige" su problema de OpenGL, porque libGLse comporta de manera diferente dependiendo de si el proceso se está rastreando / depurando.

Tom O
fuente
1

Me imagino que otro paquete reemplazó libGL.so con su propia versión, reemplazando la versión nVidia, muy probablemente un paquete Mesa. Para solucionar el problema, reinstale el controlador propietario de nVidia, esto restaurará el nVidia proporcionado libGL.so.

ciotog
fuente
1
Entonces no funcionaría incluso si se ejecuta bajo strace.
Renan
0

Dijiste que probaste nv, nouveau y vesa. ¿Qué pasó en cada caso?

Además, intente arrancar su máquina desde una memoria USB con otra distribución y ver si el problema persiste. Si no es así, entonces, tal vez, las versiones del controlador de las otras distribuciones se pueden utilizar en su máquina. También podría arrojar algo de luz sobre los detalles del problema que está teniendo (parece ser un error de sincronización).

¿Las máquinas modernas todavía son capaces de ralentizar el bus PCI? ¿Es una PC de escritorio o una notebook?

Solo como una nota al margen, puede ahorrarse mucho dolor en el futuro al evitar ATI y NVidia por completo, si es posible en términos de rendimiento. Sus márgenes son tan bajos que incluso una caída del 1% en la base de usuarios puede llevarlos a limpiar su acto.

rbanffy
fuente
-1

Deshágase de los controladores propietarios de nvidia y use los de código abierto. Usted identificó que los controladores propietarios de nvidia tienen la culpa.

aseq
fuente
Gran concepto, pero sabes que es más fácil decirlo que hacerlo. He ejecutado los controladores neavou, pero tienen problemas con los monitores duales y la administración de energía.
Caleb
Hay otros conductores además de neavou. Diría que es una opción fácil ya que en este momento no tienes un sistema que funcione correctamente.
aseq
¿Seriamente? Si tiene una respuesta para mí, edite su publicación para responder realmente a mi pregunta o proporcionar una solución alternativa específica. Si conoces algo de magia que no conozco, deberás ser más detallado para ser útil. Soy consciente de que existen otros controladores, pero probablemente sepas que no hacen todo lo que hacen los propietarios. Lo he usado nv, e incluso las vesacosas lo impulsan, pero nouveaues, con mucho, el más destacado y el mejor rendimiento. Irónicamente este sistema está funcionando por todo lo que es más importante que lo haga, que no es el caso con otros conductores.
Caleb
Sugerir una solución alternativa también es una respuesta y yo diría que es una solución alternativa. El hecho de que no te guste esa solución no es tan relevante.
aseq