Как работает Linux nmi watchdog? - PullRequest
24 голосов
/ 26 марта 2012

Теперь я сталкиваюсь с проблемой Linux NMI Watchdog. Я хочу использовать Linux NMI watchdog для обнаружения и восстановления зависания ОС. Поэтому я добавляю «nmi_watchdog = 1» в grub.cfg. А затем проверьте / proc / interrupt, NMI были запущены в секунду. Но после того, как я загрузил модуль с взаимоблокировкой (спин-блокировка двойного захвата), система зависла полностью, и ничего не происходило (никогда не паникуйте!). Похоже, что nmi watchdog не работал!

Потом я прочитал Documantation / nmi_watchdog.txt, там написано:

Помните, что при использовании локального APIC частота прерываний NMI он генерирует, зависит от загрузки системы. Местный сторожевой таймер APIC NMI, при отсутствии лучшего источника используется событие " циклов без остановки ".

Что такое событие " циклы без остановки "?

Добавлено

но если ваша система зависает ни на чем, кроме процессора "hlt" инструкция, сторожевой таймер сработает очень скоро, как "циклы событие "unhalted" будет происходить каждый тик "хлт", значит вам не повезло - событие вообще не произойдет и сторожевой таймер не сработает .

Похоже, что сторожевой таймер не сработает, если процессор выполнит команду "hlt", тогда я найду "hlt" в " Intel 64 и IA-32 Руководство по разработке программного обеспечения для архитектур, Volumn 2A ", оно описывает как следует:

Останавливает выполнение инструкции и переводит процессор в состояние HALT. Включенное прерывание (включая NMI и SMI), исключение отладки, Сигнал BINIT #, сигнал INIT # или сигнал RESET # будут возобновить исполнение.

Тогда я потерял ...

Мой вопрос:

  • Как работает Linux nmi watchdog?
  • Кто вызывает nmi?

Моя ОС - Ubuntn 10.04 LTS, Linux-2.6.32.21, CPU Pentium 4, двухъядерный 3,20 ГГц.

Я не читал весь исходный код о nmi watchdog (без времени), если я не мог понять, как работает nmi watchdog, я хочу использовать прерывание счетчика контроля производительности и inter- inter прерывание процессора (предоставляется APIC) для отправки NMI вместо nmi watchdog.

Кто-нибудь может мне помочь? Благодаря.

Ответы [ 2 ]

6 голосов
/ 19 июля 2013

Ответ зависит от вашего оборудования.

Немаскируемые прерывания (NMI) могут быть вызваны двумя способами: 1) когда ядро ​​достигает состояния остановки, которое не может быть прервано другим методом, и 2) аппаратно - с помощью кнопки NMI.

На передней панели некоторых серверов Dell, например, вы увидите маленький кружок с зигзагообразной линией внутри.Это символ НМИ.Рядом есть дыра.Вставьте булавку, чтобы вызвать прерывание.Если ваше ядро ​​собрано для его поддержки, это выведет трассировку паники ядра на консоль, а затем перезагрузит систему.

Это может произойти очень быстро.Так что если у вас нет консоли для сохранения вывода в файл, это может выглядеть как перезагрузка.

4 голосов
/ 16 апреля 2012

Как я знаю, nmi_watchdog сработал бы только для непрерывных зависаний. Я нашел пример кода от Google: http://oslearn.blogspot.in/2011/04/use-nmi-watchdog.html

Если ваша взаимоблокировка не является непрерывной, вы можете попробовать включить sysRq для запуска некоторой трассировки (Alt-printscreen-t) или сбоя (Alt-printscreen-c) для получения дополнительной информации.

...