千家信息网

Linux内核中watchdog怎么用

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要介绍了Linux内核中watchdog怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在Linux内核中有三个watc
千家信息网最后更新 2026年11月01日Linux内核中watchdog怎么用

这篇文章主要介绍了Linux内核中watchdog怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

在Linux内核中有三个watchdog(看门狗),它们都需要被悉心的喂养照料,分别是:

\1. /dev/watchdog

2.softlockup检测机制

3.hardlockup检测机制

首先看 1./dev/watchdog,此看门狗该怎样喂养呢,linux内核中有一段样例代码:

samples/watchdog/watchdog-simple.c
1// SPDX-License-Identifier: GPL-2.0 2#include 3#include 4#include 5#include 6 7int main(void) 8{ 9 int fd = open("/dev/watchdog", O_WRONLY);10 int ret = 0;11 if (fd == -1) {12 perror("watchdog");13 exit(EXIT_FAILURE);14 } 15 while (1) {16 ret = write(fd, "\0", 1); 17 if (ret != 1) {18 ret = -1; 19 break;20 } 21 sleep(10);22 } 23 close(fd);24 return ret;25}

此例子中,每隔10秒钟就会向"/dev/watchdog" 文件写入0, 这就是喂狗过程,看到这个样例,好像不太能感受到这个看门狗大的用处,但是放在实际工程中,用处太大了,举个例子:

某国中央银行在一台有 内存4T, 320个cpu核 的Linux服务器上跑一个数据库程序,数据库上存有他本国所有人民的银行账号信息,当此数据库程序在运行过程中,发生了IO读写错误,或者程序bug, 一下卡住了,那么他本国人民就都不能存钱取钱转账了,整个国民经济瞬间瘫痪。

此时想想看,Linux系统有没有什么机制来解决这种问题了,这时候"/dev/watchdog" 来了,

这个时候只需要在数据库程序中加上类似上面的样例程序,每隔10s中就去喂狗一次,

只要数据库程序卡住,卡住之后就不能喂狗了,等到比如默认60s以后,这只狗就罢工了,立马会默认触发服务器重启。

服务器重启会重新加载数据库程序, 或者服务器在重启过程中,由于服务器与它所在的服务器集群失联,从而触发集群中的分脑检测,把数据库程序挪到集群中其它设备上跑, 此时就减少了很多损失. 所以这只狗/dev/watchdog 用处太大了。

再来看下它的实现原理:

#ps -ef | grep watchdogroot       104     2  0  2020 ?        00:00:00 [watchdogd]#ls -l /dev/watchdog*crw------- 1 root root  10, 130 Dec 30 20:04 /dev/watchdogcrw------- 1 root root 247,   0 Dec 30 20:04 /dev/watchdog0

看到系统中有个内核线程watchdogd, 和两个字符文件:/dev/watchdog和/dev/watchdog0

其中watchdogd实时调度类线程负责具体执行喂狗,/dev/watchdog是内核提供给用户层的通用操作接口文件,用来开启这只狗,喂狗,查询状态等。/dev/watchdog0 是具体的狗子实现,可以基于具体的物理设备实现,或者是softdog内核模块以软件的方式(具体使用方法:modprobe softdog)模拟硬件实现。

来看下softdog内核模块怎样模拟硬件实现这个功能:

 1static int __init softdog_init(void) 2        hrtimer_init(&softdog_ticktock, CLOCK_MONOTONIC, HRTIMER_MODE_REL); 3        softdog_ticktock.function = softdog_fire; 4 5static enum hrtimer_restart softdog_fire(struct hrtimer *timer) 6        emergency_restart(); 7 8static int softdog_ping(struct watchdog_device *w) 9        hrtimer_start(&softdog_ticktock, ktime_set(w->timeout, 0), (60s)10                      HRTIMER_MODE_REL);

从代码实现来看,很好理解,在开启看门狗(open "/dev/watchdog")之后,默认60s以后就会触发系统重启,在60s倒计时过程中,只有喂狗(softdog_ping)一次,它就又会恢复到60s以后才会触发系统重启,所以只要一直喂狗,emergency_restart()就不会执行,系统就不会重启。

再来看下 2.softlockup检测机制 和 3.hardlockup检测机制。

softlockup检测机制的喂狗方式是,每cpu上的hrtimer会唤醒一个migration/N内核线程,migration/N每次被唤醒之后都会对某个时间戳进行重置。

hardlockup检测机制的喂狗方式是,hrtimer每次执行时都会对一个变量进行加一。


感谢你能够认真阅读完这篇文章,希望小编分享的"Linux内核中watchdog怎么用"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

内核 程序 数据 数据库 机制 检测 服务器 服务 系统 篇文章 过程 文件 方式 用处 线程 集群 人民 代码 例子 模块 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 天津市摩尔互联网科技 科技互联网产品 互联网科技行业发展 互联网科技与金融科技 互联网的科技创新 万易互联网科技有限公司 浩特互联网科技 未来的互联网科技 互联网科技美容 中国互联网有什么科技含量 互联网科技公司实习生 呼和浩特新华互联网科技学院 卓翼科技产业互联网合作 无锡工业互联网科技有限公司 元气玛特互联网科技公司是外包吗 本届互联网大会上的黑科技 下一代互联网重大应用科技园 抖集互联网科技技术咨询 普陀区互联网教育科技管理办法 互联网科技创业有什么好项目 华服互联网科技靠谱吗 南京欣网互联网络科技有限公司 华服互联网科技怎么样 上海互联网科技有限公司 百单互联网科技有限公司 狮子座互联网科技培训 互联网科技视频素材 中国互联网金融科技基金 汽车互联网创新科技园 河南猎农互联网科技有限公司
0