编辑

编辑

我知道很难隔离 CPU,但我看到的错误表明这就是问题所在。

这绝对不是硬件故障/损坏问题。过去几天我一整天都在运行 Windows 10,这东西运行得很快!没有崩溃。更重要的是,我运行了 Windows 内存检查器。记忆力一切都好。

机器规格

该机器是全新的联想 Yoga 710 15"

x64
Intel i7-6500 CPU @ 2.50 GHz, 2601 Mhz, 2 Cores, 4 Logical Processors
SMBIOS Version 2.8
BIOS Mode UEFI
16.0 GB DDR4 Ram
256 MB SSD

隔离到linux内核(?)

我在两者上都看到了同样的问题

  • archlinux-2016.08.01-dual.iso
  • ubuntu-gnome-16.04.1-desktop-amd64.iso

对于 Arch - 问题仅在从 USB 记忆棒启动时间歇性地出现。我设法将 Arch 安装在驱动器上的 100GB ext4 分区上。该安装在启动期间间歇性地(大约 90% 的时间)出现相同的问题。如果我通过了启动,那么在我执行前几个终端命令后,问题会随机出现,最终导致完全死锁。

对于 Ubuntu——USB 记忆棒甚至无法启动。我立即被这些相同的错误阻止。僵局...

这么多错误...

每当发生这种情况时,日志就会充满与内存相关的错误,但我看到的关键错误是:

  • General protection fault 0000[#1] PREEMPT SMP
  • RIP kmem_cache_alloc
  • RIP kmem_cache_alloc_trace

对于这些错误,我已经多次看到一些相同的堆栈跟踪:

rbt_memtype_copy_nth_element
on_each_cpu
flusH_tbl_kernel_range
__purge_umap_area_lazy
um_unmam_aliases
change_page_attr_set_clr
set_memory_ro
frob_text.isra
module_enable_ro

kobject_create
kobject_create_and_add
load_module
__symbol_put
kernel_read
sys_finit_module
entry_SYSCALL_64_fastpath

kmem_cache_alloc_trace
allocate_cgrp_cset_links
...
sys_write
entry_SYSCALL-64_fastpath

Linux 也一直承诺它正在解决这个问题

修复递归错误,但需要重新启动!

我希望..

英特尔ucode

我还尝试intel-ucode在 Arch 安装中安装该软件包。我在dmesg日志中看到微代码已更新,但不幸的是这并没有解决我的问题。

可能是什么问题?如何修复它?


编辑

附加说明。

一般保护故障消​​息和“检测到锁定”类型的消息通常引用CPU。我在这些消息中看到了CPU0CPU1CPU2和。CPU3似乎有什么东西导致 CPU 无法正常工作,就像它们都陷入了死锁,试图清除缓存或其他东西。


编辑2

BIOS 中提到错误

我在一些错误中看到了这一点信息:

LENOVO 80U01LENOVO YOGA710-1 BIOS OGCN20WW(v1.04) 6/30/2016

不确定这是否有助于专业人士理解这个问题......


编辑3

最大CPU数=1

我正在寻找调试选项内核参数文档并发现maxcpus

如果我将 max cpu's 设置为 1,那么问题就会消失。因此,问题似乎是某种共享高速缓存内存违规。


编辑3

maxcpus=1 + Gnome = 再次损坏

虽然maxcpus=1似乎让系统只用 1 个 CPU 工作,但我安装了 gnome,然后运行systemctl enable gdm.service

现在,当我重新启动时,我再次收到所有错误,但这次它们都发生在 CPU0 上

因此,即使使用 1 个 CPU,似乎仍有某些东西导致内存违规。


编辑4

诺拉皮克

所以使用nolapic似乎让一切都“工作”

但是通过使用nolapic,我有效地禁用了其他 CPU 以及 1 个工作 CPU 中的所有多线程。

我试图将其用于 OpenMP,并且在使用 启动后nolapic,OpenMP 和 linux 内核只能找到 1 个线程、1 个 CPU。太糟糕了!

我也尝试过intel_idle.max_cstate=0,,1等等2。但这并不能解决启动问题。

还有什么可能导致内核无法使用我的多核机器?

答案1

原来问题是i2c_hid

这似乎是某种触摸板驱动程序。由于某种原因,当我禁用它时,我仍然可以使用触摸板。笔记本电脑上的触摸屏也可能使用此驱动程序,因为它不起作用。

无论如何,我不喜欢用指纹弄脏我的笔记本电脑屏幕……所以再见i2c_hid

我通过将其添加到内核参数来修复它: modprobe.blacklist=i2c_hid

虽然nolapic也有效,但它禁用了处理器中除 1 个核心之外的所有核心。

我强烈建议其他人不要使用apci=offnolapic出于这个原因。

使用这些选项就像核武器一样,可能会让你的机器正常工作,但你会损失大量性能和/或 I/O 设备作为附带损害。这是启动的一个很好的起点,然后您可以像我一样通过journalctl 来分析失败的启动。

祝那些找到这个的人好运。

答案2

所有这些错误看起来都像我在错误的内核模块中看到的错误。

ubuntuforums 上有人声称他们通过禁用 acpi(添加acpi=off到内核选项)让 ubuntu 在 710-14ISK 上启动。 https://ubuntuforums.org/showthread.php?t=2329448

联想论坛上的另一位客户表示,他们在启动 Fedora 24 时遇到问题,并将问题追溯到 Broadcom 固件的一个部分: https://forums.lenovo.com/t5/Linux-Discussion/Yoga-710-How-to-install-Linux/td-p/3361544

尝试将 Broadcom 和 nouveau 模块列入黑名单(让它们无人认领)并在关闭 acpi 的情况下启动。当我在旧的 acer 中安装了一个行为不良的 ralink 模块时,我也有类似的日志:将模块列入黑名单可以让我启动并停止内核恐慌,但让我无法使用 wifi。

附言。我会把所有这些都放在评论中,但我没有足够的声誉来发表评论(抱歉)。

答案3

我在配备 i5-6200U 的 Yoga710 上使用最新内核(4.7.x 到 4.8.2)时遇到了类似的问题。禁用 i2c_h2d 对我有用。我还发现 linux-lts(当前为 4.4.25)似乎运行良好,包括触摸板和触摸屏。

编辑:通过对驱动程序代码进行实验,我发现这确实是由驱动hid_sensor_hub程序引起的,因此将其列入黑名单可以解决问题,并且触摸屏也可以使用。禁用它肯定会使传感器(例如加速度计)无法识别。我尝试修复驱动程序;不过我还没有想出办法。

答案4

您需要 4.4 或更高版本的 Linux 内核才能支持 Skylake。查看 Arch Linux wiki 上的以下链接。https://wiki.archlinux.org/index.php/intel_graphics#Skylake_support

相关内容