Làm cách nào để chạy strace có thể khắc phục sự cố OpenGL của tôi?


8

Kể từ lần nâng cấp lớn gần đây lên bản phân phối của tôi (PLD Linux), tôi đã gặp rắc rối với hàng loạt chương trình. Như tôi có thể nói, bất cứ điều gì chạm vào các phân tách OpenGL hoặc PulseAudio. Tôi đang sử dụng trình điều khiển nvidia độc quyền và kernel 3.2.x. Bản thân Xorg chạy tốt và tôi có thể chạy hầu hết các chương trình, tuy nhiên những thứ như mplayer segfault và không có âm thanh nào được tạo ra bởi bất kỳ chương trình nào.

Khi tôi nhận ra rằng nó có thể liên quan đến OpenGL, tôi bắt đầu chơi glxgearsthử như một bài kiểm tra. Chạy nó bằng segfaults ngay lập tức. Sau đó, tôi phát hiện ra rằng chạy nó dưới stracechạy tốt. Điều tương tự cũng đúng cho mplayer. Chạy nó trên một tệp mp3 thử nghiệm ngay lập tức, chạy strace mplayerchỉ chạy tốt (mặc dù âm thanh xung vẫn chết và nó trở lại thiết bị đầu ra giả).

Làm thế nào có thể chạy một cái gì đó theo stracenó giữ cho nó khỏi segfaulting và làm thế nào tôi sẽ tiếp tục gỡ lỗi tình huống?


1
Liệu stracenhị phân của bạn có một tập bit dính?
Mat

6
Đoán: đó là một lỗi thời gian và strace làm chậm quá trình xuống đủ để không kích hoạt lỗi.
Gilles 'SO- ngừng trở thành ác quỷ'

1
@Mat: Không dính chút nào.
Caleb

1
@FrederikDeweerdt: Aaa, đúng vậy. Không nhiều, nhưng nó xác định một cách tích cực những gì tôi đã nghi ngờ, thư viện do nvidia cung cấp đang gây ra cái chết : [ 1170.678996] mplayer[3970]: segfault at ffffe0b4 ip b6464216 sp bfd84930 error 4 in libGL.so.290.10[b63e4000+a9000]. Giờ thì sao?
Caleb

1
Bất kỳ lý do nào bạn không thể gỡ lỗi nó gdbvà nhận được một backtrace từ nơi xảy ra segfault?
Hello71

Câu trả lời:


2

Tôi đã quan sát thấy các libGL.sonỗ lực của Nvidia để phát hiện xem quy trình hiện tại có đang được theo dõi hay không, bằng cách mở /proc/self/statusvà tìm kiếm " TracerPid:". Các đường dẫn mã khác nhau được thực hiện tùy thuộc vào giá trị của TracerPidkhác không (nghĩa là xử lý hiện tại có được theo dõi hay không).

Cài đặt sysdig và ghi lại dấu vết cho quá trình vi phạm hai lần, một lần trong khi sải bước, một lần với bước tiến. Ví dụ:

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

So sánh đầu ra văn bản của hai dấu vết khác nhau để quan sát sự thay đổi trong luồng thực hiện giữa các lần chạy phân tầng và không phân tầng của glxgears.

strace"Khắc phục" sự cố OpenGL của bạn, bởi vì libGLhoạt động khác nhau tùy thuộc vào việc quá trình có được theo dõi / gỡ lỗi hay không.


1

Tôi sẽ tưởng tượng rằng một gói khác đã thay thế libGL.so bằng phiên bản của chính nó, thay thế phiên bản nVidia - rất có thể là gói Mesa. Để khắc phục sự cố, hãy cài đặt lại trình điều khiển nVidia độc quyền, điều này sẽ khôi phục lại libGL.so do nVidia cung cấp.


1
Sau đó, nó sẽ không hoạt động ngay cả khi chạy dưới bước.
Renan

0

Bạn nói bạn đã thử nv, nouveau và vesa. Điều gì đã xảy ra trên mỗi trường hợp?

Ngoài ra, hãy thử khởi động máy của bạn khỏi một thanh USB với một bản phân phối khác và xem vấn đề còn tồn tại không. Nếu không, thì có lẽ, các phiên bản trình điều khiển từ các bản phát hành khác có thể được sử dụng trên máy của bạn. Nó cũng có thể làm sáng tỏ các chi tiết cụ thể của vấn đề bạn đang gặp phải (có vẻ như đó là một lỗi thời gian).

Các máy móc hiện đại vẫn có khả năng làm chậm bus PCI? Nó là một máy tính để bàn hay một máy tính xách tay?

Cũng như một lưu ý phụ, bạn có thể tiết kiệm cho mình rất nhiều nỗi đau trong tương lai bằng cách tránh ATI và NVidia hoàn toàn, nếu có thể là hiệu suất khôn ngoan. Lợi nhuận của họ thấp đến mức ngay cả cơ sở người dùng giảm 1% cũng có thể khiến họ làm sạch hành động của mình.


-1

Loại bỏ các trình điều khiển nvidia độc quyền và sử dụng các trình điều khiển nguồn mở. Bạn tự nhận mình là trình điều khiển nvidia độc quyền có lỗi.


Khái niệm tuyệt vời, nhưng bạn biết rằng nói thì dễ hơn làm. Tôi đã chạy trình điều khiển neavou, nhưng họ có vấn đề với màn hình kép và quản lý năng lượng.
Caleb

Có những người lái xe khác ngoài neavou. Tôi muốn nói rằng đó là một lựa chọn dễ dàng vì ngay bây giờ bạn không có một hệ thống làm việc đúng đắn.
aseq

Nghiêm túc? Nếu bạn có câu trả lời cho tôi, vui lòng chỉnh sửa bài đăng của bạn để thực sự trả lời câu hỏi của tôi hoặc cung cấp giải pháp thay thế cụ thể. Nếu bạn biết một số phép thuật tôi không biết, bạn sẽ cần phải chi tiết hơn để có ích. Tôi biết rõ rằng có những trình điều khiển khác ngoài đó, nhưng bạn có thể biết rằng họ không làm mọi thứ mà những người độc quyền làm. Tôi đã sử dụng nv, và thậm chí các vesacông cụ điều khiển nó, nhưng nouveaucho đến nay là tính năng tốt nhất và hiệu suất tốt nhất. Trớ trêu thay, hệ thống này đang hoạt động cho tất cả mọi thứ, điều quan trọng nhất là nó làm, đó không phải là trường hợp với các trình điều khiển khác.
Caleb

Đề xuất một công việc xung quanh cũng là một câu trả lời và tôi sẽ nói đó là một giải pháp thay thế. Chỉ vì bạn không thích giải pháp đó không liên quan.
aseq
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.