Инструменты пользователя

Инструменты сайта


amlogic_watchdog  

Watchdog (сторожевой таймер) в линуксе (Armbian/Ubuntu/Debian)

Введение

Watchdog (сторожевой таймер) - аппаратно реализованная схема контроля над зависанием системы. Сторожевые таймеры используются в системах, которые должны работать без надзора человека. Такие системы должны быть самовосстанавливающимися без участия оператора.

В контроллерах JetHub D1 и JetHub H1 поддерживается драйвер аппаратного watchdog meson_wdt.

Проверка устройств

При корректно запущенном модулей watchdog в системе /dev должны быть видны устройства /dev/watchdog и /dev/watchdog0:

root@jethubj100:~# ls -la /dev/watchdog*
crw------- 1 root root  10, 130 Feb 21 17:29 /dev/watchdog
crw------- 1 root root 246,   0 Feb 21 17:29 /dev/watchdog0
root@jethubj100:~#

Установка сервиса Watchdog

Для установки сервиса watchdog выполните следующие команды:

sudo apt-get update
sudo apt-get install watchdog

В прошивках начиная с версии Armbian 22.02 watchdog предустановлен

Создайте папку для лог-файлов watchdog:

sudo mkdir -p /var/log/watchdog

Проверьте настройки для сервиса в файле /etc/default/watchdog:

# Start watchdog at boot time? 0 or 1
run_watchdog=1
# Start wd_keepalive after stopping watchdog? 0 or 1
run_wd_keepalive=1
# Load module before starting watchdog
watchdog_module="none"
# Specify additional watchdog options here (see manpage).
watchdog_options="-s -v -c /etc/watchdog.conf"

Конфигурационные файлы

Внесите необходимые изменения в конфигурационный файл /etc/watchdog.conf: * раскомментируйте использование устройства /dev/watchdog (иначе сервис watchdog не будет использовать аппаратный таймер для перезагрузки контроллера) * установите необходимые проверки и таймауты

Ниже приведен пример конфигурационного файла, с установленным таймаутом 15 секунд на зависание:

$ cat /etc/watchdog.conf
#ping                   = 172.31.14.1
#ping                   = 172.26.1.255
#interface              = eth0
#file                   = /var/log/messages
#change                 = 1407
 
# Uncomment to enable test. Setting one of these values to '0' disables it.
# These values will hopefully never reboot your machine during normal use
# (if your machine is really hung, the loadavg will go much higher than 25)
#max-load-1             = 24
#max-load-5             = 18
#max-load-15            = 12
 
# Note that this is the number of pages!
# To get the real size, check how large the pagesize is on your machine.
#min-memory             = 1
#allocatable-memory     = 1
 
#repair-binary          = /usr/sbin/repair
#repair-timeout         = 60
#test-binary            =
#test-timeout           = 60
 
# The retry-timeout and repair limit are used to handle errors in a more robust
# manner. Errors must persist for longer than retry-timeout to action a repair
# or reboot, and if repair-maximum attempts are made without the test passing a
# reboot is initiated anyway.
#retry-timeout          = 60
#repair-maximum         = 1
 
watchdog-device = /dev/watchdog
 
# Defaults compiled into the binary
#temperature-sensor     =
#max-temperature        = 90
 
# Defaults compiled into the binary
#admin                  = root
#interval               = 1
#logtick                = 1
#log-dir                = /var/log/watchdog
 
# This greatly decreases the chance that watchdog won't be scheduled before
# your machine is really loaded
realtime                = yes
priority                = 1
 
# Check if rsyslogd is still running by enabling the following line
#pidfile                = /var/run/rsyslogd.pid
 
watchdog-timeout        = 15

Значение watchdog-timeout определяет через какое время после аварии сервиса watchdog аппаратный таймер перезагрузит контроллер

Автозапуск и проверка сервиса

Для включения автозапуска сервиса выполните следующие команды:

 
sudo systemctl enable watchdog.service
sudo systemctl start watchdog.service

Проверка работоспособности сервиса:

