Reinicie no congelamento de hardware

1

SO: Ubuntu Desktop 12.04

Como posso ter certeza de que, mesmo que o kernel tenha um nível muito baixo, uma falha massiva, o sistema será reinicializado? Ou, se isso for impossível, qual é o melhor congelamento para reiniciar a cobertura que pode ser obtida?

Existe alguma maneira que eu possa aproveitar timers baseados em hardware ou interrupções para forçar uma reinicialização?

Eu preferiria soluções que funcionassem em hardware genérico e barato.

Pergunta de bônus: Você recomendaria isso como uma solução padrão / estoque?

Mais uma ilustração:

Digamos que eu esteja experimentando o que parece ser um nível muito baixo. (Nem mesmo as chaves mágicas do SysRq funcionam)

Eu não consigo usar o ssh na máquina, mas parece que o handshake do tcp foi bem-sucedido. (estranho? Tem uma falha de instrumentação, certo?)

Isso pode ser devido a memória ruim ou superaquecimento, mas vamos dizer, no momento, que não estou muito preocupado com a causa imediata e, em vez disso, estou mais preocupado em maximizar o tempo de atividade de curto prazo. (Embora eu reconheça plenamente que entender a causa é a melhor maneira de evitar que isso aconteça a longo prazo)

Pesquisa:

No momento, estou investigando: link Não estou convencido de que estou realmente em pânico, pois não há indicadores visuais.

Isso parece ser o que eu quero: link No entanto, parece contar com um /dev/watchdog que meu sistema não parece ter. Estou faltando alguma coisa?

Se eu seguir as verificações aqui: link parece que o NMI está trabalhando no meu sistema, no entanto ele não reinicializou o sistema em caso de falha. O que estou perdendo aqui?

Obrigado

    
por Dave Butler 15.04.2014 / 01:03

1 resposta

2

Se a sua máquina não vem acompanhada de um watchdog de hardware, ainda existem vários mecanismos de kernel baseados em software, que podem funcionar para você. Primeiro de tudo, há uma implementação de watchdog de software chamada softdog , que pode ser usada com watchdog como um watchdog de hardware real. Você pode testar se seu kernel suporta um watchdog de software testando se modprobe softdog carrega o módulo do kernel. Isso também lhe daria /dev/watchdog . Se o seu kernel não oferece suporte para softdog você teria que construir seu próprio kernel e ativar CONFIG_SOFT_WATCHDOG :

config SOFT_WATCHDOG
     tristate "Software watchdog"
     select WATCHDOG_CORE
     help
       A software monitoring watchdog. This will fail to reboot your system
       from some situations that the hardware watchdog will recover
       from. Equally it's a lot cheaper to install.

       To compile this driver as a module, choose M here: the
       module will be called softdog.

Um outro mecanismo fornecido pelo kernel é o Hangcheck Timer , ativado pela opção CONFIG_HANGCHECK_TIMER :

config HANGCHECK_TIMER
     tristate "Hangcheck timer"
     depends on X86 || IA64 || PPC64 || S390
     help
       The hangcheck-timer module detects when the system has gone
       out to lunch past a certain margin.  It can reboot the system
       or merely print a warning.

Também (pelo menos em x86) existe o NMI Lockup Detector como um terceiro mecanismo para reinicializar automaticamente o seu sistema em travamentos:

config LOCKUP_DETECTOR
     bool "Detect Hard and Soft Lockups"
     depends on DEBUG_KERNEL && !S390
     help
       Say Y here to enable the kernel to act as a watchdog to detect
       hard and soft lockups.

       Softlockups are bugs that cause the kernel to loop in kernel
       mode for more than 20 seconds, without giving other tasks a
       chance to run.  The current stack trace is displayed upon
       detection and the system will stay locked up.

       Hardlockups are bugs that cause the CPU to loop in kernel mode
       for more than 10 seconds, without letting other interrupts have a
       chance to run.  The current stack trace is displayed upon detection
       and the system will stay locked up.

       The overhead should be minimal.  A periodic hrtimer runs to
       generate interrupts and kick the watchdog task every 4 seconds.
       An NMI is generated every 10 seconds or so to check for hardlockups.

       The frequency of hrtimer and NMI events and the soft and hard lockup
       thresholds can be controlled through the sysctl watchdog_thresh.

config HARDLOCKUP_DETECTOR
     def_bool y
     depends on LOCKUP_DETECTOR && !HAVE_NMI_WATCHDOG
     depends on PERF_EVENTS && HAVE_PERF_EVENTS_NMI

Não se assuste com a dependência de DEBUG_KERNEL , pois isso é possível na maioria dos kernels de distribuição.

Observação: Como tudo isso é um mecanismo de software, não há garantia de que eles detectarão travamentos de todos . Como o texto de ajuda para SOFT_WATCHDOG já menciona, há situações em que todos não serão recuperados. Mas a reinicialização em muitas situações é, no mínimo, melhor do que pendurar todas delas. ;)

    
por 15.04.2014 / 01:30