linux 内核watchdog机制

Watchdog,是内核用于检测系统CPU是否锁死的机制。一旦检测到系统CPU出现锁死的情况,watchdog会主动触发系统复位。常见的CPU锁死的情况分为soft-lockup与hard-lockup,分别对应的是线程在CPU上一直得不到调度与中断在系统中得不到响应。

硬件watchdog与软件watchdog

watchdog分为两种实现方式,一种是硬件实现,一种是软件实现。不论是硬件实现还是软件实现,最终都可以在/dev/watchdog生成watchdog的设备文件。
硬件watchdog,需要有真实的硬件设备的支撑。在一定时间内如果检测到/dev/watchdog文件没有被写入,那么驱动会通知硬件设备触发系统复位。
软件watchdog,基于内核的高精度定时器实现,触发后通过软件控制系统复位。
一个/dev/watchdog设备同一时间内只支持软件watchdog与硬件watchdog中的一个。

Soft-lockup

Soft-lockup的检测原理,是内核会在每个CPU上注册一个watchdog线程,这个线程会由内核的高精度定时器hrtimer产生时钟中断定时去唤醒处理,一旦在规定的时间阈值就内这个线程没有得到处理,会认为这个CPU被占住了得不到调度(如发生了死锁、未让出的死循环等),即发生了sof-lockup。
内核注册soft watchdog线程的方式如下。先定义soft watchdog的处理线程和线程名等信息,其中的watchdog是线程定期调用的喂沟函数,负责更新时间戳。

static struct smp_hotplug_thread watchdog_threads = {
.store = &softlockup_watchdog,
.thread_should_run = watchdog_should_run,
.thread_fn = watchdog,
.thread_comm = "watchdog/%u",
.setup = watchdog_enable,
.cleanup = watchdog_cleanup,
.park = watchdog_disable,
.unpark = watchdog_enable,
};

然后通过smpboot_register_percpu_thread接口在每个CPU上均注册一个watchdog对象。 注册后,会在CPU上创建一个watchdog线程,并调用watchdog处理。

if (!watchdog_running) {
err = smpboot_register_percpu_thread(&watchdog_threads);
if (err)
pr_err("Failed to create watchdog threads, disabled\n");
else {
if (smpboot_update_cpumask_percpu_
  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Watchdog机制是一种用于监控系统运行状态的机制。它可以通过定期检查某个对象的状态来确定系统是否正常运行,并在系统出现异常时采取相应的措施。根据引用\[2\],Watchdog机制有多种实现方式,其中包括内核Watchdog和用户空间Watchdog内核Watchdog是在操作系统内核中实现的,它通过监控一些关键指标(如中断次数、设备时间戳等)来判断系统的健康状态。当系统出现异常时,内核Watchdog会触发相应的动作,如重启系统或记录日志。 用户空间Watchdog是在用户程序中实现的,它也是通过定期检查某个对象的状态来判断系统是否正常运行。当系统出现异常时,用户空间Watchdog可以执行一些自定义的操作,如发送警报通知管理员或执行特定的恢复操作。 总的来说,Watchdog机制的基本思路是通过监控系统关键指标来判断系统的健康状态,并在系统异常时采取相应的措施。具体的实现方式可以是内核Watchdog或用户空间Watchdog。 #### 引用[.reference_title] - *1* [Watchdog机制概述](https://blog.csdn.net/weixin_30569033/article/details/97173279)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Linux Watchdog 机制](https://blog.csdn.net/vic_qxz/article/details/120888410)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值