Determinando a causa do pânico do kernel do Linux

24

Estou usando um derivativo do Ubuntu 12.04 (amd64) e tenho tido problemas muito estranhos recentemente. Fora do azul, aparentemente, o X irá congelar completamente por um tempo (1-3 minutos) e, em seguida, o sistema será reinicializado. Este sistema é overclock, mas muito estável como verificado no Windows, o que me leva a acreditar que estou tendo um pânico do kernel ou um problema com um dos meus módulos. Mesmo no Linux, eu posso rodar o LINPACK e não vejo um travamento, apesar de colocar uma carga ridícula no processador. Crashes parecem acontecer em momentos aleatórios, mesmo quando a máquina está parada.

Como posso depurar o que está causando falha no sistema?

Em um palpite de que pode ser o driver proprietário da NVIDIA, eu reverti todo o caminho até a versão estável do driver, versão 304 e ainda experimento o travamento.

Alguém pode me guiar por um bom procedimento de depuração depois de uma falha? Eu ficaria mais do que feliz em iniciar em um pen drive e postar todos os meus arquivos de configuração pós-crash, eu não tenho certeza do que eles seriam. Como posso descobrir o que está causando problemas no meu sistema?

Aqui está um monte de registros, os culpados usuais.

.xsession-errors : link

/var/log/Xorg.0.log : link

/var/log/kern.log : link

/ var / log / syslog : link

Eu não consigo nem encontrar um registro do acidente.

Acionar a falha não é tão simples, parece acontecer quando a GPU está tentando desenhar várias coisas ao mesmo tempo. Se eu colocar um vídeo do YouTube em tela cheia e deixá-lo repetir por um tempo ou rolar uma tonelada de GIFs e uma notificação do Skype aparecer, às vezes ele irá falhar. Totalmente coçando minha cabeça neste.

A CPU é overclockada para 4.8GHz, mas é completamente estável e sobreviveu a enormes execuções de LINPACK e 9 horas de Prime95 ontem sem um único travamento.

Atualizar

Eu instalei kdump , crash e linux-crashdump , assim como os símbolos de depuração do kernel para minha versão do kernel 3.2.0-35. Quando executo apport-unpack no arquivo de kernel danificado e, em seguida, crash no despejo de memória VmCore , aqui está o que eu vejo:

      KERNEL: /usr/lib/debug/boot/vmlinux-3.2.0-35-generic
    DUMPFILE: Downloads/crash/VmCore
        CPUS: 8
        DATE: Thu Jan 10 16:05:55 2013
      UPTIME: 00:26:04
LOAD AVERAGE: 2.20, 0.84, 0.49
       TASKS: 614
    NODENAME: mightymoose
     RELEASE: 3.2.0-35-generic
     VERSION: #55-Ubuntu SMP Wed Dec 5 17:42:16 UTC 2012
     MACHINE: x86_64  (3499 Mhz)
      MEMORY: 8 GB
       PANIC: "[ 1561.519960] Kernel panic - not syncing: Fatal Machine check"
         PID: 0
     COMMAND: "swapper/5"
        TASK: ffff880211251700  (1 of 8)  [THREAD_INFO: ffff880211260000]
         CPU: 5
       STATE: TASK_RUNNING (PANIC)

Quando executo log do utilitário crash , vejo isso na parte inferior do log:

[ 1561.519943] [Hardware Error]: CPU 4: Machine Check Exception: 5 Bank 3: be00000000800400
[ 1561.519946] [Hardware Error]: RIP !INEXACT! 33:<00007fe99ae93e54> 
[ 1561.519948] [Hardware Error]: TSC 539b174dead ADDR 3fe98d264ebd MISC 1 
[ 1561.519950] [Hardware Error]: PROCESSOR 0:206a7 TIME 1357862746 SOCKET 0 APIC 1 microcode 28
[ 1561.519951] [Hardware Error]: Run the above through 'mcelog --ascii'
[ 1561.519953] [Hardware Error]: CPU 0: Machine Check Exception: 4 Bank 3: be00000000800400
[ 1561.519955] [Hardware Error]: TSC 539b174de9d ADDR 3fe98d264ebd MISC 1 
[ 1561.519957] [Hardware Error]: PROCESSOR 0:206a7 TIME 1357862746 SOCKET 0 APIC 0 microcode 28
[ 1561.519958] [Hardware Error]: Run the above through 'mcelog --ascii'
[ 1561.519959] [Hardware Error]: Machine check: Processor context corrupt
[ 1561.519960] Kernel panic - not syncing: Fatal Machine check
[ 1561.519962] Pid: 0, comm: swapper/5 Tainted: P   M     C O 3.2.0-35-generic #55-Ubuntu
[ 1561.519963] Call Trace:
[ 1561.519964]  <#MC>  [<ffffffff81644340>] panic+0x91/0x1a4
[ 1561.519971]  [<ffffffff8102abeb>] mce_panic.part.14+0x18b/0x1c0
[ 1561.519973]  [<ffffffff8102ac80>] mce_panic+0x60/0xb0
[ 1561.519975]  [<ffffffff8102aec4>] mce_reign+0x1f4/0x200
[ 1561.519977]  [<ffffffff8102b175>] mce_end+0xf5/0x100
[ 1561.519979]  [<ffffffff8102b92c>] do_machine_check+0x3fc/0x600
[ 1561.519982]  [<ffffffff8136d48f>] ? intel_idle+0xbf/0x150
[ 1561.519984]  [<ffffffff8165d78c>] machine_check+0x1c/0x30
[ 1561.519986]  [<ffffffff8136d48f>] ? intel_idle+0xbf/0x150
[ 1561.519987]  <<EOE>>  [<ffffffff81509697>] ? menu_select+0xe7/0x2c0
[ 1561.519991]  [<ffffffff815082d1>] cpuidle_idle_call+0xc1/0x280
[ 1561.519994]  [<ffffffff8101322a>] cpu_idle+0xca/0x120
[ 1561.519996]  [<ffffffff8163aa9a>] start_secondary+0xd9/0xdb

