Как бегущая строка могла решить мою проблему с OpenGL?

8

После недавнего серьезного обновления моего дистрибутива (PLD Linux) у меня возникли проблемы с целым рядом программ. Насколько я могу судить, все, что касается сегментов OpenGL или PulseAudio. Я использую проприетарные драйверы nvidia и ядро ​​3.2.x. Сам Xorg работает нормально, и я могу запускать большинство программ, однако такие вещи, как mplayer segfault и никакой звук не производятся никакой программой.

Как только я понял, что это может быть связано с OpenGL, я начал играть glxgearsв качестве теста. Запуск сам по себе segfaults мгновенно. Затем я обнаружил, что работает под управлением straceработает нормально. То же самое верно для mplayer. Запуск его в тестовом mp3-файле segfaults мгновенно, при запуске strace mplayerпроигрывается просто отлично (хотя импульсное аудио все равно умирает и возвращается к фиктивному устройству вывода).

Как можно запустить что-то под straceзащитой от segfaulting и как я буду продолжать отлаживать ситуацию?

Калеб
источник
1
У вашего straceбинарного файла установлен липкий бит?
Мат
6
Угадайте: это ошибка синхронизации, и strace замедляет процесс настолько, чтобы не вызвать ошибку.
Жиль "ТАК - перестань быть злым"
1
@ Мат: Нет, липкий бит.
Калеб
1
@FrederikDeweerdt: Ааа, да, на самом деле это так. Не так много, но это Положительно идентифицирует то , что я уже подозреваемых, то NVIDIA предоставляется библиотека вызывает мёртвость: [ 1170.678996] mplayer[3970]: segfault at ffffe0b4 ip b6464216 sp bfd84930 error 4 in libGL.so.290.10[b63e4000+a9000]. Что теперь?
Калеб
1
По какой-то причине вы не можете просто отладить его gdbи получить обратную информацию о том, где произошла ошибка?
Hello71

Ответы:

2

Я заметил, что libGL.soпопытки Nvidia определить, отслеживается ли текущий процесс, путем открытия /proc/self/statusи поиска " TracerPid:". Различные пути кода используются в зависимости от того, является ли значение TracerPidненулевым (то есть отслеживается текущая обработка или нет).

Установите sysdig и дважды получите трассировку для процесса, вызывающего сбой, один раз во время распределения, один раз без использования strace. Например:

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

Сравните текстовый вывод двух разных трассировок, чтобы увидеть изменение в потоке выполнения между последовательными и неограниченными прогонами glxgears.

strace«исправляет» вашу проблему OpenGL, потому что libGLведет себя по-разному в зависимости от того, отслеживается ли процесс / отлажен.

Том О
источник
1

Я полагаю, что другой пакет заменил libGL.so своей версией, заменив версию nVidia - скорее всего, пакет Mesa. Чтобы решить эту проблему, переустановите проприетарный драйвер nVidia, это восстановит nVidia, предоставленный libGL.so.

ciotog
источник
1
Тогда это не сработает, даже если будет работать в стрейс-режиме.
Ренан
0

Вы сказали, что пробовали nv, nouveau и vesa. Что случилось в каждом случае?

Кроме того, попробуйте загрузить свой компьютер с USB-накопителя с другим дистрибутивом и посмотрите, сохраняется ли проблема. Если это не так, то, возможно, версии драйверов из других дистрибутивов могут быть использованы на вашем компьютере. Это также может пролить некоторый свет на специфику вашей проблемы (похоже, это ошибка синхронизации).

Способны ли современные машины замедлять шину PCI? Это настольный ПК или ноутбук?

Как примечание, вы можете избавить себя от многих проблем в будущем, избегая ATI и NVidia в целом, если это возможно с точки зрения производительности. Их маржа настолько низка, что даже 1% -ное снижение пользовательской базы может побудить их очистить свои действия.

rbanffy
источник
-1

Избавьтесь от проприетарных драйверов nvidia и используйте открытые. Вы определили, что виноваты несвободные драйверы NVIDIA.

aseq
источник
Отличная концепция, но вы знаете, что легче сказать, чем сделать. Я запустил драйверы neavou, но у них есть проблемы с двумя мониторами и управлением питанием.
Калеб
Есть и другие драйверы, кроме neavou. Я бы сказал, что это простой выбор, поскольку сейчас у вас нет нормально работающей системы.
Aseq
Шутки в сторону? Если у вас есть ответ для меня, пожалуйста, отредактируйте свой пост, чтобы фактически ответить на мой вопрос или предоставить конкретное альтернативное решение. Если вы знаете о какой-то магии, которой я не знаю, вам нужно быть более подробным, чтобы быть полезным. Я хорошо знаю, что есть другие драйверы, но вы, вероятно, знаете, что они не делают все, что делают проприетарные. Я использовал nv, и даже vesaматериал управляет им, но nouveau, безусловно, наиболее показанным и наиболее эффективным. Как ни странно эта система будет работать на все , что является наиболее важным , что делать, что не так с другими водителями.
Калеб
Предлагать обходной путь - это тоже ответ, и я бы сказал, что это альтернативное решение. То, что вам не нравится это решение, не столь актуально.
Aseq