root@jethubj100:~# service watchdog status
● watchdog.service - watchdog daemon
     Loaded: loaded (/lib/systemd/system/watchdog.service; enabled; vendor pres>
     Active: active (running) since Mon 2022-02-21 17:29:24 UTC; 17h ago
    Process: 2718 ExecStartPre=/bin/sh -c [ -z "${watchdog_module}" ] || [ "${w>
    Process: 2720 ExecStart=/bin/sh -c [ $run_watchdog != 1 ] || exec /usr/sbin>
   Main PID: 2722 (watchdog)
      Tasks: 1 (limit: 977)
     Memory: 516.0K
        CPU: 3min 33.528s
     CGroup: /system.slice/watchdog.service
             └─2722 /usr/sbin/watchdog -s -v -c /etc/watchdog.conf

Feb 22 10:52:23 jethubj100 watchdog[2722]: still alive after 62076 interval(s)
Feb 22 10:52:24 jethubj100 watchdog[2722]: still alive after 62077 interval(s)
Feb 22 10:52:25 jethubj100 watchdog[2722]: still alive after 62078 interval(s)
Feb 22 10:52:26 jethubj100 watchdog[2722]: still alive after 62079 interval(s)
Feb 22 10:52:27 jethubj100 watchdog[2722]: still alive after 62080 interval(s)
Feb 22 10:52:28 jethubj100 watchdog[2722]: still alive after 62081 interval(s)
Feb 22 10:52:29 jethubj100 watchdog[2722]: still alive after 62082 interval(s)

Настроенный и запущенный сервис watchdog постоянно сбрасывает аппаратный сторожевой таймер. Если он не сможет этого сделать (например, в случае если зависла система или наступило любое другое настроенное в конфиге условие), таймер сработает и перезагрузит контроллер.

Проверка сторожевого таймера

Будьте осторожны: команды в этом разделе приводят к панике ядра и полной остановке работы контроллера. Используйте их только в тестовой среде

echo c > /proc/sysrq-trigger

Данная команда приводит к искусственному сбою ядра linux. Если watchdog работает правильно, то он автоматически перезагрузит систему после таймаута.

root@jethubj100:~# echo c > /proc/sysrq-trigger
[63168.053150] sysrq: Trigger a crash
[63168.053204] Kernel panic - not syncing: sysrq triggered crash
[63168.056648] CPU: 3 PID: 65544 Comm: bash Not tainted 5.15.24-meson64 #trunk.0045.jethome.0
[63168.064838] Hardware name: JetHome JetHub J100 (DT)
[63168.069670] Call trace:
[63168.072082]  dump_backtrace+0x0/0x200
[63168.075706]  show_stack+0x18/0x68
[63168.078982]  dump_stack_lvl+0x68/0x84
[63168.082605]  dump_stack+0x18/0x34
[63168.085882]  panic+0x164/0x324
[63168.088901]  sysrq_handle_crash+0x1c/0x20
[63168.092869]  __handle_sysrq+0x8c/0x160
[63168.096577]  write_sysrq_trigger+0x88/0x120
[63168.100719]  proc_reg_write+0xac/0xf8
[63168.104340]  vfs_write+0xbc/0x398
[63168.107618]  ksys_write+0x68/0xf0
[63168.110895]  __arm64_sys_write+0x1c/0x28
[63168.114776]  invoke_syscall+0x44/0x108
[63168.118485]  el0_svc_common.constprop.3+0x94/0xf8
[63168.123143]  do_el0_svc+0x24/0x88
[63168.126420]  el0_svc+0x20/0x50
[63168.129439]  el0t_64_sync_handler+0x90/0xb8
[63168.133579]  el0t_64_sync+0x180/0x184
[63168.137206] SMP: stopping secondary CPUs
[63168.141091] Kernel Offset: disabled
[63168.144533] CPU features: 0x00001001,00000846
[63168.148845] Memory Limit: none
[63168.151871] ---[ end Kernel panic - not syncing: sysrq triggered crash ]---
<code>
Пауза 15 секунд (в соответствии с значением watchdog_timeout в конфигурационном файле)
<code>
AXG:BL1:d1dbf2:a4926f;FEAT:E0DC318C:2000;POC:F;EMMC:0;READ:0;0.0;CHK:0;                                                                                                                    
sdio debug board detected                                                                                                                                                                  
TE: 33151                                                                                                                                                                                  
                                                                                                                                                                                           
BL2 Built : 10:43:22, May 26 2021. axg g28b9431 - jenkins@walle02-sh                                                                                                                       
set vcck to 1100 mv                                                                                                                                                                        
set vddee to 950 mv                                                                                                                                                                        
Board ID = 9                                                                                                                                                                               
CPU clk: 1200MHz                                                                                                                                                                           
DDR low power enabled                                                                                                                                                                      
DDR3 chl: Rank0 16bit @ 912MHz                                                                                                                                                             
bist_test rank: 0 1b 02 34 24 0b 3d 17 00 2f 27 0e 40 00 00 00 00 00 00 00 00 00 00 00 00 761   - PASS                                                                                     
Rank0: 1024MB(auto)-2T-13                                                                                                                                                                  
AddrBus test pass!                                                                                                                                                                         
eMMC boot @ 0                                                                                                                                                                              
sw8 s                                                                                                                                                                                      
storage init finish                                                                                                                                                                        
emmc switch 3 ok                                                                                                                                                                           
Authentication key not yet programmed                                                                                                                                                      
get rpmb counter error 0x00000007                                                                                                                                                          
emmc switch 0 ok                                                                                                                                                                           
Load FIP TMP HDR from eMMC, src: 0x0000c200, des: 0x05100000, size: 0x00004000, part: 0                                                                                                    
0001c000Load BL31 from eMMC, src: 0x0001c200, des: 0x05104000, size: 0x0002ac00, part: 0                                                                                                   
bl2z: ptr: 05127358, size: 00001e18                                                                                                                                                        
Load FIP HDR from eMMC, src: 0x0000c200, des: 0x01700000, size: 0x00004000, part: 0                                                                                                        
Load BL3x from eMMC, src: 0x00010200, des: 0x01704000, size: 0x0008e400, part: 0                                                                                                           
NOTICE:  BL31: v1.3(release):110e239                                                                                                                                                       
NOTICE:  BL31: Built : 19:07:23, Jul  2 2018                                                                                                                                               
NOTICE:  BL31: AXG normal boot!                                                                                                                                                            
NOTICE:  BL31: BL33 decompress pass                                                                                                                                                        
[Image: axg_v1.1.3326-d0bacc8 2018-07-05 11:21:34 jenkins@walle02-sh]                                                                                                                      
OPS=0x43                                                                                                                                                                                   
25 0b 43 00 88 fc 1a 07 8d 24 0c 3a b2 65 16 59                                                                                                                                            
bl30:axg ver: 9 mode: 0                                                                                                                                                                    
bl30:axg thermal0                                                                                                                                                                          
[0.015862 Inits done]                                                                                                                                                                      
secure task start!                                                                                                                                                                         
high task start!
low task start!
ERROR:   Error initializing runtime service opteed_fast


U-Boot 2022.01-armbian (Feb 08 2022 - 06:07:00 +0000) jethubj100
amlogic_watchdog.txt · Последнее изменение: 2022/02/22 14:04 — Vyacheslav

Инструменты страницы