我上一个问题的答案是,Ubuntu 12.04 冻结,需要关闭电源。我应该在日志中查找/ grep 什么?,让我怀疑我的电脑正在经历间歇性的 GPU 锁定。这种情况大约每周发生一次,通常是在我使用 Chrome 时。今天,当我在清晰图表
我有一台 Dell Optiplex 755,配有 ATI Radeon HD 2400 XT 和双显示器,运行 Xinerama 模式。我使用的是 12.04,安装了专有的 ATI 驱动程序。
当计算机死机时,我仍然可以通过 ssh 登录。我想按照以下说明报告此问题:https://wiki.ubuntu.com/X/Troubleshooting/Freeze
是否有一种(安全的)方法可以导致 GPU 锁定,以便我可以继续提交错误,而不是等到它再次发生?
答案1
好问题。
工作负载
/usr/share/xdiagnose/workloads 目录有一组工作负载,旨在锻炼您的图形系统以触发锁定。
$ ls /usr/share/xdiagnose/workloads/
README do_monitor_rotation_loop
do_chws_loop* do_screensaver_loop*
do_cpu_spin_loop do_video_loop*
do_disk_write_loop do_vtswitch_loop*
do_glx_loop* repro.sh
do_kernel_compile_loop run_workloads
do_monitor_disable_loop* youtube-loop.html
do_monitor_resolution_loop* youtube-reload.html
请注意,要运行它们,您需要传递“run”。例如:
$ do_glx_loop 运行
如果没有参数,脚本将显示使用情况。部分原因是为了安全(以防有人盲目运行脚本),但主要原因是为了保持脚本的 API 整洁。
我加星标的脚本可能是最好的入门脚本。我会先一次只运行一个脚本,让它运行几个小时。如果您的系统能够很好地运行,那么请尝试同时运行两个或更多脚本。
注意,我本人尚未对这些进行过严格测试,因此不能保证它们没有错误。但它们是相当简短和简单的脚本,因此希望易于修复,并且非常欢迎良好的补丁。
还请注意,它们很可能会触发与您要解决的问题无关的锁定。GPU 锁定在外行人看来通常都是一样的,因为它们或多或少具有完全相同的症状。
日志
如果您使用的是 Intel Graphics,则有一个您需要的 /sys/kernel/debug/dri/0/i915_error_state。这是挂起时寄存器状态的快照,其顶部包含一些错误代码。IPEHR、PGTBL_ER、ESR、EIR。将这些代码匹配起来,看看您是否有相同或相似的错误。
如果您没有使用英特尔显卡(在这种情况下您没有使用),或者您没有看到生成的 i915_error_state 文件,那么您应该查看 dmesg 和 /var/log/kern.log。 有时对于 GPU 锁定,它们将指示 GPU 锁定是由什么原因造成的。
开源 -ati 驱动程序有 radeontool 和 avivotool,它们可以捕获寄存器状态。这些工具主要用于开源 -ati,但这些工具也应该适用于 -fglrx。我从未见过有人要求它修复 -fglrx 错误,但这肯定不会有什么坏处。
测试
对于所有驱动程序,下一步通常是开始测试驱动程序的较新或较旧版本。对于专有驱动程序,您可以检查 x-updates ppa,但可能必须从供应商网站下载并手动安装驱动程序(这样做会弄乱系统的包装)。对于 FOSS 驱动程序(如 -intel、-nouveau、-ati),这意味着测试较新的内核或较新的 mesa。我们在以下位置提供较新内核的打包版本http://kernel.ubuntu.com/~kernel-ppa/mainline/对于 mesa,有各种 PPA,例如 xorg-edgers。我还在准备 precise 的 8.0.3 更新,我们相信它修复了英特尔显卡的许多死机问题。
无论如何,找到一个可以运行的版本后不要就此止步。在运行版本和损坏版本之间尝试其他版本。如果可以将范围缩小到两个相邻的版本,那么这对开发人员找出导致回归的补丁将大有帮助。
贡献
在进行故障排除时,您可能会发现错误,或者可能会对脚本或文档提出改进意见。我们热烈欢迎您为这些做出贡献。对于 wiki 文档,请继续编辑!我尝试至少每年更新一次,但我并不总是有时间这样做,下一个访问该页面的人肯定会感谢您为改进它们所做的努力。
对于脚本本身的更改,也非常欢迎。您可以随意将更改发送给我 - 作为补丁、bzr 或 git 分支,甚至只是脚本的副本。如果您计划进行大量更改,最好使用带有合并提议的 bzr 分支;有关如何执行此操作的教程可在 code.launchpad.net 上找到,或者如果您有任何问题,请随时在 IRC 上联系我。
或者,如果您还没有准备好深入研究编码,但想要标记错误或需要更多功能的区域,您可以按照通常的方式提交错误报告(ubuntu-bug xdiagnose
)。
快速修复
如果您对进行上述任何调试不感兴趣,这里有一些随机提示:
对于专有驱动程序,请尝试从系统中完全卸载并清除它们,然后从头开始重新安装。不幸的是,这“解决”了一个很多的错误...
对于 FOSS 驱动程序,有各种内核开关可供您尝试。对于 3D/mesa 错误,还有 driconf 来调整各种设置。
最后
最后,一个请求... 请不要向 Launchpad 提交有关“随机冻结”的错误报告,除非您至少已经完成了上述一些侦查工作。否则,您只会增加噪音。
我们确实尝试找出经过充分研究的错误报告;我们发现这些报告的性价比更高,并且更有可能最终为发行版提供真正的修复。