Watchdog

Aus Thomas-Krenn-Wiki
Zur Navigation springen Zur Suche springen

Ein Watchdog ermöglicht bei einem Absturz eines Servers einen automatischen Reboot. Ein aktivierter Watchdog führt einen Countdown durch, der beim Ablauf des Countdowns zu einem Reboot führt. Wird auf das Watchdog-Device im OS geschrieben, beginnt der Countdown erneut zu Laufen. Bleiben die Schreibzugriffe auf das Watchdog-Device aus (z.B. aufgrund eines Absturzes), kommt es wunschgemäß zu einem Reboot.

Watchdog Chips einiger Thomas-Krenn-Server

System Watchdog Chip (via Super I/O chip) Linux Kernel Modul Linux Kernel Support seit Verweise
LES v3 Fintek F81803 f71808e_wdt 5.4 kernelnewbies.org, Commit
LES v4 ITE IT8613E bislang nicht im Kernel
LES plus v2 ITE IT8784E-I it87_wdt 5.10 kernelnewbies.org, Commit
LES plus v3 ITE IT8786
LES network 6L v2

Testen der Watchdog Funktion

Beispiel LES v3

Im BIOS können unter Advanced -> Super IO Configuration folgende Watchdog Optionen gesetzt werden:

  • WatchDog Reset Timer (Enabled/Disabled)
  • WatchDog Reset Timer Value
  • WatchDog Reset Timer Unit (Sec./Min.)
  • WatchDog Wake-up Time (Enabled/Disabled).

In diesem Beispiel (mit installiertem Ubuntu 20.04.3) aktivieren wir den WatchDog Reset Timer und stellen den Wert dazu auf 5 Min. Wenn Linux dann gestartet wird und keine weitere Konfiguration vorgenommen wird, startet das System alle 5 Minuten neu.

Nach dem Starten von Ubuntu 20.04.3 mit Linux Kernel 5.11 laden Sie das Watchdog Modul und überprüfen Sie die Ausgabe von dmesg:

tk@ubuntu:~$ sudo modprobe f71808e_wdt
tk@ubuntu:~$ dmesg | tail -n 1
[  185.557090] f71808e_wdt: Found f81803 watchdog chip, revision 16

Das Kommando wdctl zeigt danach Details zum Watchdog:

tk@ubuntu:~$ sudo wdctl 
Device:        /dev/watchdog
Identity:      f81803 watchdog [version 0]
Timeout:       60 seconds
FLAG           DESCRIPTION                   STATUS BOOT-STATUS
CARDRESET      Card previously reset the CPU      0           0
KEEPALIVEPING  Keep alive ping reply              0           0
MAGICCLOSE     Supports magic close char          0           0

Die Einstellung des BIOS (5 Min.) wird durch die Einstellung im OS (60 Sekunden) überschrieben. Ebenso ist der Watchdog nun deaktiviert. Erst ein Schreiben auf das Watchdog-Device /dev/watchdog aktiviert den Watchdog wieder.

Zum Testen der Watchdog-Funktionalität führen Sie als root Benutzer folgendes Kommando aus, drücken danach 2x die Enter-Taste und warten dann:

root@ubuntu:~# cat >> /dev/watchdog 


Nach Ablauf des Timeouts (60 Sekunden in diesem Beispiel) kommt es zu einem Reboot.

Für eine reguläre Verwendung des Watchdog installieren Sie das Paket watchdog. Stellen Sie anschließend sicher, dass das f71808e_wdt Modul sowie der Watchdog Daemon bei einem Systemstart automatisch gestartet werden. Der Daemon schreibt regelmäßig auf das Watchdog-Device, dadurch wird ein Reboot durch den Watchdog verhindert. Kommt es zu einem Crash, wird der Watchdog nach Ablauf des Timeouts das System neu starten.

Beispiel LES v4

Bislang unterstützt das it87_wdt Modul im Linux Kernel den verbauten ITE IT8613E nicht.

tk@debian12:~$ uname -a
Linux debian12 6.5.0-rc3-dirty #1 SMP PREEMPT_DYNAMIC Thu Jul 27 13:35:58 CEST 2023 x86_64 GNU/Linux
tk@debian12:~$ sudo modprobe it87_wdt
modprobe: ERROR: could not insert 'it87_wdt': No such device
tk@debian12:~$ sudo dmesg | tail -n 1
[  270.984823] it87_wdt: Unknown Chip found, Chip 8613 Revision 000c

Testpatch für IT8613 Support

diff --git a/drivers/watchdog/it87_wdt.c b/drivers/watchdog/it87_wdt.c
index bb1122909396..e888b1bdd1f2 100644
--- a/drivers/watchdog/it87_wdt.c
+++ b/drivers/watchdog/it87_wdt.c
@@ -13,9 +13,9 @@
  *                 http://www.ite.com.tw/
  *
  *     Support of the watchdog timers, which are available on
