Linux Watchdog timer看门狗机制简介
watchdog简介watchdog 中文意思看门狗,是Linux系统中的一个特别重要的监测响应机制,负责监测系统运行的情况,一旦出现锁死,死机的情况,能够及时的重启机器,并收集crash dump。又称watchdogtimer,是计算机可靠性(dependability)领域中一个极为简单同时非常有效的检测(detection)工具。其基本思想是针对被监视的目标设置一个计数器和一个阈值,wat
watchdog简介
watchdog 中文意思看门狗,是Linux系统中的一个特别重要的监测响应机制,负责监测系统运行的情况,一旦出现锁死,死机的情况,能够及时的重启机器,并收集crash dump。
又称watchdog timer,是计算机可靠性(dependability)领域中一个极为简单同时非常有效的检测(detection)工具。其基本思想是针对被监视的目标设置一个计数器和一个阈值,watchdog会自己增加计数值,并等待被监视的目标周期性地重置计数值。一旦目标发生错误,没来得及重置计数值,watchdog会检测到计数值溢出,并采取恢复措施(通常情况下是重启)。总结一下就是计数——溢出——触发。
watchdog有好几种不同的机制,最主要的还是内核watchdog和userland watchdog。
无论什么样的机制,都离不开watchdog的基本思路:
- 系统的某一个事件会被策略设定一个阈值,这个系统会产生或者关联一个计数器来统计这个值,在watchdog一方也在同步这一个值,当两方不一样时,或者计算器上的值超过了这个阈值,watchdog的机制就会被激活。
- 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)
声明:本文借鉴了以上链接的部分解释,感谢大佬的分享,我加以理解做了解释,如有侵权,请联系我删除,谢谢
更多推荐
所有评论(0)