watchdog简介

watchdog  中文意思看门狗,是Linux系统中的一个特别重要的监测响应机制,负责监测系统运行的情况,一旦出现锁死,死机的情况,能够及时的重启机器,并收集crash dump。

又称watchdog timer,是计算机可靠性(dependability)领域中一个极为简单同时非常有效的检测(detection)工具。其基本思想是针对被监视的目标设置一个计数器和一个阈值,watchdog会自己增加计数值,并等待被监视的目标周期性地重置计数值。一旦目标发生错误,没来得及重置计数值,watchdog会检测到计数值溢出,并采取恢复措施(通常情况下是重启)。总结一下就是计数——溢出——触发。

watchdog有好几种不同的机制,最主要的还是内核watchdog和userland watchdog。

无论什么样的机制,都离不开watchdog的基本思路:

  1. 系统的某一个事件会被策略设定一个阈值,这个系统会产生或者关联一个计数器来统计这个值,在watchdog一方也在同步这一个值,当两方不一样时,或者计算器上的值超过了这个阈值,watchdog的机制就会被激活。
  2. watchdog机制被激活以后,会自动通过计数器的数值来判定系统是否已经产生问题,如果结果为是,那么即马上执行watchdog中预先设定的策略或者应急预案。

Linux很早就引进了watchdog,事实上,Linux中有两套watchdog体系:The Linux Watchdog driver API和NMI watchdog

NMI watchdog是Linux的开发者为了debugging而添加的特性,但也能用来检测和恢复Linux kernel hang,现代多核x86体系都能支持NMI watchdog。NMI(Non Maskable Interrupt)即不可屏蔽中断,之所以要使用NMI,是因为NMI watchdog的监视目标是整个内核,而内核可能发生在关中断同时陷入死循环的错误,此时只有NMI能拯救它。

NMI watchdog的思想如前所述,仍然是通过计数和阈值进行监控。要打开NMI watchdog,只需要在grub.cfg中添加一句"nmi_watchdog=N",重启之后NMI watchdog就已经开启了。

APIC watchdog的工作方式比较奇葩,一旦开启了I/O APIC watchdog(nmi_watchdog=1),那么每个CPU对应的Local APIC的LINT0线都关联到NMI,这样每个CPU将周期性地接到NMI(这个周期与Local timer的周期相同),接到中断的CPU立即处理NMI。处理的过程就是检查CPU的irq_stat(统计CPU中断信息的结构体,多核系统中这将是个数组)中的apic_timer_irqs和irq0_irqs这两个字段的和,它们分别代表了当前CPU从启动到现在处理的本地时钟中断次数和全局时钟中断次数。如果这两个值的和在一定时间(在我的机子上是5秒)之内都没有增加,说明这个CPU已经连续5秒没有处理过一次时钟中断,显然,出大事了。

原文链接:watchdog机制 - 随风飘落的雨滴 - 博客园 (cnblogs.com)

声明:本文借鉴了以上链接的部分解释,感谢大佬的分享,我加以理解做了解释,如有侵权,请联系我删除,谢谢

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