- *     IT8607, IT8620, IT8622, IT8625, IT8628, IT8655, IT8665, IT8686,
- *     IT8702, IT8712, IT8716, IT8718, IT8720, IT8721, IT8726, IT8728,
- *     IT8772, IT8783 and IT8784.
+ *     IT8607, IT8613, IT8620, IT8622, IT8625, IT8628, IT8655, IT8665,
+ *     IT8686, IT8702, IT8712, IT8716, IT8718, IT8720, IT8721, IT8726,
+ *     IT8728, IT8772, IT8783 and IT8784.
  */
 
 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
@@ -50,6 +50,7 @@
 /* Chip Id numbers */
 #define NO_DEV_ID      0xffff
 #define IT8607_ID      0x8607
+#define IT8613_ID      0x8613
 #define IT8620_ID      0x8620
 #define IT8622_ID      0x8622
 #define IT8625_ID      0x8625
@@ -277,6 +278,7 @@ static int __init it87_wdt_init(void)
                max_units = 65535;
                break;
        case IT8607_ID:
+       case IT8613_ID:
        case IT8620_ID:
        case IT8622_ID:
        case IT8625_ID:

Kompilieren am LES v4:

tk@debian12:~/git/kernels/libata$ time make -j4
[...]
  LD [M]  sound/soc/sof/intel/snd-sof-pci-intel-lnl.ko
  BTF [M] sound/soc/sof/intel/snd-sof-pci-intel-lnl.ko

real	156m47.475s
user	545m57.216s
sys	64m2.834s
tk@debian12:~/git/kernels/libata$ sudo make modules_install
[...]
tk@debian12:~/git/kernels/libata$ sudo make install
[...]
tk@debian12:~/git/kernels/libata$ sudo reboot
tk@debian12:~$ uname -a
Linux debian12 6.6.0-rc2-dirty #2 SMP PREEMPT_DYNAMIC Fri Sep 22 12:20:27 CEST 2023 x86_64 GNU/Linux
tk@debian12:~$ sudo modprobe it87_wdt
tk@debian12:~$ sudo dmesg | tail -n 1
[   72.801650] it87_wdt: Chip IT8613 revision 12 initialized. timeout=60 sec (nowayout=0 testmode=0)
tk@debian12:~$ 

Test:

tk@debian12:~$ sudo wdctl /dev/watchdog1 
Device:        /dev/watchdog1
Identity:      IT87 WDT [version 1]
Timeout:       60 seconds
Pre-timeout:    0 seconds
FLAG           DESCRIPTION               STATUS BOOT-STATUS
KEEPALIVEPING  Keep alive ping reply          1           0
MAGICCLOSE     Supports magic close char      0           0
PRETIMEOUT     Pretimeout (in seconds)        1           0
SETTIMEOUT     Set timeout (in seconds)       0           0
tk@debian12:~$ sudo su -
root@debian12:~# cat >> /dev/watchdog1


hwmon / sensors

Das Kommando sensors-detect von lm-sensors liefert u.a. folgende Ausgabe:

[...]
Some Super I/O chips contain embedded sensors. We have to write to
standard I/O ports to probe them. This is usually safe.
Do you want to scan for Super I/O sensors? (YES/no): 
Probing for Super-I/O at 0x2e/0x2f
Trying family `National Semiconductor/ITE'...               No
Trying family `SMSC'...                                     No
Trying family `VIA/Winbond/Nuvoton/Fintek'...               No
Trying family `ITE'...                                      Yes
Found `ITE IT8613E Super IO Sensors'                        Success!
    (address 0xa30, driver `to-be-written')
Probing for Super-I/O at 0x4e/0x4f
Trying family `National Semiconductor/ITE'...               No
Trying family `SMSC'...                                     No
Trying family `VIA/Winbond/Nuvoton/Fintek'...               No
Trying family `ITE'...                                      No
[...]

Beispiel LES plus v2

LES plus v2 Watchdog Einstellungen im BIOS (Advanced -> ACPI Settings).

Ab BIOS Version KBR2L200 können im BIOS unter Advanced -> ACPI Settings folgende Watchdog Optionen gesetzt werden:

  • WatchDog (Enabled/Disabled)
  • WatchDog Count Unit (Sec./Min.)
  • WatchDog Time-out Value

Nach dem Starten von Ubuntu 20.04.3 mit Linux Kernel 5.11 laden Sie das Watchdog Modul und überprüfen Sie die Ausgabe von dmesg:

tk@ubuntu:~$ sudo modprobe it87_wdt
tk@ubuntu:~$ dmesg | tail -n 1
[  190.437364] it87_wdt: Chip IT8784 revision 4 initialized. timeout=60 sec (nowayout=0 testmode=0)
tk@ubuntu:~$ sudo wdctl 
Device:        /dev/watchdog
Identity:      IT87 WDT [version 1]
Timeout:       60 seconds
Pre-timeout:    0 seconds
FLAG           DESCRIPTION               STATUS BOOT-STATUS
KEEPALIVEPING  Keep alive ping reply          1           0
MAGICCLOSE     Supports magic close char      0           0
SETTIMEOUT     Set timeout (in seconds)       0           0

