调试故障硬件

调试故障硬件

我姐姐有一台笔记本电脑,在 Windows 环境下总是崩溃(蓝屏)(硬件相对较新且最新)。当时她将 Windows 的转储文件发送给戴尔,戴尔派了一名工程师更换了主板,但在使用许多不同内核设置了多个不同版本的 Ubuntu 后,崩溃问题仍未消失。

因此,我决定采取行动,以找到问题的确切原因,我安装并配置了 linux-crashdump 包 (kdump-tools),以使用 kexec 自动启动崩溃内核,该内核会生成内存转储文件并存储 dmesg 输出。我还安装了 crash、kernel-image-generic-dbgsym 和 mcelog,以便收集尽可能多的信息。

因此笔记本电脑崩溃了,崩溃内核成功生成了一个转储文件并存储了 dmesg 输出。我还检查了 /var/log/mcelog,但该文件完全是空的,尽管守护进程在崩溃前正在运行,这很奇怪,但毕竟我们仍然有 dmesg 输出,其中显示:

[ 3933.364173] mce: [Hardware Error]: CPU 4: Machine Check Exception: 5 Bank 3: be00000000200135
[ 3933.364177] mce: [Hardware Error]: RIP !INEXACT! 10:<ffffffff8171d9c2> {_raw_spin_lock+0x12/0x50}
[ 3933.364182] mce: [Hardware Error]: TSC a0255fbd7f7 ADDR 42dd14480 MISC d62285 
[ 3933.364185] mce: [Hardware Error]: PROCESSOR 0:306a9 TIME 1398357146 SOCKET 0 APIC 1 microcode 15
[ 3933.364186] mce: [Hardware Error]: Run the above through 'mcelog --ascii'
[ 3933.364188] mce: [Hardware Error]: CPU 0: Machine Check Exception: 5 Bank 3: be00000000200135
[ 3933.364190] mce: [Hardware Error]: RIP !INEXACT! 33:<0000045a7992c1b5> 
[ 3933.364191] mce: [Hardware Error]: TSC a0255fbd7f0 ADDR 42dd14480 MISC d62285 
[ 3933.364194] mce: [Hardware Error]: PROCESSOR 0:306a9 TIME 1398357146 SOCKET 0 APIC 0 microcode 15
[ 3933.364195] mce: [Hardware Error]: Run the above through 'mcelog --ascii'
[ 3933.364196] mce: [Hardware Error]: Machine check: Processor context corrupt
[ 3933.364197] Kernel panic - not syncing: Fatal Machine check

所以我的第一个问题是,关于“通过‘mcelog --ascii’运行上述操作”...我到底应该在那里运行什么以及如何运行?我尝试过例如:

[ 3933.364173] mce: [Hardware Error]: CPU 4: Machine Check Exception: 5 Bank 3: be00000000200135 | sudo mcelog --ascii

它什么也没返回。那么我在这里应该做什么呢?

我也跑了

crash  /usr/lib/debug/boot/vmlinux<kernelversion> /path/to/crashdump/file

正如预期的那样,它启动了程序,然后我输入了bt生成回溯的信息,得到了:

PID: 0      TASK: ffff8804177617f0  CPU: 6   COMMAND: "swapper/6"
 #0 [ffff88042dd89ca0] machine_kexec at ffffffff8104a732
 #1 [ffff88042dd89cf0] crash_kexec at ffffffff810e6ab3
 #2 [ffff88042dd89db8] panic at ffffffff8170ec6c
 #3 [ffff88042dd89e30] mce_panic at ffffffff8103687a
 #4 [ffff88042dd89e70] do_machine_check at ffffffff81038684
 #5 [ffff88042dd89f50] machine_check at ffffffff8171e25f
    [exception RIP: intel_idle+216]
    RIP: ffffffff813dfd78  RSP: ffff88041775de28  RFLAGS: 00000046
    RAX: 0000000000000001  RBX: 0000000000000002  RCX: 0000000000000001
    RDX: 0000000000000000  RSI: ffffffff81c93220  RDI: 0000000000000006
    RBP: ffff88041775de50   R8: ffff88042dd912d0   R9: 000000000000001c
    R10: 0000000000000320  R11: 0000000000000249  R12: 0000000000000002
    R13: 0000000000000001  R14: 0000000000000001  R15: ffffffff81c932e8
    ORIG_RAX: ffffffffffffffff  CS: 0010  SS: 0018
