Как работает сторожевой таймер NMI в Linux?

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

Затем я прочитал документацию/nmi_watchdog.txt, там сказано:

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

Что такое событие " cycles unhalted"?

Добавлено

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

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

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

Затем я проиграл...

Мой вопрос:

  • Какработает сторожевой таймер NMI в Linux?
  • Ктозапускает NMI?

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

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

Кто-нибудь может мне помочь? Спасибо.

26
задан silverbullettt 26 March 2012 в 03:31
поделиться