系统完全冻结,使用Intel Bay Trail处理器。

我的系统在随机的、频繁的时间间隔内完全冻结。我从Ubuntu 14.04开始遇到了同样的问题,但是在最近升级到16.04之后并没有改善,事实上似乎更糟了。
当这种情况发生时,无法做任何事情。我尝试了这个帖子中的所有方法:当Ubuntu冻结时该怎么办,但是没有任何效果,我只能强制重启。我已经阅读了所有的系统日志和journalctl,但是从来没有任何可以帮助诊断问题的信息。
这是一个双启动系统,同时安装了Windows 10,而在那里没有任何问题,所以不是硬件有问题。
我的笔记本电脑配备了英特尔Bay Trail处理器(Pentium N3540)。

3个回答

你的处理器受到c-state bug的影响

当CPU尝试进入不支持的睡眠状态时,这会导致完全冻结。对于许多Bay Trail设备来说,特别是在较新的(4.*)内核上,这是一个问题。

据我所知,受影响的处理器有:

Atom Z3735F (Asus X205TA, Acer Aspire Switch 10, Lenovo MIIX 3 1030) 
Atom Z3735G
Celeron J1900 (Asus ET2325IUK, shuttle XS35V4)
Celeron N2940 (Acer Aspire ES1-711, Chromebook)
Celeron N2840 (Acer Aspire ES1-311)
Celeron N2930 (Jetway JBC311U93, Zotac Nano CI320)
Pentium N3520 
Pentium N3530 (Acer V3-111P)
Pentium N3540 (Dell Inspiron 15 3000, Lenovo G50, ASUS X550MJ)

(请提供一个)编辑,以添加自己的设备,如果受到影响,请建议

完整的Bay Trail处理器列表可以在此处找到

在它得到适当修复之前,有一个简单的解决方法。

您只需传递一个内核引导参数,随机冻结将完全停止。该参数可能会略微增加电池消耗,但它将为您提供一个可用的系统。

通过编辑GRUB的配置文件来完成:

启动Ubuntu并按下Ctrl+Alt+T打开终端,然后输入

sudo nano /etc/default/grub

找到以GRUB_CMDLINE_LINUX_DEFAULT=开头的行。
需要将其更改为包含intel_idle.max_cstate=1
所以在您编辑后,它应该读作类似于
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash intel_idle.max_cstate=1"

quietsplash是Ubuntu桌面的默认参数-不需要更改它们或任何其他预设参数

现在按下ctrl+o保存文件,然后按下enter退出,再按下ctrl+x

现在运行

sudo update-grub

然后重新启动。

如果系统挂起前没有足够的时间怎么办

没问题。如我之前链接到的帮助页面所述,您可以在启动前向GRUB添加参数。请注意,这仅将参数传递给当前启动,因此您仍然必须编辑/etc/default/grub,以使更改永久生效。

您需要进入 GRUB菜单。如果您是双启动,则无论如何都会出现此菜单;否则,在按下电源按钮以打开计算机后,请按住(或轻点)shift

当您进入此屏幕时,请选择Ubuntu高级选项。您可以将光标移动到不同的内核,或将其留在原地以编辑默认选项。不要按enter,而是按e,您将进入编辑模式,看起来类似于 this

将光标移动到“quiet splash”后面,加一个空格,然后小心地输入“intel_idle.max_cstate=1”,确保它后面也有一个空格。
现在按下F10或Ctrl+X进行启动。

