O que é um "kernel panic"?

19

O que significa quando o seu computador tem um "kernel panic" ?

Isso equivale ao BsoD do Windows ?

Além disso, quais métodos, dicas e truques estão disponíveis para o usuário quando ocorre um pânico no kernel ?

Stefan
fonte
3
Um pânico no kernel é melhor que um BSOD porque seu nome implica no que o usuário deve fazer quando isso acontecer.
Amphetamachine
Uma janela azul também fornece algumas informações, embora não seja muito útil na maioria das vezes.
10--13

Respostas:

16

O pânico do kernel é o mesmo que o BSOD e o IIRC não recuperável. No entanto, falha menor é OOPS, o que denota algum erro no kernel.

  1. Você pode usar o kexec que muda para o novo kernel em pânico (você pode ameaçá-lo como uma reinicialização rápida) - possivelmente obtendo um despejo significativo do sistema para depurar o problema
  2. Você pode usar o panicparâmetro que reinicia o kernel após n segundos. Você pode instruir o GRUB a mudar para o kernel de fallback nesse caso
  3. Use as teclas Magic SysRQ para imprimir rastreamentos de pilha, etc.
Maciej Piechotka
fonte
6
Um BSOD mais correto é um KP com uma tela de mensagem de erro muito ruim.
xenoterracide
A mágica mais notável do SysRq foi a emergency syncdescarga dos buffers (quando ainda possível).
10--13
6

Um pânico no kernel do Linux é uma chamada de sub-rotina que o kernel executa quando a lógica do kernel determina que existe uma condição que torna impossível ou irresponsável a execução contínua da lógica normal.

O kernel pode entrar em pânico quando:

  1. Ele detecta um erro de software no código ou pilha do kernel
  2. Quando há uma condição de tempo de execução, como falta de memória, sem processos executáveis
  3. Uma exceção de CPU durante a execução no modo privilegiado resulta em uma condição de opa

Existem cerca de 950 condições distintas nas quais o pânico é chamado nos kernels 3.X. A sub-rotina de pânico primeiro imprime o despejo de pilha do kernel e os registros da CPU no console. Então, se um kernel kexec de falha foi configurado, ele inicializa o kexec. Caso contrário, a rotina de pânico interrompe todos os spinlocks e executa uma reinicialização de emergência.

Um oops é uma sub-rotina chamada de um manipulador de exceções de CPU para uma exceção de CPU que ocorre durante a execução no modo privilegiado (por exemplo, kernel). A exceção pode ocorrer como resultado de um erro no código do kernel, ou devido a uma falha de hardware ou como resultado de uma condição externa que causa uma exceção específica. O manipulador da exceção imprime um log do kernel com registros da CPU e lista de módulos. Diferentemente das chamadas de pânico, a própria lógica do kernel nunca chama um oops fora do contexto dos manipuladores de exceção da CPU.

Se o kernel estiver configurado para o kexec, um oops resultará na inicialização do kexec. Caso contrário, se a exceção ocorrer durante a execução de um manipulador de interrupção, oops resultará em uma chamada de pânico do kernel. Caso contrário, se o kernel estiver configurado com “panic on oops”, oops resultará em uma chamada de pânico. Caso contrário, o kernel sai do manipulador de exceções e retoma a execução. Quando o kernel sai do manipulador de exceções e retoma a execução, a integridade do kernel é suspeita.

Os manipuladores de exceção da CPU são específicos da arquitetura. Eles geralmente são implementados em arch / * / kernel / traps.c e configurados no código de entrada do kernel específico da arquitetura que configura a tabela de interrupção. Veja por exemplo arch/powerpc/kernel/traps.ce arch/powerpc/kernel/head_fsl_booke.S.

As condições de pânico e oops do kernel podem ser configuradas para chamar uma kmsg_dumprotina que você pode usar para salvar informações de depuração de falha na RAM ou na memória flash, a menos que oops ocorram no contexto de interrupção. Nesse caso, a rotina "kmsg_dump" pode ser usada apenas para salve na RAM, não no MTD. Ao salvar na RAM, é de sua responsabilidade a) garantir que a área de RAM usada não seja substituída durante a inicialização do kexec ou a reinicialização de emergência eb) coletar a área de memória do kernel do kexec ou da lógica do carregador de inicialização.

Jonathan Ben-Avraham
fonte
5

É o comportamento inesperado do fluxo do programa (o kernel é um programa nesse caso). Em caso de pânico, o programa para de funcionar. É igual ao Windows BsoD. KP significa algo errado com o kernel ou módulos. Se é um kernel estável - veja os drivers. Se nada de especial e todos os drivers forem comuns, pode haver um problema de hardware.

Dmytro Leonenko
fonte
ou do kernel vai piquenique ..
Uray
Mesmo em um kernel estável, sempre existem alguns erros.
10--13