--- <MCE exception stack> ---
 #6 [ffff88041775de28] intel_idle at ffffffff813dfd78
 #7 [ffff88041775de58] cpuidle_enter_state at ffffffff815c9570
 #8 [ffff88041775de90] cpuidle_idle_call at ffffffff815c96a9
 #9 [ffff88041775ded0] arch_cpu_idle at ffffffff8101ceae
#10 [ffff88041775dee0] cpu_startup_entry at ffffffff810beb85
#11 [ffff88041775df30] start_secondary at ffffffff81040fc8

总而言之,我想知道如何调用mcelogdmesg 输出,以及可能采取哪些其他步骤来获取尽可能多的有关问题的信息/找到故障组件,以便我可以联系硬件供应商,并对问题所在有一个合理的猜测。

我知道 memcheck 如何帮助我高度预测 RAM 不是原因所在。

编辑:我已经找到了如何正确地将输出传递给 mcelog 的方法:将“通过‘mcelog --ascii’运行上述操作”之前的输出行放在一个文件中,然后mcelog使用

sudo mcelog --ascii < file 

可以看到,“通过‘mcelog --ascii’运行上述操作”消息在 dmesg 文件中打印了两次,因此我调用了 mcelog 两次,以“CPU:”开头,以消息前的行结束(我保留了 dmesg 中的内容,例如“[ 3933.364173] mce:[硬件错误]:”)。

所以mcelog告诉我:

Hardware event. This is not a software error.
CPU 4 BANK 3 TSC a0255fbd7f7 
RIP !INEXACT! 10:ffffffff8171d9c2
MISC d62285 ADDR 42dd14480 
TIME 1398357146 Thu Apr 24 18:32:26 2014
MCG status:RIPV MCIP 
MCi status:
Uncorrected error
Error enabled
MCi_MISC register valid
MCi_ADDR register valid
Processor context corrupt
MCA: Data CACHE Level-1 Data-Read Error
STATUS be00000000200135 MCGSTATUS 5
CPUID Vendor Intel Family 6 Model 58
RIP: _raw_spin_lock+0x12/0x50}                                                        
SOCKET 0 APIC 1 microcode 15 

Hardware event. This is not a software error.                                                                         
CPU 0 BANK 3 TSC a0255fbd7f0 
RIP !INEXACT! 33:45a7992c1b5
MISC d62285 ADDR 42dd14480 
TIME 1398357146 Thu Apr 24 18:32:26 2014
MCG status:RIPV MCIP 
MCi status:
Uncorrected error
Error enabled
MCi_MISC register valid
MCi_ADDR register valid
Processor context corrupt
MCA: Data CACHE Level-1 Data-Read Error
STATUS be00000000200135 MCGSTATUS 5
CPUID Vendor Intel Family 6 Model 58
SOCKET 0 APIC 0 microcode 15

所以假设主板没问题(因为已经更换了),并且 RAM 也没问题,那么就只有 CPU 会出问题了,对吗?有谁知道给出的所有输出吗?

答案1

很好地选择了你所使用的仪器,这正是解决此类问题的方法。

crash dump 需要 Linux 调试符号,每个内核大约 600MB,这就是为什么默认情况下不安装它们的原因。下面介绍如何安装和使用这些符号调用 crash。

https://wiki.ubuntu.com/Kernel/CrashdumpRecipe

现在对我而言对您的机器检查进行深入分析有点晚了,但我的第一印象是 CPU 或主内存上的缓存受到了损害。

我要求提供全面保修更换。

如果这不可能,就换掉内存,这是一种廉价的测试,如果问题仍然存在,您可以相当肯定 CPU 是问题根源。此时,我会认真考虑更换 CPU 和购买新电脑之间的权衡。

相关内容