Преданней вотчдога нету существа

altВ холиварах по роутерам вам наверняка доводилось слышать такое заклинание, как «watchdog». Дескать, ни у кого в домашнем сегменте такого нет. Но мы спросили у наших разработчиков, и оказывается, в кинетиках всё есть, а вам для настройки вотчдога не нужно курить мануалы.

Для начала обратимся к Википедии.
Сторожевой таймер, реже контрольный таймер (англ. watchdog timer букв. «сторожевой пёс») — аппаратно реализованная схема контроля над зависанием системы. Представляет собой таймер, который периодически сбрасывается контролируемой системой. Если сброса не произошло в течение некоторого интервала времени, происходит принудительная перезагрузка системы.

[...]

Физически сторожевой таймер может быть:

[...]

  • Компонентом устройства, например, микросхемой на материнской плате.
  • Частью кристалла SoC, микроконтроллера.

    Конец цитаты.

Подобные таймеры есть в электронных схемах подавляющего большинства встраиваемой электроники, в том числе и в кинетиках. Их цель — предотвратить такое повисание, вывод из которого возможен был бы только при наличии физического доступа к устройству. В предположении, что роутер может быть установлен где-то, куда вы не можете в случайный момент времени подойти и выключить ему электропитание. А потом включить.

По сути, сторожевой таймер можно представить себе в виде соседа, который сидит рядом с вами на лекции и периодически задает вопросы, чтобы проверить, что вы не уснули. Если сосед не получает ответа в течение некоторого времени, он начинает пихать вас в бок, чтобы разбудить.

Вы могли бы сами задавать себе вопросы в уме, пытаясь таким образом поддерживать себя бодрствующим. Тогда это был бы «программный» сторожевой таймер. Но есть серьезные основания полагать, что если после очередного вопроса самому себе вы бы сладко уснули, не дав ответа, то и разбудить самого себя в последний момент тоже не успели бы. Потому сторожевой таймер — это, как правило, все-таки отдельный компонент, внешний по отношению к контролируемой системе. Как в случае с соседом. И если сосед на лекции — это ненадежный сторожевой таймер, потому что он сам может уснуть, то аппаратные реализации таких таймеров делаются значительно более надежными (за счет простоты), чем контролируемая система.

Если вернуться к кинетикам, то сторожевой таймер в них является частью микросхемы SoC (процессора). Он присутствует во всех используемых нами микросхемах производства компании MediaTek, причем кропотливо патчится нашими разработчиками для работы именно на уровне ядра (референсные вотчдоги чипмейкера могут быть юзерспейсными и при высокой нагрузке давать ложные срабатывания из-за низкого приоритета). Он занимается тем, что постоянно считает от некоторого числа до нуля. И как только он добирается до нуля, то тут же выполняет аппаратную перезагрузку процессора. Микропрограмма (прошивка) кинетика стремится не дать таймеру досчитать до нуля, время от времени подсовывая ему новую точку отсчета. Таким образом, можно с некоторыми допущениями утверждать, что если прошивка повисает, то она перестает выдавать таймеру новую точку отсчета, он-таки добирается до нуля, и вся система перезагружается.

С допущениями потому, что программная часть кинетика, как и ваш внутренний мир во время сидения на лекции, это весьма сложная система из многих компонентов. И если вы, к примеру, перестаете записывать за лектором, но продолжаете отвечать соседу, то сосед не считает вас уснувшим. Так же сторожевой таймер не считает кинетик повисшим, если, например, у него повис клиент DHCP. Что чрезвычайно маловероятно, но все же. Будем честными. Взаимодействует с таймером только ядро микропрограммы, которое ответственно за базовые функции системы. Такие как маршрутизация трафика и Wi-Fi.

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

Во всех остальных случаях мы считаем ненужным перезагружать кинетик целиком, подобно тому как это делают некоторые производители. Потому что уверены в своем коде (и его тестовом покрытии) настолько, чтобы утверждать: если у вас пропал доступ в интернет, то это не значит, что все компоненты микропрограммы рассыпались, как карточный домик. Это просто значит, что надо переустановить подключение к провайдеру. В крайнем случае, перезагрузить USB-модем, через который осуществляется доступ в интернет. За все это у нас отвечает компонент Ping Checker (help.keenetic.com/hc/ru/articles/360000477699).