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
    +关注

    关注

    88

    文章

    11822

    浏览量

    219609
  • 代码
    +关注

    关注

    30

    文章

    4977

    浏览量

    74420
  • Watchdog
    +关注

    关注

    0

    文章

    12

    浏览量

    9746

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    如何在 Linux 中使用 imx8mm

    的其他三个内核吗? 或者是否有一用于单核的专用 .dtsi 文件? 或者我们需要修改 imx8mm.dtsi?
    发表于 04-29 08:26

    Linux系统中这三个命令的完整功能和正确查看方法

    Linux 系统的日常运维中,监控进程资源使用情况是最频繁的工作之一。当服务器 CPU 突然飙高、内存告警、或者业务响应变慢时,运维工程师首先要做的事情就是查看系统资源使用状况。top、ps、free 这三个命令几乎是每个运维人员每天都要敲几十遍的工具。
    的头像 发表于 04-21 11:45 214次阅读

    如何理解Linux内核中的PCIe驱动

    我们习惯了用 Verilog 去死磕 PCIe 的底层协议状态机。但一旦越过硬件边界来到操作系统层面,Linux 内核是如何接管并驱动这些 PCI/PCIe 设备的呢?由于不同的 CPU 架构实现了
    的头像 发表于 04-11 17:22 1292次阅读

    Linux内核大核心模块深度解析:调度、内存与I/O

    Linux内核作为操作系统的核心,其进程调度、内存管理和文件I/O大模块共同决定了系统的性能与稳定性。无论是多核服务器的高并发处理,还是嵌入式设备的资源受限场景,深入理解这些底层机制都是进行性能调
    的头像 发表于 03-12 09:00 255次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>内核</b><b class='flag-5'>三</b>大核心模块深度解析:调度、内存与I/O

    Linux内核的“心跳”:jiffies如何为系统计时?

    Linux 内核的世界里,有一默默工作的 "计时器"——jiffies。它不像我们手机上的时钟那样显示年月日,却掌控着内核中绝大多数时间相关的操作:从进程调度到设备驱动的定时检查
    的头像 发表于 02-04 16:27 947次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>内核</b>的“心跳”:jiffies如何为系统计时?

    深入RK3588内核:rockchip_linux_defconfig的作用与调试价值

    在 RK3588 芯片的 Linux 开发中,有一文件始终是开发者绕不开的核心 ——kernel/arch/arm64/configs/rockchip_linux_defconfig。无论是首次
    的头像 发表于 02-03 15:56 1399次阅读
    深入RK3588<b class='flag-5'>内核</b>:rockchip_<b class='flag-5'>linux</b>_defconfig的作用与调试价值

    深度解析ES8389/ES8390/音频芯片Linux驱动(Linux6.1内核

    基于 Linux6.1 内核,从驱动架构、寄存器配置、核心函数、数据流走向四维度,完整拆解 ES8389 的 Linux 驱动实现,帮你吃透这款芯片的驱动逻辑。     注意:在讲解
    的头像 发表于 02-02 11:37 2547次阅读
    深度解析ES8389/ES8390/音频芯片<b class='flag-5'>Linux</b>驱动(<b class='flag-5'>Linux</b>6.1<b class='flag-5'>内核</b>)

    内核配置项引发网络性能下降的深度剖析

    在嵌入式系统开发中,内核配置对系统性能起着关键作用。近期在对基于 Rockchip 平台的 Linux 内核配置调试时,发现三个内核跟踪器配
    的头像 发表于 02-01 16:48 1839次阅读
    <b class='flag-5'>内核</b>配置项引发网络性能下降的深度剖析

    Linux系统内核参数调优实战指南

    Linux 内核参数调优是系统性能优化的核心环节。随着云原生架构的普及和硬件性能的飞速提升,默认的内核参数配置往往无法充分发挥系统潜力。在高并发 Web 服务、大数据处理、容器化部署等场景下,合理的
    的头像 发表于 01-28 14:27 764次阅读

    三个经典开关电源实际问题解析

    下面三个关于多路输出电源连续工作模式的问题,测试一下您的电源设计知识。然后核对您的答案。
    的头像 发表于 01-22 16:08 3687次阅读
    <b class='flag-5'>三个</b>经典开关电源实际问题解析

    【「Linux 设备驱动开发(第 2 版)」阅读体验】+读内核处理的核心辅助函数

    “处理内核的核心辅助函数”进行学习。 第3章又是以5主题展开讨论学习,①、Linux内核加锁机制和共享资源;②、处理内核等待、睡眠和延迟机
    发表于 01-10 22:08

    Linux内核printk日志级别全解析:从参数解读到实操配置

    一、开篇:一命令引出的核心问题 在 Linux 终端执行 cat /proc/sys/kernel/printk,你可能会看到这样的输出: 这串数字不是随机的,而是内核日志系统的“核心配置开关
    的头像 发表于 11-20 15:54 2005次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>内核</b>printk日志级别全解析:从参数解读到实操配置

    RK3568运行linux卡死,串口无输出

    请问一下RK3568和匹配的linux内核 是否可以使能nmi watchdog.如何使能。这样就可以保留到卡死现场。
    发表于 09-19 15:41

    怎么结合嵌入式,Linux,和FPGA三个方向达到一均衡发展?

    在嵌入式领域,不少人都怀揣着让嵌入式、Linux 和 FPGA 三个方向实现均衡发展的梦想,然而实践中却面临诸多挑战。就像备受瞩目的全栈工程师稚晖君,他从大学玩单片机起步,凭借将智能算法融入嵌入式而
    的头像 发表于 06-25 10:08 1055次阅读
    怎么结合嵌入式,<b class='flag-5'>Linux</b>,和FPGA<b class='flag-5'>三个</b>方向达到一<b class='flag-5'>个</b>均衡发展?

    如何配置和验证Linux内核参数

    Linux系统运维和性能优化中,内核参数(sysctl)的配置至关重要。合理的参数调整可以显著提升网络性能、系统稳定性及资源利用率。然而,仅仅修改参数是不够的,如何验证这些参数是否生效同样关键。
    的头像 发表于 05-29 17:40 1404次阅读