Sejak peningkatan besar baru-baru ini ke distribusi saya (PLD Linux), saya telah mengalami masalah dengan banyak program. Yang terbaik yang bisa saya katakan, apa pun yang menyentuh OpenGL atau Segfault PulseAudio. Saya menggunakan driver nvidia dan kernel 3.2.x. Xorg sendiri berjalan dengan baik dan saya dapat menjalankan sebagian besar program, namun hal-hal seperti mplayer segfault dan tidak ada suara yang dihasilkan oleh program apa pun.
Setelah saya mengetahui bahwa itu mungkin terkait dengan OpenGL, saya mulai bermain glxgears
sebagai tes. Menjalankannya dengan sendirinya segfaults secara instan. Kemudian saya menemukan bahwa menjalankannya di bawah strace
berjalan dengan baik. Hal yang sama berlaku untuk mplayer
. Menjalankannya pada file mp3 uji segfaults langsung, menjalankan strace mplayer
memainkan baik-baik saja (meskipun audio pulsa masih mati dan kembali ke perangkat output dummy).
Bagaimana bisa menjalankan sesuatu di bawahnya strace
agar tidak segfault dan bagaimana saya akan terus men-debug situasi?
sumber
strace
biner Anda memiliki set bit yang lengket?[ 1170.678996] mplayer[3970]: segfault at ffffe0b4 ip b6464216 sp bfd84930 error 4 in libGL.so.290.10[b63e4000+a9000]
. Sekarang apa?gdb
dan mendapatkan backtrace dari tempat segfault terjadi?Jawaban:
Saya telah mengamati bahwa
libGL.so
upaya Nvidia untuk mendeteksi jika proses saat ini sedang dilacak, dengan membuka/proc/self/status
dan mencari "TracerPid:
". Jalur kode yang berbeda diambil tergantung pada apakah nilaiTracerPid
bukan nol (yaitu, apakah pemrosesan saat ini dilacak atau tidak).Instal sysdig , dan rekam jejak untuk proses menyinggung dua kali, sekali saat stracing, sekali dengan mulut strace. Sebagai contoh:
Bandingkan output tekstual dari dua jejak yang berbeda untuk mengamati perubahan dalam alur eksekusi antara menjalankan straced dan non-straced
glxgears
.strace
"memperbaiki" masalah OpenGL Anda, karenalibGL
berperilaku berbeda tergantung pada apakah proses sedang dilacak / di-debug.sumber
Saya akan membayangkan bahwa paket lain menggantikan libGL.so dengan versinya sendiri, menggantikan versi nVidia - kemungkinan besar paket Mesa. Untuk memperbaiki masalah ini, instal ulang driver nVidia milik, ini akan mengembalikan nVidia yang disediakan libGL.so.
sumber
Kamu bilang kamu mencoba nv, nouveau dan vesa. Apa yang terjadi pada setiap kasus?
Juga, cobalah untuk mem-boot mesin Anda dari USB stick dengan distro lain dan lihat apakah masalahnya masih ada. Jika tidak, maka, mungkin, versi driver dari distro lain dapat digunakan pada mesin Anda. Hal ini juga dapat menjelaskan secara spesifik masalah yang Anda alami (sepertinya bug waktu).
Apakah mesin modern masih mampu memperlambat bus PCI? Apakah itu PC desktop atau notebook?
Sama seperti catatan tambahan, Anda dapat menghindarkan diri Anda dari banyak rasa sakit di masa depan dengan menghindari ATI dan NVidia sama sekali, jika mungkin dari segi kinerja. Margin mereka sangat rendah sehingga bahkan penurunan 1% di basis pengguna dapat memicu mereka untuk membersihkan tindakan mereka.
sumber
Singkirkan driver nvidia eksklusif dan gunakan yang open source. Anda mengidentifikasi diri Anda driver nvidia milik yang salah.
sumber
nv
, dan bahkanvesa
hal - hal yang mendorongnya, tetapinouveau
sejauh ini yang paling banyak ditampilkan dan berkinerja terbaik. Ironisnya sistem ini bekerja untuk semua yang paling penting yang dilakukannya, yang tidak terjadi dengan driver lain.