bt exibe o backtrace:

PID: 0      TASK: ffff880211251700  CPU: 5   COMMAND: "swapper/5"
 #0 [ffff88021ed4aba0] machine_kexec at ffffffff8103947a
 #1 [ffff88021ed4ac10] crash_kexec at ffffffff810b52c8
 #2 [ffff88021ed4ace0] panic at ffffffff81644347
 #3 [ffff88021ed4ad60] mce_panic.part.14 at ffffffff8102abeb
 #4 [ffff88021ed4adb0] mce_panic at ffffffff8102ac80
 #5 [ffff88021ed4ade0] mce_reign at ffffffff8102aec4
 #6 [ffff88021ed4ae40] mce_end at ffffffff8102b175
 #7 [ffff88021ed4ae70] do_machine_check at ffffffff8102b92c
 #8 [ffff88021ed4af50] machine_check at ffffffff8165d78c
    [exception RIP: intel_idle+191]
    RIP: ffffffff8136d48f  RSP: ffff880211261e38  RFLAGS: 00000046
    RAX: 0000000000000020  RBX: 0000000000000008  RCX: 0000000000000001
    RDX: 0000000000000000  RSI: ffff880211261fd8  RDI: ffffffff81c12f00
    RBP: ffff880211261e98   R8: 00000000fffffffc   R9: 0000000000000f9f
    R10: 0000000000001e95  R11: 0000000000000000  R12: 0000000000000003
    R13: ffff88021ed5ac70  R14: 0000000000000020  R15: 12d818fb42cfe42b
    ORIG_RAX: ffffffffffffffff  CS: 0010  SS: 0018
--- <MCE exception stack> ---
 #9 [ffff880211261e38] intel_idle at ffffffff8136d48f
#10 [ffff880211261ea0] cpuidle_idle_call at ffffffff815082d1
#11 [ffff880211261f00] cpu_idle at ffffffff8101322a

Alguma idéia?

    
por Naftuli Kay 07.01.2013 / 22:15

5 respostas

33

Eu tenho duas sugestões para começar.

A primeira que você não vai gostar. Não importa quão estável você acha que seu sistema com overclock é, seria meu primeiro suspeito. E qualquer desenvolvedor que você reportar o problema dirá a mesma coisa. Sua carga de trabalho de teste estável não está necessariamente usando as mesmas instruções, enfatizando muito o subsistema de memória, seja qual for. Pare de overclock. Se você quer que as pessoas acreditem que o problema não é overclock, então faça acontecer quando não estiver fazendo overclock, para que você possa obter um relatório de bug limpo. Isso fará uma enorme diferença em quanto esforço outras pessoas investirão na solução desse problema. Ter software livre de bugs é um ponto de orgulho, mas os relatórios de pessoas com configurações de hardware particularmente questionáveis são frustrantes que provavelmente não envolvem um bug real.

