0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux内核中有三个watchdog

Linux阅码场 来源:Linuxer 作者:Linuxer 2021-01-14 09:15 次阅读

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

1. /dev/watchdog

2.softlockup检测机制

3.hardlockup检测机制

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

pIYBAF__m46AJDUrAABmxI1OPdA311.png

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

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

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

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

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

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

再来看下它的实现原理:

pIYBAF__m6qAYrz7AAAcv44TA2U118.png

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

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

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

pIYBAF__m8KAShblAABEmHNhhos553.png

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

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

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

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

关于softlockup和hardlockup检测机制的具体原理实现和应用场景,我最近发布了一个视频“Linux常见锁和lockup检查机制"包含了从实现原理(linux内核代码层)和原理验证(使用ftrace调试手段)、样例代码、动手模拟实验,可以全方位理解softlockup/hardlockup.

责任编辑:lq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    11199

    浏览量

    208689
  • 代码
    +关注

    关注

    30

    文章

    4719

    浏览量

    68209
  • Watchdog
    +关注

    关注

    0

    文章

    11

    浏览量

    9402

原文标题:总结Linux内核中watchdog

文章出处:【微信号:LinuxDev,微信公众号:Linux阅码场】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    双向晶闸管的三个电极分别是什么作用

    双向晶闸管(Bidirectional Thyristor),也称为双向可控硅或双向可控整流器,是一种四层端半导体器件,具有两方向的导电能力。它在电力电子领域中有着广泛的应用,如交流/直流
    的头像 发表于 10-08 09:28 362次阅读

    linux驱动程序如何加载进内核

    Linux系统中,驱动程序是内核与硬件设备之间的桥梁。它们允许内核与硬件设备进行通信,从而实现对硬件设备的控制和管理。 驱动程序的编写 驱动程序的编写是Linux驱动开发的基础。在编
    的头像 发表于 08-30 15:02 336次阅读

    Linux内核测试技术

    Linux 内核Linux操作系统的核心部分,负责管理硬件资源和提供系统调用接口。随着 Linux 内核的不断发展和更新,其复杂性和代码规
    的头像 发表于 08-13 13:42 403次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>内核</b>测试技术

    对称相电压的特点是哪三个方面

    对称相电压是电力系统中常见的一种电压形式,它具有三个相位,每个相位之间的相位差为120度。对称相电压在工业生产和日常生活中有着广泛的应用,如电动机、变压器、发电机等。本文将从
    的头像 发表于 08-12 18:18 789次阅读

    可调变阻器三个引脚怎么区分

    可调变阻器,也称为电位器或可变电阻器,是一种可以调节电阻值的电子元件。它广泛应用于各种电子设备中,如音频设备、电源管理、电机控制等。可调变阻器有三个引脚,分别是固定端、滑动端和可调端。这三个引脚
    的头像 发表于 07-24 11:12 761次阅读

    微波测量的三个基本参量是什么

    微波测量是电子工程领域中的一重要分支,它涉及到对微波信号的频率、幅度、相位等参数的测量。在微波测量中,有三个基本参量:频率、幅度和相位。这三个参量是微波信号的基本特征,对于微波系统的设计、调试
    的头像 发表于 05-28 14:46 998次阅读

    如何判断极管的三个极性

    极管是电子电路中的基本元件之一,其性能的好坏直接影响到整个电路的性能。而判断极管的三个极性(基极b、发射极e、集电极c)是电路分析和设计中不可或缺的一步。下面将详细介绍判断极管
    的头像 发表于 05-21 15:26 5242次阅读

    篱笆三个桩——记晶体极管的发明

    篱笆三个桩——记晶体极管的发明
    的头像 发表于 05-12 08:14 611次阅读
    一<b class='flag-5'>个</b>篱笆<b class='flag-5'>三个</b>桩——记晶体<b class='flag-5'>三</b>极管的发明

    使用 PREEMPT_RT 在 Ubuntu 中构建实时 Linux 内核

    的实时内核补丁来完成。简介我们曾介绍过在Ubuntu22.04中启用实时Linux内核有多简单,因为Canonical已将该内核列为一选项
    的头像 发表于 04-12 08:36 2066次阅读
    使用 PREEMPT_RT 在 Ubuntu 中构建实时 <b class='flag-5'>Linux</b> <b class='flag-5'>内核</b>

    Linux内核内存管理架构解析

    内存管理子系统可能是linux内核中最为复杂的一子系统,其支持的功能需求众多,如页面映射、页面分配、页面回收、页面交换、冷热页面、紧急页面、页面碎片管理、页面缓存、页面统计等,而且对性能也有很高
    的头像 发表于 01-04 09:24 618次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>内核</b>内存管理架构解析

    获取Linux内核源码的方法

    关键功能,今天小编就给各位小伙伴介绍一下如何获取Linux内核源码。获取Linux内核源码的渠道Linux有一
    的头像 发表于 12-13 09:49 605次阅读
    获取<b class='flag-5'>Linux</b><b class='flag-5'>内核</b>源码的方法

    linux关机的三个命令

    Linux系统中,常用的关机命令有三个:shutdown、poweroff和halt。下面是对这三个命令的详细解释: shutdown命令 shutdown命令用于在指定的时间或条件下关闭计算机
    的头像 发表于 11-26 15:33 2651次阅读

    mos管三个引脚怎么区分

    mos管三个引脚怎么区分  MOS管是一种常见的电子元件,它被广泛应用于各种电子设备中。MOS管通常具有三个引脚,即栅极(Gate)、源极(Source)和漏极(Drain)。这三个引脚在MOS管
    的头像 发表于 11-22 16:51 6890次阅读

    Linux内核UDP收包为什么效率低

    包效率真的很低,这是为什么?有没有办法去尝试着优化?而不是动不动就DPDK。 我们从最开始说起。 Linux内核作为一通用操作系统内核,脱胎于UNIX那一套现代操作系统理论。 但一开
    的头像 发表于 11-13 10:38 429次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>内核</b>UDP收包为什么效率低

    如何优化Linux内核UDP收包效率低

    真的很低,这是为什么?有没有办法去尝试着优化?而不是动不动就DPDK。 我们从最开始说起。 Linux内核作为一通用操作系统内核,脱胎于UNIX那一套现代操作系统理论。 但一开始不知
    的头像 发表于 11-10 10:51 535次阅读
    如何优化<b class='flag-5'>Linux</b><b class='flag-5'>内核</b>UDP收包效率低