Die Einstellung des BIOS (5 Min.) wird durch die Einstellung im OS (60 Sekunden) überschrieben. Ebenso ist der Watchdog nun deaktiviert.

Hinweis: Ein erneutes Aktivieren via OS konnten wir bislang noch nicht erfolgreich testen. Treiber-Support ist erst mit Linux Kernel 5.10 eingeflossen, dies könnte noch eine Ursache für Kompatibilitätsprobleme sein. Zudem könnte das Flag KEEPALIVEPING eine Rolle spielen. Wir testen weiter und werden diesen Artikel entsprechend aktualisieren.

Kernel 6.1

Hier einige Testausgaben von Debian 12 mit Kernel 6.1:

root@debian12:~# dmesg | grep -i wdt
[    3.788142] iTCO_wdt iTCO_wdt: Found a Intel PCH TCO device (Version=4, TCOBASE=0x0400)
[    3.796556] iTCO_wdt iTCO_wdt: initialized. heartbeat=30 sec (nowayout=0)
root@debian12:~# modprobe it87_wdt
root@debian12:~# dmesg | grep -i wdt
[    3.788142] iTCO_wdt iTCO_wdt: Found a Intel PCH TCO device (Version=4, TCOBASE=0x0400)
[    3.796556] iTCO_wdt iTCO_wdt: initialized. heartbeat=30 sec (nowayout=0)
[  377.573631] it87_wdt: Chip IT8784 revision 4 initialized. timeout=60 sec (nowayout=0 testmode=0)
root@debian12:~# wdctl 
Device:        /dev/watchdog0
Identity:      iTCO_wdt [version 0]
Timeout:       30 seconds
Timeleft:      30 seconds
Pre-timeout:    0 seconds
FLAG           DESCRIPTION               STATUS BOOT-STATUS
KEEPALIVEPING  Keep alive ping reply          1           0
MAGICCLOSE     Supports magic close char      0           0
PRETIMEOUT     Pretimeout (in seconds)        1           0
SETTIMEOUT     Set timeout (in seconds)       0           0
root@debian12:~# wdctl /dev/watchdog1
Device:        /dev/watchdog1
Identity:      IT87 WDT [version 1]
Timeout:       60 seconds
Pre-timeout:    0 seconds
FLAG           DESCRIPTION               STATUS BOOT-STATUS
KEEPALIVEPING  Keep alive ping reply          1           0
MAGICCLOSE     Supports magic close char      0           0
PRETIMEOUT     Pretimeout (in seconds)        1           0
SETTIMEOUT     Set timeout (in seconds)       0           0
root@debian12:~# 

Beispiel LES plus v3

LES plus v3 Watchdog Einstellungen im BIOS (Advanced -> System Power Management).

Im BIOS (YCLUL222, Build Date 11/30/2022), können im BIOS unter Advanced -> System Power Management folgende Watchdog Optionen gesetzt werden:

  • WatchDog (Enabled/Disabled)
  • Timer Mode
  • Boot Timeout Value

Nach dem Starten von Ubuntu 20.04.5 LTS (GNU/Linux 5.15.0-56-generic x86_64) laden Sie das Watchdog Modul und überprüfen Sie die Ausgabe von dmesg:

tk@ubuntu:~$ sudo modprobe it87_wdt
tk@ubuntu:~$ dmesg | tail -n 1
[  952.419872] it87_wdt: Chip IT8786 revision 4 initialized. timeout=60 sec (nowayout=0 testmode=0)
tk@ubuntu:~$ sudo wdctl
Device:        /dev/watchdog
Identity:      IT87 WDT [version 1]
Timeout:       60 seconds
Pre-timeout:    0 seconds
FLAG           DESCRIPTION               STATUS BOOT-STATUS
KEEPALIVEPING  Keep alive ping reply          1           0
MAGICCLOSE     Supports magic close char      0           0
SETTIMEOUT     Set timeout (in seconds)       0           0

Weitere Informationen


Foto Werner Fischer.jpg

Autor: Werner Fischer

Werner Fischer arbeitet im Product Management Team von Thomas-Krenn. Er evaluiert dabei neueste Technologien und teilt sein Wissen in Fachartikeln, bei Konferenzen und im Thomas-Krenn Wiki. Bereits 2005 - ein Jahr nach seinem Abschluss des Studiums zu Computer- und Mediensicherheit an der FH Hagenberg - heuerte er beim bayerischen Server-Hersteller an. Als Öffi-Fan nutzt er gerne Bus & Bahn und genießt seinen morgendlichen Spaziergang ins Büro.


Das könnte Sie auch interessieren

CPUID
Serial Attached SCSI
USV im Rechenzentrum nutzen