O segundo é pegar os dados oops, que, como você percebeu, não vai para nenhum dos lugares que você mencionou. Se o travamento acontece apenas durante a execução do X11, acho que o console local está bem fora (é uma dor de qualquer maneira), então você precisa fazer isso em um console serial, pela rede ou salvando em disco local (o que é mais complicado do que pode parecer porque você não quer que um kernel não confiável corrompa seu sistema de arquivos). Aqui estão algumas maneiras de fazer isso:

  • use netdump para salvar em um servidor pela rede. Eu não faço isso há anos, então eu não tenho certeza se este software ainda está por aí e trabalhando com kernels modernos, mas é fácil o suficiente para valer a pena.
  • inicializar usando um console serial ; você precisará de uma porta serial livre em ambas as máquinas (seja uma velha escola ou um adaptador serial USB) e um cabo de modem nulo; você configuraria a outra máquina para salvar a saída.
  • O kdump parece ser o que as crianças legais usam hoje em dia, e parece bastante flexível, embora não fosse Não seja minha preferência, porque parece complexo para configurar. Em suma, envolve a inicialização de um kernel diferente que pode fazer qualquer coisa e inspecionar o conteúdo da memória do kernel anterior, mas você tem que essencialmente construir todo o processo e não vejo muitas opções enlatadas por aí. Atualização: Na verdade, existem algumas coisas boas na distribuição; no Ubuntu, linux-crashdump

Depois de obter as informações de depuração, há uma ferramenta chamada ksymoops que pode ser usada para transformar os endereços em nomes de símbolos e comece a ter uma ideia de como seu kernel travou. E se o despejo simbolizado não significa nada para você, pelo menos isso é algo útil para relatar aqui ou talvez na lista de discussão / rastreador de bugs da sua distribuição Linux.

A partir de crash no seu crashdump, você pode tentar digitar log e bt para obter um pouco mais de informação (coisas registradas durante o pânico e um backtrace de pilha). Seu Fatal Machine check parece estar vindo de aqui , embora. Ao analisar o código, seu processador relatou uma Exceção de verificação de máquina - um problema de hardware. Mais uma vez, minha primeira aposta seria devido ao overclocking. Parece que pode haver uma mensagem mais específica na saída log que poderia lhe dizer mais.

Também a partir desse código, parece que se você inicializar com o parâmetro mce=3 kernel, ele parará de funcionar ... mas eu não recomendaria isso, exceto como uma etapa de diagnóstico. Se o kernel do Linux acha que vale a pena perder esse erro, provavelmente está certo.

    
por 10.01.2013 / 21:20
5

a) Verifique se as mensagens do kernel estão sendo registradas em um arquivo pelo daemon rsyslog

vi /etc/rsyslog.conf

E adicione o seguinte

kern.*                 /var/log/kernel.log

Reinicie o serviço rsyslog .

/etc/initd.d/rsyslog restart

b) Anote os módulos carregados

'lsmod >/your/home/dir'

c) Como o pânico não é reproduzível, espere que isso aconteça

d) Uma vez que o pânico tenha ocorrido, inicialize o sistema usando um CD ao vivo ou de emergência

e) Monte os sistemas de arquivos (geralmente / será suficiente se / var e / home não forem sistemas de arquivos separados) do sistema afetado ( pvs , vgs , lvs comandos precisam ser executados se você estiver usando LVM no sistema afetado para trazer o LV) mount -t ext4 /dev/sdXN /mnt

f) Vá para o diretório /mnt/var/log/ e verifique o arquivo kernel.log . Isso deve fornecer informações suficientes para descobrir se o pânico está acontecendo em um módulo específico ou em outra coisa.

    
por 10.01.2013 / 20:05
2

O seu processador está com overclock? Eu tive esse mesmo problema hoje quando eu estava jogando com o multiplicador no menu over-clocking no meu BIOS; vários multiplicadores em torno de 20x causariam isso. Reduzi para 18,5x (3,7GHz) e o problema desapareceu; Eu acho que foi uma questão de motherboard / power.

    
por 11.05.2013 / 06:25
1

Mais definitivamente um problema no processador, observe as linhas que dizem: TSC 539b174dead ADDR 3fe98d264ebd MISC 1 [1561.519950] [Erro de Hardware]: PROCESSADOR 0: 206a7 TEMPO 1357862746 SOCKET 0 Microcódigo APIC 1 28. O processador 0 significa seu processador principal (embora eu suponha que você tenha apenas 1). Ou é ruim ou, como você observou, causa de falhas no overclock. Eu sei que você disse que o levou até o prime95, mas como não tenho mais informações sobre a idade do sistema, estou pegando alguns canudos, como está sua pasta térmica, e você verificou se o seu LGA (sob o CPU) parece bem? Estou pensando em talvez pinos tortos ou algum colar sob o LGA. Novamente, só estou causando raiz aqui.

    
por 04.08.2018 / 16:16
0

Tivemos um roteador mikrotik instalado em um equipamento antigo. A ventoinha parou de girar e fez com que o processador esquentasse. O roteador então começa a Kernel Panic de vez em quando. Depois de mudar o ventilador da CPU tudo correu bem.

Como você está fazendo overclock na sua máquina, isso pode ser uma possível causa.

    
por 01.02.2013 / 15:41