Подтвердить что ты не робот

Как работает ОС Linux nmi?

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

Затем я прочитал Documantation/nmi_watchdog.txt, в нем говорится:

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

Что означает событие цикл unhalted?

Он добавил

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

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

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

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

Мой вопрос:

  • Как работает ли Linux nm-сторожевой таймер?
  • Кто запускает nmi?

Моя ОС - Ubuntn 10.04 LTS, Linux-2.6.32.21, CPU Pentium 4 с двумя ядрами 3,20 ГГц.

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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

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