Como a execução do strace pode corrigir o problema do OpenGL?

8

Desde uma grande atualização recente para minha distribuição (PLD Linux), tenho tido problemas com vários programas. Pelo melhor que posso dizer, qualquer coisa que toque nos segmentos OpenGL ou PulseAudio. Estou usando os drivers proprietários da nvidia e um kernel 3.2.x. O próprio Xorg roda bem e eu consigo executar a maioria dos programas, no entanto, coisas como mplayer segfault e nenhum som é produzido por nenhum programa.

Depois que descobri que isso poderia estar relacionado ao OpenGL, comecei a brincar glxgearscomo um teste. Executá-lo sozinho segfaults instantaneamente. Então eu descobri que executá-lo em stracebom estado. O mesmo vale para mplayer. Executando-o em um arquivo mp3 de teste segfaults instantaneamente, a execução strace mplayeré executada muito bem (embora o áudio de pulso ainda morra e seja revertido para um dispositivo de saída falso).

Como a execução de algo sob straceimpedi-lo de segfaulting e como eu continuaria a depurar a situação?

Caleb
fonte
1
Seu stracebinário possui um conjunto de bits pegajoso?
Mat
6
Adivinha: é um bug de tempo e o strace retarda o processo o suficiente para não acioná-lo.
Gilles 'SO- stop be evil' em
1
@ Mat: No bit pegajoso.
Caleb
1
@FrederikDeweerdt: Aaa, sim, sim. Não muito, mas positivly identifica o que eu já suspeitava, a biblioteca nvidia fornecido está causando o amortecimento: [ 1170.678996] mplayer[3970]: segfault at ffffe0b4 ip b6464216 sp bfd84930 error 4 in libGL.so.290.10[b63e4000+a9000]. O que agora?
Caleb
1
Algum motivo pelo qual você não pode simplesmente depurá-lo gdbe obter um retorno de onde o segfault acontece?
Hello71

Respostas:

2

Eu observei que as libGL.sotentativas da Nvidia de detectar se o processo atual está sendo rastreado, abrindo /proc/self/statuse procurando " TracerPid:". Caminhos de código diferentes são usados ​​dependendo se o valor de TracerPidfor diferente de zero (ou seja, o processamento atual está sendo rastreado ou não).

Instale o sysdig e capture o rastreamento a para o processo incorreto duas vezes, uma vez durante o rastreamento, uma vez sem rastreamento. Por exemplo:

$ 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 a saída textual dos dois rastreamentos diferentes para observar a mudança no fluxo de execução entre as execuções com e sem rastreamento glxgears.

strace"corrige" o problema do OpenGL, porque seu libGLcomportamento é diferente dependendo de o processo estar sendo rastreado / depurado.

Tom O
fonte
1

Eu imaginaria que outro pacote substituiu libGL.so por sua própria versão, substituindo a versão nVidia - provavelmente um pacote Mesa. Para corrigir o problema, reinstale o driver nVidia proprietário, isso restaurará o libGL.so fornecido pela nVidia.

ciotog
fonte
1
Então não funcionaria, mesmo que rodando sob estrias.
Renan
0

Você disse que tentou nv, nouveau e vesa. O que aconteceu em cada caso?

Além disso, tente inicializar sua máquina com um dispositivo USB com outra distribuição e verifique se o problema persiste. Caso contrário, talvez as versões de driver de outras distros possam ser usadas na sua máquina. Também poderia lançar alguma luz sobre as especificidades do problema que você está tendo (parece ser um bug de tempo).

As máquinas modernas ainda são capazes de diminuir a velocidade do barramento PCI? É um PC de mesa ou um notebook?

Apenas como uma observação lateral, você pode poupar muita dor no futuro, evitando a ATI e a NVidia completamente, se possível em termos de desempenho. Suas margens são tão baixas que mesmo uma queda de 1% na base de usuários pode levá-los a limpar suas ações.

rbanffy
fonte
-1

Livre-se dos drivers proprietários da nvidia e use os de código aberto. Você se identificou com os drivers proprietários da nvidia como culpados.

aseq
fonte
Ótimo conceito, mas você sabe que é mais fácil dizer do que fazer. Eu executei os drivers neavou, mas eles têm problemas com monitores duplos e gerenciamento de energia.
Caleb
Existem outros drivers além do neavou. Eu diria que é uma escolha fácil, pois agora você não possui um sistema funcionando corretamente.
aseq
A sério? Se você tiver uma resposta para mim, edite sua postagem para realmente responder à minha pergunta ou fornecer uma solução alternativa específica. Se você conhece alguma mágica que não conheço, precisará ser mais detalhado para ser útil. Estou ciente de que existem outros drivers por aí, mas você provavelmente sabe que eles não fazem tudo o que os proprietários fazem. Eu usei nv, e até mesmo as vesacoisas dirigem, mas nouveaué de longe o mais destacado e com melhor desempenho. Ironicamente, este sistema está funcionando para tudo o que é mais importante, o que não é o caso de outros drivers.
Caleb
Sugerir uma solução alternativa também é uma resposta e eu diria que é uma solução alternativa. Só porque você não gosta dessa solução não é tão relevante.
aseq