1@Arronical 哈哈,谢谢!我必须知道这个 - 没有这个参数,我的系统会持续运行大约15分钟,但是有了这个参数,它从来没有冻结过一次 :) 所有的功劳归功于那些真正厉害的黑客们,他们找到了解决方法。 - Zanna
谢谢!这样做能阻止对Ctrl Alt REISUB的无响应吗? 另外,对于上述GRUB编辑的回应是,如果设置了隐藏超时时间,则上述编辑将不起作用。如果问题仍然存在,该如何解决? - clr
@clr C状态冻结不会对魔术sysrq REISUB做出响应,但这个修复方法可以防止C状态冻结。如果你的系统因其他原因而冻结,REISUB可能有效。GRUB_HIDDEN_TIMEOUT对启动参数没有影响,你应该能够通过在启动时按下Shift键来访问菜单。如果你无法这样做,在系统冻结得太快以至于你无法编辑/etc/default/grub的情况下,这可能有些麻烦,但你可以尝试引导一个带有旧内核版本的live session来编辑文件 - 将根分区挂载到/mnt并编辑/mnt/etc/default/grub以添加参数。 - Zanna
感谢清晰的说明。希望这个方法有效。如果不行的话,我会在这里报告的。我目前在 Zotac Nano CI320 上运行 16.10 版本。之前我尝试过 16.04 和 Debian 8,也遇到了随机冻结的问题。我尝试了 16.10,希望通过更新的内核来解决这个问题。有趣的是,我曾经试过 REISUB(我记不清是哪个操作系统了),它确实起作用了——所以可能我面临的是一个不同的问题。 - Jeremy Cook
@JeremyCook 我刚刚安装了16.10版本,第一件事就是编辑了我的启动参数 - 我真的应该看看这个新内核!请在这里告诉我它是否有效。 - Zanna
我已经在HP Pavillion笔记本上安装了16.04 Mate系统,但仍然偶尔会出现卡顿的情况 - 屏幕仍然显示着卡顿之前的画面,但键盘和触摸板没有反应。 - Evgeny
有人找到解决办法了吗?我也偶尔遇到这个问题,系统可能稳定运行几周,甚至几个月,但迟早会完全死机。这是在使用 intel_idle.max_cstate=1 的情况下发生的,似乎在 Ubuntu 20.04 上比 18.04 更常见。 - Roman Gaufman
1我在我的Intel(R) Pentium(R) CPU N3700 @ 1.60GHz处理器上安装了Ubuntu 20,添加了intel_idle.max_cstate=1到grub后,现在完全消除了冻结问题。感谢您的答案。 - Vishal Kamlapure

在Bay Trail和Braswell处理器上,Linux系统的内置视频设备会随机出现冻结现象。
问题出在温度控制上。只需移除thermald模块即可解决:
sudo apt-get remove thermald 

4我认为Bay Trail的bug出现在i915(Intel CPU)驱动程序中。处理器不断尝试进入不支持的睡眠状态。Bay Trail用户的问题始于对i915的提交,因此一直被指责为原因。然而,也许还存在其他原因,而且我对Braswell的冻结毫无头绪,知道能够通过某种(安全的?)操作来解决会很好。您有关于此信息的任何参考资料吗?或者您可以告诉我们这是在哪种硬件上进行测试并且有效的吗? - Zanna
似乎这在19.04版本仍然存在问题。我有点希望现在已经修复了。自从14.04之后,我的笔记本就发生了这种情况。15.10几乎无法修复。 - crip659

对于关注此问题的人,这里有一个更新。请访问:Bug 109051 - intel_idle.max_cstate=1 required on baytrail to prevent crashes 并按下 End 键。如果需要,请按下 Page Up 键以查看第1013条留言。
根据第1013条评论,最近的内核已经修复了这个问题:

我很久没有查看这个帖子了,但我认为我应该发表一下我的发现,以防对任何人有用。

一台低端电脑使用Intel N2807供电,在未设置...max_cstates=1 的情况下,从来没有超过30分钟的工作时间而不崩溃,现在在5.3.1或4.19.75版本的原始内核上完美运行。我每个版本都运行了几天,没有任何问题。平均功耗也降低了10%左右。

修复这个问题花费了大约四年的时间,最初报告于2015年12月8日。

1我正在使用内核版本为5.4.0-59-generic的系统,每隔一两周就会遇到相同的症状,不得不进行硬重启,而日志中绝对没有任何值得注意的信息。在我的旧i5处理器上从未遇到过这个问题,只是在升级到i7-4790K之后才出现的。 - Coder Guy