Watchdog
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
- ITE IT8613E #167 (github.com/lm-sensors/lm-sensors/issues)
- https://github.com/a1wong/it87
- https://wiki.odroid.com/odroid-h3/application_note/fan_speed_control_with_temp
- https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/log/drivers/gpio/gpio-it87.c
- https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/log/drivers/hwmon/it87.c
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
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
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
- https://www.kernel.org/doc/html/v6.8/watchdog/watchdog-api.html
- Testing the Intel TCO watchdog using Ubuntu live (www.madore.org)
- Linux Watchdog Daemon (www.crawford-space.co.uk)
- https://groups.google.com/g/linux.debian.user/c/lw3HDSg5CAA / https://lwn.net/Articles/700524/
- https://uefi.org/sites/default/files/resources/Watchdog%20Descriptor%20Table.pdf
- http://www.fit-pc.com/wiki/index.php/Linux_Mint:_Watchdog_configuration
- https://github.com/coreos/fedora-coreos-tracker/issues/911
- https://www.supertechcrew.com/watchdog-keeping-system-always-running/
- https://trac.gateworks.com/wiki/watchdog
- https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/watchdog/watchdog-api.rst
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.
|