91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Linux內核中watchdog怎么用

發布時間:2022-01-21 09:46:11 來源:億速云 閱讀:465 作者:小新 欄目:開發技術

這篇文章主要介紹了Linux內核中watchdog怎么用,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

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

\1. /dev/watchdog

2.softlockup檢測機制

3.hardlockup檢測機制

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

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

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

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

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

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

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

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

再來看下它的實現原理:

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

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


感謝你能夠認真閱讀完這篇文章,希望小編分享的“Linux內核中watchdog怎么用”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

绵阳市| 博白县| 宣汉县| 黄梅县| 梓潼县| 巴青县| 洞口县| 安义县| 文登市| 大丰市| 陇川县| 泗水县| 英吉沙县| 子长县| 新余市| 荃湾区| 嘉禾县| 沙湾县| 吉水县| 永福县| 当雄县| 林周县| 眉山市| 杂多县| 青海省| 远安县| 罗江县| 厦门市| 四子王旗| 双峰县| 二连浩特市| 马山县| 邹平县| 武宣县| 镇安县| 威海市| 阜康市| 平武县| 观塘区| 嘉善县| 玉溪市|