成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

聊一聊Linux內核中Watchdog

系統 Linux
某國中央銀行在一臺有 內存4T, 320個cpu核 的Linux服務器上跑一個數據庫程序,數據庫上存有他本國所有人民的銀行賬號信息,當此數據庫程序在運行過程中,發生了IO讀寫錯誤,或者程序bug, 一下卡住了,那么他本國人民就都不能存錢取錢轉賬了,整個國民經濟瞬間癱瘓。

 [[373385]]

本文轉載自微信公眾號「相遇Linux」,可以通過以下二維碼關注。轉載本文請聯系相遇Linux公眾號。

在Linux內核中有三個watchdog(看門狗),它們都需要被悉心的喂養照料,分別是:

1. /dev/watchdog

2.softlockup檢測機制

3.hardlockup檢測機制

首先看 1./dev/watchdog,此看門狗該怎樣喂養呢,linux內核中有一段樣例代碼:

  1. samples/watchdog/watchdog-simple.c 
  2. // SPDX-License-Identifier: GPL-2.0 
  3. #include <stdio.h> 
  4. #include <stdlib.h> 
  5. #include <unistd.h> 
  6. #include <fcntl.h> 
  7.  
  8. int main(void) 
  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; 

此例子中,每隔10秒鐘就會向“/dev/watchdog" 文件寫入0, 這就是喂狗過程,看到這個樣例,好像不太能感受到這個看門狗大的用處,但是放在實際工程中,用處太大了,舉個例子:

某國中央銀行在一臺有 內存4T, 320個cpu核 的Linux服務器上跑一個數據庫程序,數據庫上存有他本國所有人民的銀行賬號信息,當此數據庫程序在運行過程中,發生了IO讀寫錯誤,或者程序bug, 一下卡住了,那么他本國人民就都不能存錢取錢轉賬了,整個國民經濟瞬間癱瘓。

此時想想看,Linux系統有沒有什么機制來解決這種問題了,這時候“/dev/watchdog" 來了,

這個時候只需要在數據庫程序中加上類似上面的樣例程序,每隔10s中就去喂狗一次,

只要數據庫程序卡住,卡住之后就不能喂狗了,等到比如默認60s以后,這只狗就罷工了,立馬會默認觸發服務器重啟。

服務器重啟會重新加載數據庫程序, 或者服務器在重啟過程中,由于服務器與它所在的服務器集群失聯,從而觸發集群中的分腦檢測,把數據庫程序挪到集群中其它設備上跑, 此時就減少了很多損失. 所以這只狗/dev/watchdog 用處太大了。

再來看下它的實現原理:

  1. #ps -ef | grep watchdog 
  2. root       104     2  0  2020 ?        00:00:00 [watchdogd] 
  3.  
  4. #ls -l /dev/watchdog* 
  5. crw------- 1 root root  10, 130 Dec 30 20:04 /dev/watchdog 
  6. 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內核模塊怎樣模擬硬件實現這個功能:

  1. static int __init softdog_init(void) 
  2.         hrtimer_init(&softdog_ticktock, CLOCK_MONOTONIC, HRTIMER_MODE_REL); 
  3.         softdog_ticktock.function = softdog_fire; 
  4.  
  5. static enum hrtimer_restart softdog_fire(struct hrtimer *timer) 
  6.         emergency_restart(); 
  7.  
  8. static 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每次執行時都會對一個變量進行加一。

關于softlockup和hardlockup檢測機制的具體原理實現和應用場景,我最近發布了一個視頻“Linux常見鎖和lockup檢查機制" 包含了從實現原理(linux內核代碼層)和原理驗證(使用ftrace調試手段)、樣例代碼、動手模擬實驗,可以全方位理解softlockup/hardlockup.

 

責任編輯:武曉燕 來源: 相遇Linux
相關推薦

2019-02-13 14:15:59

Linux版本Fedora

2020-06-28 09:30:37

Linux內存操作系統

2023-12-14 11:35:32

.NET泄露模式

2019-03-20 14:29:46

Linux虛擬內存

2020-12-11 11:11:44

原子類JavaCAS

2019-12-02 16:23:03

Python編程語言“垃圾”回收

2022-08-30 07:39:57

C++namespace隔離

2021-01-28 22:31:33

分組密碼算法

2023-09-22 17:36:37

2020-05-22 08:16:07

PONGPONXG-PON

2018-06-07 13:17:12

契約測試單元測試API測試

2024-03-08 09:51:12

Linux網絡性能

2021-06-30 07:19:35

微服務業務MySQL

2024-10-16 15:11:58

消息隊列系統設計

2022-03-06 20:35:41

并發串行CAP

2019-12-12 14:52:10

數據庫腳本

2022-11-09 08:05:15

JavaScriptsuper()

2021-08-04 09:32:05

Typescript 技巧Partial

2023-07-06 13:56:14

微軟Skype

2021-02-06 08:34:49

函數memoize文檔
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美激情精品久久久久久免费 | 久久人 | 天天玩夜夜操 | 4hu最新网址| 成人免费看 | 亚洲美乳中文字幕 | www..99re| 欧美黑人狂野猛交老妇 | 国产精品一区二区三区四区 | 成人不卡视频 | 亚洲精品色 | 国产精品美女www爽爽爽视频 | 国产日韩欧美激情 | 国产精品91网站 | 国产精品久久久久久久久久久免费看 | 亚洲精品福利在线 | 亚洲精品久久久9婷婷中文字幕 | 亚洲一区二区三区在线视频 | 欧美久久久久久 | 91美女在线观看 | 久久精品二区 | 日韩免费成人av | 美女天天操 | 精品乱码一区二区 | 中文字幕一区二区三区在线乱码 | 精品视频99 | 国产欧美一级二级三级在线视频 | 久久久精品一区 | 国产精品久久 | 日韩欧美国产精品 | 欧美美女爱爱视频 | 婷婷久久久久 | 国产成人在线播放 | 日韩精品免费一区二区在线观看 | 91人人在线 | 黄色在线观看 | 91av在线视频观看 | 亚洲精品v日韩精品 | av性色 | 亚洲一区二区av在线 | 淫片一级国产 |