web-dev-qa-db-ja.com

障害のあるハードウェアをデバッグする

私の妹は、Windowsの時間中に常にクラッシュするラップトップを持っています(ブルースクリーン)(ハードウェアは比較的新しく、最新です)。当時、彼女はダンプファイルをWindowsからDellに送り、Dellはマザーボードを変更したエンジニアを送りましたが、それでも多くの異なるカーネルを使用して多くの異なるバージョンでUbuntuをセットアップした後、パニックはなくなりませんでした。

そこで、問題の正確な原因を見つけるために行動を起こすことにしました。メモリのダンプファイルを生成し、保存するkexecを使用してクラッシュカーネルを自動的に開始するようにlinux-crashdumpパッケージ(kdump-tools)をインストールおよび構成しましたdmesg出力。また、可能な限り多くの情報を収集するために、クラッシュ、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

要約すると、dmesg出力でmcelogを呼び出す方法と、問題に関するできるだけ多くの情報を取得し、障害のあるコンポーネントを見つけるために他に実行する可能性のある手順を知ることができます。すでに経験のある推測が間違っているハードウェアベンダーに連絡できること。

Memcheckを使用すると、RAMが原因ではないと高い確率で予測することができます。

EDIT:出力をmcelogに正しく渡す方法を見つけました。ファイルの「上記を 'mcelog --ascii'で実行」の前に出力行を配置し、mcelogを呼び出します。と

Sudo mcelog --ascii < file 

「上記を「mcelog --ascii」で実行」メッセージがdmesgファイルに2回出力されることがわかります。そのため、「CPU:」で始まり、メッセージの前の行で終わるmcelogを2回呼び出しました。 「[3933.364173] mce:[ハードウェアエラー]:」のようなdmesgのもの)。

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だけがトラブルメーカーになります。与えられたすべての出力に精通している人はいますか?

4
GEO

選択した計装に適しています。これがまさにこのような問題を解決する方法です。

クラッシュダンプには、カーネルあたり約600MBのLinuxデバッグシンボルが必要であるため、デフォルトではインストールされません。シンボルを使用してクラッシュをインストールして呼び出す方法を次に示します。

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

現時点では、マシンチェックの詳細な分析を行うのは少し遅れていますが、最初の印象は、CPUのキャッシュまたはメインメモリのいずれかが危険にさらされているということです。

私は完全な保証交換を要求します。

それが不可能な場合は、安価なテストであるRAMを交換し、問題が解決しない場合は、CPUがソースであると合理的に確信できます。その時点で、CPUを新しいコンピューターのコストに置き換えることのトレードオフを真剣に検討します。

2
ppetraki