UPD: Посл��дние изыскания изложены здесь: Серверы IBM/Lenovo и сторожевой таймер: эпизод II. Дальнейшее изложение является прологом к статье по ссылке.
Столкнулся с существенным регрессом в 12-й версии SLES, связанным с поддержкой сторожевого таймера (устройство /dev/watchdog) на серверах IBM/Lenovo.
Вначале коротенький ликбез, если кто не в теме. Как это должно работать и зачем это нужно? Кто и так знает предмет, может спокойно пропустить следующий абзац.
В составе серверных и промышленных платформ имеется специальная схема – сторожевой таймер. Будучи активированным, он начинает отсчитывать заданное время (например, одну минуту). Если за это время к нему повторно не обратиться, то в конце интервала будет выполнена аппаратная перазагрузка. Если обратиться, то интервал начинает отсчитываться заново. Это нужно для того, чтобы автоматически восстановить работоспособность компьютера в случае зависания операционной системы или предоставляющего какой-то важный сервис программного обеспечения. Такое решение в обязательном порядке применяется в кластерах высокой готовности (HA) и других применениях, требующих постоянной готовности системы. Для компьютеров с архитектурой Intel используется несколько аппаратных интерфейсов сторожевого таймера, в зависимости от производителя системы, из них наиболее распространённым является Intel TCO (iTCO). В Linux драйверы сторожевого таймера реализованы как модули ядра, которые предоставляют программный интерфейс к нему в виде устройства /dev/watchdog.
В Intel-серверах IBM, которые теперь выпуск��ются фирмой Lenovo, за интерфейс к сторожевому таймеру отвечает аппаратный уровень Intel TCO и поддерживающий его модуль ядра Linux iTCO_wdt.В SLES версии 11 всё с этим было хорошо и работало автоматически, устройство /dev/watchdog, поддерживаемое драйвером iTCO_wdt, появлялось в системе при настройках по умолчанию. Однако, в 12-й версии SLES драйвер iTCO_wdt переписали, сократив его размер в 3 раза, и что-то сломали. Как выяснилось, в SLES 11 тоже всё было плохо, файл /dev/watchdog создавался, но к драйверу не подключался и функциональности таймера не обеспечивал.
Теперь (в SLES12) происходит следующее. Модуль iTCO_wdt загружается, оставляет в системном журнале диагностику: “iTCO_wdt: unable to reset NO_REBOOT flag, device disabled by hardware/BIOS”, остаётся загруженным в память, но ничего не делает, и устройство /dev/watchdog не появляется. Ручная загрузка и выгрузка модуля ничего не меняет в этом поведении. Настройки BIOS и интегрированного сервисного модуля (IMM) тоже никак на это не влияют. Проблема совершенно одинаково проявляется на нескольких серверах IBM/Lenovo HS23 и x3250.Если на той же машине загрузить SLES11, всё работает отлично.
Обходным путём решения вопроса может являться прописывание в /etc/modules-load.d модуля softdog, предоставляющего интерфейс к сторожевому таймеру путём его программной эмуляции на уровне ядра ОС. Но по сути, это просто заглушка, никак не решающая вопрос возможного отказа самой операционной системы.
Хуже того, в одном из недавних промежуточных обновлений SLES12 драйвер softdog грузился по умолчанию. Хотя такое поведение очень скоро отключили обратно, но теперь мы не можем быть уверены, аппаратный или програ��мный драйвер предоставляет вам сервис сторожевого таймера, пока не проверим конкретную версию Linux.
Я передал диагностическую информацию и описание ошибки разработчикам ядра из Novell и веду работу по инциденту со службой поддержки IBM/Lenovo, но уже два месяца ситуация не разрешается, хотя формально SLES12 является полностью поддерживаемой и рекомендуемой операционной системой для указанных серверов. Так что, если читатель вдруг столкнётся с неработоспособностью сторожевого таймера (приводящей, например, к невозможности запустить кластер) или с неполнотой реализации его функций, связанных с подменой аппаратного драйвера программным, то, по крайней мере, будет знать, где копать.
Похоже, нашёлся путь решения проблемы, об этом написал новую статью, упомянутую в самом верху.
Столкнулся с существенным регрессом в 12-й версии SLES, связанным с поддержкой сторожевого таймера (устройство /dev/watchdog) на серверах IBM/Lenovo.
Вначале коротенький ликбез, если кто не в теме. Как это должно работать и зачем это нужно? Кто и так знает предмет, может спокойно пропустить следующий абзац.
В составе серверных и промышленных платформ имеется специальная схема – сторожевой таймер. Будучи активированным, он начинает отсчитывать заданное время (например, одну минуту). Если за это время к нему повторно не обратиться, то в конце интервала будет выполнена аппаратная перазагрузка. Если обратиться, то интервал начинает отсчитываться заново. Это нужно для того, чтобы автоматически восстановить работоспособность компьютера в случае зависания операционной системы или предоставляющего какой-то важный сервис программного обеспечения. Такое решение в обязательном порядке применяется в кластерах высокой готовности (HA) и других применениях, требующих постоянной готовности системы. Для компьютеров с архитектурой Intel используется несколько аппаратных интерфейсов сторожевого таймера, в зависимости от производителя системы, из них наиболее распространённым является Intel TCO (iTCO). В Linux драйверы сторожевого таймера реализованы как модули ядра, которые предоставляют программный интерфейс к нему в виде устройства /dev/watchdog.
В Intel-серверах IBM, которые теперь выпуск��ются фирмой Lenovo, за интерфейс к сторожевому таймеру отвечает аппаратный уровень Intel TCO и поддерживающий его модуль ядра Linux iTCO_wdt.
Теперь (в SLES12) происходит следующее. Модуль iTCO_wdt загружается, оставляет в системном журнале диагностику: “iTCO_wdt: unable to reset NO_REBOOT flag, device disabled by hardware/BIOS”, остаётся загруженным в память, но ничего не делает, и устройство /dev/watchdog не появляется. Ручная загрузка и выгрузка модуля ничего не меняет в этом поведении. Настройки BIOS и интегрированного сервисного модуля (IMM) тоже никак на это не влияют. Проблема совершенно одинаково проявляется на нескольких серверах IBM/Lenovo HS23 и x3250.
Обходным путём решения вопроса может являться прописывание в /etc/modules-load.d модуля softdog, предоставляющего интерфейс к сторожевому таймеру путём его программной эмуляции на уровне ядра ОС. Но по сути, это просто заглушка, никак не решающая вопрос возможного отказа самой операционной системы.
Хуже того, в одном из недавних промежуточных обновлений SLES12 драйвер softdog грузился по умолчанию. Хотя такое поведение очень скоро отключили обратно, но теперь мы не можем быть уверены, аппаратный или програ��мный драйвер предоставляет вам сервис сторожевого таймера, пока не проверим конкретную версию Linux.
Похоже, нашёлся путь решения проблемы, об этом написал новую статью, упомянутую в самом верху.