Linux内核中有三个看门狗(watchdog)。他们都需要认真喂养和照顾。它们是:1./dev/watchdog2.softlockup检测机制3.hardlockup检测机制首先看1./dev/watchdog,这个如何喂看门狗?在Linux内核中有一个示例代码:在此示例中,将0写入到/ dev / watchdog中。每10秒归档一次。这是喂狗的过程。例如,我似乎无法感觉到这种看门狗的强大用途,但是在实际项目中它却很有用。例如:某个国家的中央银行在具有4T内存和320 cpu内核的Linux服务器上。运行数据库程序。该国所有人的银行帐户信息都存储在数据库中。当该数据库程序运行时,IO读写错误或程序错误被阻塞,那么该国人民就无法通过存款,取款和转移而使整个国民经济瘫痪。现在考虑一下,Linux系统中是否有任何机制可以解决此问题?此时,“ / dev / watchdog”来了这时,您只需要在数据库程序中添加一个与上面类似的示例程序,每10s在中间喂一次狗,只要数据库程序被卡住,卡住后就不能喂狗了。例如,在默认的60s之后,默认情况下,狗将进行罢工并立即触发服务器重新启动。服务器重新启动将重新加载数据库程序,或者在服务器重新启动过程中,因为服务器已从其所在的服务器群集断开连接,触发了群集中的脑部检测,并且数据库程序已移至其他设备在集群中运行。减少了很多损失。所以这个狗/ dev / watchdog太有用了。让我们再次看一下它的实现原理:看到系统中有一个内核线程watchdogd,还有两个字符文件:/ dev / watchdog和/ dev / watchdog0。看门狗实时调度线程负责喂狗的特定执行,/ dev / watchdog是内核提供给用户层的常规操作接口文件,用于打开狗,喂狗和查询状态。 / dev / watchdog0是特定的加密狗实现,可以基于特定的物理设备来实现,或者可以在软件(特定的使用方法:modprobesoftdog)中实现软件狗内核模块,以模拟硬件实现。让我们看一下软狗内核模块如何模拟硬件来实现此功能:从代码实现中,很容易理解,在打开看门狗(打开“ / dev / watchdog”)之后,将触发系统重启。默认情况下为60s,在60s期间,在倒计时过程中,仅给狗喂一次(softdog_ping),它将恢复到60s,然后触发系统重新启动,因此,只要一直喂狗,就不会发出Emergency_restart()执行,系统将不会重新启动。让我们看一下2.softlockup检测机制和3.hardlockup检测机制。软锁定检测机制的馈送方法是,每个cpu上的hrtimer会唤醒迁移/ N内核线程,并且每次唤醒迁移/ N时都会重置特定的时间戳。硬锁定检测机制的馈送方法是hrtimer每次执行时都将一个变量加一个。关于软锁定和硬锁定检测机制的特定原理实现和应用方案,我最近发布了视频“ Linux通用锁定和锁定检查机制”,其中包括“ Linux通用锁定和锁定检查机制”。包括实现原理(Linux内核代码层)和原理验证(使用ftrace调试方法),示例代码,动手模拟实验,可以全面了解softlockup / hardlockup。