tms*_*ont 8 boot kernel-panic linux-kernel
我知道很难隔离 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
Run Code Online (Sandbox Code Playgroud)
我在两者上都看到了同样的问题
对于 Arch——问题只是在从 U 盘启动时间歇性地出现。我设法在驱动器上的 100GB ext4 分区上安装了 Arch。该安装在启动期间间歇性地(例如 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
Run Code Online (Sandbox Code Playgroud)
kobject_create
kobject_create_and_add
load_module
__symbol_put
kernel_read
sys_finit_module
entry_SYSCALL_64_fastpath
Run Code Online (Sandbox Code Playgroud)
kmem_cache_alloc_trace
allocate_cgrp_cset_links
...
sys_write
entry_SYSCALL-64_fastpath
Run Code Online (Sandbox Code Playgroud)
Linux 也一直承诺它正在解决这个问题
修复递归错误,但需要重新启动!
我希望..
我还尝试intel-ucode
在 Arch 安装中安装该软件包。我在dmesg
日志中看到微码已更新,但不幸的是并没有解决我的问题。
可能是什么问题?如何解决?
一般保护故障消息和“检测到锁定”类型的消息通常引用 CPU。我已经看到了CPU0
,CPU1
,CPU2
并CPU3
在这些消息。似乎有什么事情导致 CPU 无法相处,就像他们都在试图清除缓存内存或其他东西的死锁中一样。
我在一些错误中看到了这一点信息:
LENOVO 80U01LENOVO YOGA710-1 BIOS OGCN20WW(v1.04) 6/30/2016
Run Code Online (Sandbox Code Playgroud)
不确定这是否有助于专业人士理解问题...
我在内核参数文档中寻找调试选项,发现maxcpus
如果我将最大 CPU 设置为 1,那么问题就会消失。因此,问题似乎是某种共享缓存内存冲突。
虽然maxcpus=1
似乎只用 1 个 CPU 就可以使系统工作,但我安装了 gnome 然后运行systemctl enable gdm.service
现在,当我重新启动时,我又恢复了所有错误,但这一次它们都发生在 CPU0 上
因此,即使使用 1 个 CPU,似乎仍有某些事情导致内存冲突。
所以使用nolapic
似乎让一切“工作”
但是通过使用nolapic
,我有效地禁用了我的其他 CPU 和 1 个工作 CPU 中的所有多线程。
我正在尝试将其用于 OpenMP,在使用 启动后nolapic
,OpenMP 和 linux 内核只能找到 1 个线程、1 个 CPU。真糟糕!
我也试过intel_idle.max_cstate=0
和1
,2
等等。但这并不能解决启动问题。
还有什么可能导致内核无法使用我的多核机器?
原来问题是 i2c_hid
这似乎是某种触摸板驱动程序。出于某种原因,当我禁用它时,我仍然可以使用我的触摸板。可能是笔记本电脑上的触摸屏也在使用这个驱动程序,因为它不起作用。
无论如何,我不喜欢用指纹弄脏我的笔记本电脑屏幕……再见i2c_hid
!
我通过将其添加到内核参数来修复它:
modprobe.blacklist=i2c_hid
虽然nolapic
也有效,但它禁用了处理器中除 1 个内核之外的所有内核。
我强烈建议其他人不要使用apci=off
或nolapic
出于这个原因。
使用这些选项是一种可能使您的机器正常工作的核武器,但您将损失大量性能和/或 I/O 设备作为附带损害。这是启动的一个很好的起点,然后你可以像我一样通过 journalctl 分析失败的启动。
祝找到这个的人好运。
归档时间: |
|
查看次数: |
3769 次 |
最近记录: |