Linux Watchdog timer看门狗机制简介

Linux Watchdog Timer是一种监测系统响应的机制,用于防止系统锁死或死机,通过计数器和阈值检测,当计数值溢出时触发重启。包括内核watchdog和userland watchdog两种机制,NMI watchdog则用于监测整个内核,通过不可屏蔽中断实现故障恢复。开启NMI watchdog可在grub.cfg中配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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)

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值