返回顶部
首页 > 资讯 > 操作系统 >如何理解Linux内核中Watchdog
  • 533
分享到

如何理解Linux内核中Watchdog

2023-06-15 16:06:23 533人浏览 泡泡鱼
摘要

这期内容当中小编将会给大家带来有关如何理解linux内核中Watchdog,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。在Linux内核中有三个watchdog,它们都需要被悉心的喂养照料,分别是: /d

这期内容当中小编将会给大家带来有关如何理解linux内核中Watchdog,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

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

/dev/watchdog

softlockup检测机制

hardlockup检测机制

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

samples/watchdog/watchdog-simple.c // SPDX-License-Identifier: GPL-2.0 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <fcntl.h>  int main(void) {         int fd = open("/dev/watchdog", O_WRONLY);         int ret = 0;         if (fd == -1) {                 perror("watchdog");                 exit(EXIT_FAILURE);         }            while (1) {                 ret = write(fd, "\0", 1);                  if (ret != 1) {                         ret = -1;                          break;                 }                    sleep(10);         }            close(fd);         return ret; }

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

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

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

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

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

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

再来看下它的实现原理:

#ps -ef | grep watchdog root       104     2  0  2020 ?        00:00:00 [watchdogd]  #ls -l /dev/watchdog* crw------- 1 root root  10, 130 Dec 30 20:04 /dev/watchdog crw------- 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内核模块怎样模拟硬件实现这个功能:

static int __init softdog_init(void)         hrtimer_init(&softdog_ticktock, CLOCK_MONOTONIC, HRTIMER_MODE_REL);         softdog_ticktock.function = softdog_fire;  static enum hrtimer_restart softdog_fire(struct hrtimer *timer)         emergency_restart();  static int softdog_ping(struct watchdog_device *w)         hrtimer_start(&softdog_ticktock, ktime_set(w->timeout, 0), (60s)                       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每次执行时都会对一个变量进行加一。

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

上述就是小编为大家分享的如何理解Linux内核中Watchdog了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网操作系统频道。

--结束END--

本文标题: 如何理解Linux内核中Watchdog

本文链接: https://lsjlt.com/news/280969.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何理解Linux内核中Watchdog
    这期内容当中小编将会给大家带来有关如何理解Linux内核中Watchdog,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。在Linux内核中有三个watchdog,它们都需要被悉心的喂养照料,分别是: /d...
    99+
    2023-06-15
  • Linux内核中watchdog怎么用
    这篇文章主要介绍了Linux内核中watchdog怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在Linux内核中有三个watchdog(看门狗),它们都需要被悉心的喂...
    99+
    2023-06-28
  • 如何理解Linux内核编译
    这篇文章给大家介绍如何理解Linux内核编译,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、前言(仅供参考)linux内核该如何学习安装vmware虚拟机或者virtualbox,再安装发行版本linuxwww.ke...
    99+
    2023-06-15
  • 如何理解Linux内核信号量
    本篇文章给大家分享的是有关如何理解Linux内核信号量,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。概念Linux内核的信号量在概念和原理上和用户态的System V的IPC机...
    99+
    2023-06-15
  • 如何理解Linux内核的文件
    本篇内容介绍了“如何理解Linux内核的文件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Linux文件预读算法磁盘I/O性能的发展远远滞后...
    99+
    2023-06-13
  • 如何理解Linux驱动中内核互斥锁
    如何理解Linux驱动中内核互斥锁,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 互斥体概述信号量是在并行处理环境中对多个处理器访问某个公共资源进行保护的机制,mut...
    99+
    2023-06-15
  • Linux内核中的数据双链表如何理解
    这篇文章给大家介绍Linux内核中的数据双链表如何理解,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Linux 内核中自己实现了双向链表,可以在 include/linux/list.h 找到定义。我们将会首...
    99+
    2023-06-28
  • 如何理解linux内核的软中断的情况
    这篇文章主要讲解了“如何理解linux内核的软中断的情况”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何理解linux内核的软中断的情况”吧!软中断介绍把可以延迟的处理从硬中断处理程序独立...
    99+
    2023-06-13
  • linux中如何修改内核
    今天小编给大家分享一下linux中如何修改内核的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。linux修改内核方法:1、利用...
    99+
    2023-06-29
  • 如何理解Linux内核参数overcommit_memory和OOM killer
    如何理解Linux内核参数overcommit_memory和OOM killer,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。什么是Linux Overcommit和OOMo...
    99+
    2023-06-05
  • 如何理解Linux内核驱动的编码风格
    本篇文章给大家分享的是有关如何理解Linux内核驱动的编码风格,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。最近在向Linux内核提交一些驱动程序,在提交的过程中,发现自己的代...
    99+
    2023-06-16
  • 如何解析Linux系统架构中的内核
    如何解析Linux系统架构中的内核,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。概述Linux系统一般有4个主要部分组成,内核、shell、文件系统和应用程序。内核、shell...
    99+
    2023-06-16
  • 如何编译Linux内核
    这篇文章给大家分享的是有关如何编译Linux内核的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在计算机世界里,内核kernel是处理硬件与一般系统之间通信的低阶软件low-level software。除过一些烧...
    99+
    2023-06-16
  • Linux系统中如何分析内核
    本篇文章给大家分享的是有关Linux系统中如何分析内核,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。在Linux系统中,内核是一个很重要的部分,属于Linux系统中的核心程序。...
    99+
    2023-06-28
  • 详解Linux内核内存管理架构
    内存管理子系统可能是linux内核中最为复杂的一个子系统,其支持的功能需求众多,如页面映射、页面分配、页面回收、页面交换、冷热页面、紧急页面、页面碎片管理、页面缓存、页面统计等,而且对性能也有很高的要求。本文从内存管理硬...
    99+
    2022-06-04
    Linux 内存 架构
  • Linux内核中的hash与bucket怎么理解
    本文小编为大家详细介绍“Linux内核中的hash与bucket怎么理解”,内容详细,步骤清晰,细节处理妥当,希望这篇“Linux内核中的hash与bucket怎么理解”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧...
    99+
    2023-06-27
  • 如何理解Suse内核透明代理
    如何理解Suse内核透明代理,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。随着Suse受到广大用户更多的靑眯,它的问题也随之增多,怎样才能更好的应用Suse呢?...
    99+
    2023-06-16
  • Linux内核怎么处理中断
    这篇文章主要为大家展示了“Linux内核怎么处理中断”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Linux内核怎么处理中断”这篇文章吧。中断是现代 CPU 工作方式中重要的部分。例如:当你每次...
    99+
    2023-06-15
  • Linux内核如何实现多核模式
    这篇文章主要介绍Linux内核如何实现多核模式,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在微软Windows 7大行其道的今天,你是否还坚持应用Linux操作系统。如果你是Linux操作系统的老用户。 这里为你讲...
    99+
    2023-06-17
  • ubuntu如何替换linux内核
    ubuntu替换linux内核的方法:打开终端命令行通过以下命令进行替换。查看系统默认内核。uname -r查看可获取的内核。apt-cache search linux 安装所需要版本的内核。sudo apt-get install li...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作