我知道很难隔离 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。我在这些消息中看到了CPU0
、CPU1
、CPU2
和。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=off
或nolapic
出于这个原因。
使用这些选项就像核武器一样,可能会让你的机器正常工作,但你会损失大量性能和/或 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