Теперь я сталкиваюсь с проблемой 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.
Кто-нибудь может мне помочь? Благодаря.